Axon是一个轻量级框架,能够帮助开发者通过在架构层面构建可扩展和可伸缩的应用。(注:以DDD面向领域驱动设计为基础的CQRS框架)
Axon Framework背景、发展简史
随着时间的发展,软件的需求也在不断增长。公司都希望自己的(web)应用程序和自身业务共同发展。这就意味着不仅仅是工程和代码变得更复杂,也意味着功能不断地新增、更改和移除。它令人沮丧的是,一个看似易于实现的功能,却要求开发团队改动整个应用程 序。此外,如今的web程序的目标是针对潜在的数十亿用户,这便使可伸缩性成了必要的条件。
虽然有很多的应用和框架围绕着可扩展性问题进行处理,例如GigaSpaces(类似Microsoft Azure) 和 Terracotta(分布式缓存线性扩展平台),它们都存在着一个根本的缺陷。他们通过要求开发人员在开发应用时,使用分层体系架构,来试图解决可扩展性问题。在某些情况下,他们甚至会阻止或严格限制使用一个真正的领域模型,强迫所有领域逻辑都放到服务中。虽然可以很快地构建一个应用程序,最终,这种做法将导致复杂性的增加和开发速度减慢。
命令查询职责分离(CQRS)模式解决了这些问题,大幅改变了应用程序的架构。CQRS不是将分离的逻辑分到不同的层 ,逻辑的分离是以改变应用程序的状态或查询为依据。这意味着,执行命令(行为有可能更改应用程序的状态)和查询应用程序数据是由不同的组件执行。这种分离事实上最重要的原因是,他们各自有不同的技术和非技术的要求。当命令执行后,查询组件利用事件同步或异步地进行更新。该更新机制通过事件来完成,正是这种架构如此的可扩展,可伸缩,最终会更易于维护。
注意
一个完整的CQRS解释不在本文的范围之内。如果你想了解更多关于CQRS的信息, 请访问 Axon Framework的网站: www.axonframework.org。它包含了背景知识的链接。
由于CQRS与主导当今软件局面的分层架构有着根本上的不同,开发人员试图找到自己实现这个架构的方式,但往往会掉入各种陷阱。这就是了Axon Framework 产生的原因:帮助开发人员实现CQRS,并让他们只专注于业务逻辑。
Axon是什么?
Axon Framework 通过支持开发者应用命令查询职责分离(CQRS)架构模式,来帮助构建可伸缩、可扩展和可维护的应用程序。它通过提供最重要的构建块的实现来实现,如:聚合、仓储以及事件总线(事件的调度机制)。此外,Axon提供了对注解(annotation)的支持,它允许你构建聚合和事件监听器而不用将你的代码捆绑到Axon特有的逻辑。这使你能够专注于业务逻辑, 而不是数据传输(the plumbing),并帮助你使代码更容易隔离测试。
Axon不会试图以任何方式隐藏CQRS架构或任何组件。因此,根据团队规模,明智的选择是,每 个团队中有一个或多个对CQRS有着透彻了解的开发人员。不管怎么样,Axon帮助保证把事件交付给正确的事件监听器,并按正确的顺序并发处理它们。这些多线程问题通常很难处理,导致难以跟踪Bug、应用程序完全失去响应。当你的时间紧迫,你可能甚至不想去关心这些问 题。Axon的代码是经过完全测试的,以防止这些类型错误的出现。
Axon Framework由多个模块(jar)组成,这些模块提供工具和组件来构建可伸缩的基础设施。Axon核心模块为不同的组件提供了基本的API,并为单JVM的应用程序解决方案提供了简单实现。其他模块提供专业的组件,来解决可伸缩性和高性能的问题。
何时使用Axon?
并不是每一个应用程序都会从Axon中获益。简单的CRUD (Create, Read, Update, Delete) 应用程序、没有横向扩展预期的应用程序,可能无法从CQRS或Axon中受益。
具有以下一个或多个特点的应用程序可能会从CQRS和Axon中受益:
-
在相当长的一段时间内可能会扩展新的功能。例如,一个网上商店可能初期仅仅是一 个订单进度跟踪系统。后期,可能会扩展到对库存信息的管理,确保物品售出后及时的更新 库存。随后,财务人员可能需要销售的财务统计数据等等。虽然很难预测软件项目未来会如何发展,但是大多数类型的应用程序都清楚地呈现为这样。
-
应用程序有一个比较高的读写比,这意味着数据只写几次,但却要读很多次。由于查 询的数据源与用于命令验证的数据源不同,因此才有可能对数据源的快速查询提供优 化。重复数据不再是一个问题,因为当数据改变时,事件也会被发布。
-
应用程序需要不同格式的展示数据,许多应用程序目前不仅仅只停留在显示数据到网 页上。 某些应用程序,例如,每月邮件通知所发生的与用户有关的变化,搜索引擎也是一个例子。他们使用相同的应用程序数据,但在某种意义上这是优化的快速搜索。 报表工具随着时间的变化汇总信息,这同样是同一数据的不同格式。使用Axon,每个数据源都可以彼此独立地实时或定时更新。
-
当应用程序面对不同的受众,清晰地隔离组件时,它也能从Axon中获益。例如网上商 店。员工会在网站上更新产品信息和可用性,同时客户可以下单和查询他们的订单状 态。通过Axon,这些组件可以部署在不同的服务器上,并使用不同的策略进行扩展。 通过事件机制,Axon将分发事件到部署在不同服务器上的订阅组件,使其保持最新的 数据状态。
-
与其他应用程序集成可能是繁琐的工作。严格使用命令和事件定义应用程序的API, 会使它更容易与外部应用程序集成。任何应用程序都可以发送命令或监听应用程序生 成的事件。
来源:oschina
链接:https://my.oschina.net/u/2848115/blog/1550309