Axon框架背景
一个简短的历史
随着时间的推移,对软件项目的需求迅速增加。公司希望他们的(网络)应用程序与他们的业务一起发展。这意味着不仅项目和代码库变得更加复杂,而且还意味着功能不断被添加,更改并且(遗憾的是不够)被删除。如果发现看似易于实现的功能可能需要开发团队拆分整个应用程序,那将是令人沮丧的。此外,今天的网络应用程序面向潜在数十亿人的受众,使可扩展性成为无可争辩的要求。
虽然有许多应用程序和框架可以解决可扩展性问题,例如GigaSpaces和Terracotta,但它们存在一个基本缺陷。这些框架试图解决可伸缩性问题,同时让开发人员使用他们习惯的分层架构开发应用程序。在某些情况下,它们甚至会阻止或严格限制真实领域模型的使用,从而迫使所有领域逻辑写入服务。虽然开始构建应用程序的速度更快,但最终这种方法会导致复杂性增加和开发速度变慢。
命令查询责任隔离(CQRS)模式通过彻底改变应用程序的架构方式来解决这些问题。逻辑不是将逻辑分离成单独的层,而是根据它是在改变应用程序的状态还是查询它来分离。这意味着执行命令(可能会更改应用程序状态的操作)由不同于查询应用程序状态的组件执行。这种分离的最重要原因是每种技术都有不同的技术要求和非技术要求。执行命令时,查询组件(a)使用事件同步更新。这种通过事件进行更新的机制正是使这种体系结构具有可扩展性,可扩展性和最终可维护性的原因。
注意
CQRS的完整说明不在本文档的范围内。如果您想了解有关CQRS的更多背景信息,请访问Axon Framework网站:www.axonframework.org。它包含背景信息的链接。
由于CQRS与构成当今软件领域的分层架构根本不同,因此开发人员在试图找到解决方案的同时走进一些陷阱并不罕见。这就是Axon Framework构思的原因:帮助开发人员实施CQRS应用程序,同时专注于业务逻辑。
什么是Axon?
Axon Framework通过支持开发人员应用Command Query Responsibility Segregation(CQRS)架构模式,帮助构建可伸缩,可扩展和可维护的应用程序。它通过提供最重要的构建块的实现来实现,例如聚合,存储库和事件总线(事件的调度机制)。此外,Axon提供了注释支持,允许您构建聚合和事件监听器,而无需将代码绑定到Axon特定逻辑。这使您可以专注于业务逻辑,而不是管道,并帮助您使代码更容易单独测试。
Axon不以任何方式试图隐藏开发人员的CQRS架构或其任何组件。因此,根据团队规模,仍然建议让一个或多个开发人员对每个团队的CQRS有透彻的了解。但是,在确保向正确的事件侦听器传递事件并以正确的顺序同时处理事件时,Axon确实提供了帮助。这些多线程问题通常难以处理,导致难以跟踪的错误,有时还会导致应用程序失败。当你有一个紧迫的截止日期,你可能甚至不想关心这些问题。Axon的代码经过全面测试,可以防止出现这些类型的错误。
Axon Framework由许多模块(jar)组成,这些模块提供了构建可扩展基础架构的工具和组件。Axon Core模块为不同的组件提供基本API,以及为单JVM应用程序提供解决方案的简单实现。其他模块通过提供专用构建块来解决可伸缩性或高性能问题。
什么时候使用Axon?
并非每个应用程序都会受益于Axon。简单的CRUD(创建,读取,更新,删除)应用程序可能无法从CQRS或Axon中受益。但是,有很多应用程序可以从Axon中受益。
可能受益于CQRS和Axon的应用程序是那些显示以下一个或多个特征的应用程序:
-
当前系统会持续的以增加新功能的方式进行扩展。例如,在线商店可能会从跟踪订单进度的系统开始。在稍后阶段,可以对库存信息业务进行扩展,以确保在销售商品时正确地更新库存。甚至以后,会计部门可能需要记录销售的财务统计数据等。虽然很难预测软件项目将来如何发展,但系统一直是出于持续变化和扩展的状态的。
-
该应用程序具有很高的读写比。这意味着数据只写了几次,读的次数多了很多次。由于查询的数据源与用于命令验证的数据源不同,因此可以优化这些数据源以进行快速查询。重复数据不再是问题,因为事件是在数据更改时发布的。
-
系统以多种不同的形式呈现数据。如今,系统基本上在数据不断发生变化并需要在网页上显示信息时是不会停止的。例如,某些应用程序会发送每月电子邮件,会通知用户可能与其相关的更改。搜索引擎是另一个例子。它们使用与系统相同的元数据,但采用的方式是不一样的,它针对快速搜索进行了优化。报告工具将信息聚合到报告中,以显示数据随时间的演变。这又是相同数据的不同格式。使用Axon,每个数据源可以实时或定期彼此独立地更新。
-
当应用程序将具有不同受众的组件明确分开时,它也可以从Axon中受益。这种应用的一个例子是在线商店。员工将更新网站上的产品信息和可用性,同时客户下订单并查询订单状态。使用Axon,这些组件可以部署在不同的计算机上,并使用不同的策略进行扩展。它们使用事件保持最新,Axon将分发给所有订阅的组件,无论它们部署在哪台机器上。
-
与其他应用程序集成可能是繁琐的工作。使用命令和事件严格定义应用程序的API可以更轻松地与外部应用程序集成。任何应用程序都可以发送命令或侦听应用程序生成的事件。
相关推荐
详细介绍了分布式事务实现的模式中的Event Sourcing模式,并通过完整实例演示了Event Sourcing模式下,实现微服务系统的分布式事务的完整过程。 8-1 事件溯源模式介绍 8-2 事件溯源模式与Axon框架-1 8-3 事件溯源...
axon 框架的电子书文档。基于ddd思想的cqrs电子书文档。java的,可以借鉴到dotnet及其他服务端业务开发中。
轴突样本此示例简单演示了如何将基于Java的用于CQRS / ES。 该演示旨在说明该平台的以下功能... 命令和查询责任分离(CQRS)。 使用基于聚合根的存储库进行事件源使用MongoDb作为您的EventStore 使用RabbitMQ发布和...
axon 分布式事务-事件驱动
Cloud Foundry上的CQRS和事件源该项目演示了Cloud Foundry对CQRS和事件源的使用。 它包含两个微服务,均使用提供的组件构建。 您可以阅读的。 这里有两个Spring Boot应用程序,因为模式已经在代码中按字面实现了。 ...
应用程序生成器还鼓励使用通用方法解决常见问题——如果您有很多团队同时创建微服务,则特别有用。 在 Taylor 列表中的另一个重点是简化对重要图书馆的访问。 每个企业都有库——它们依赖于简化任务或处理管道的工具...
CQRS和事件来源CQRS活动采购轴突你好世界样本怎么跑讯息处理器表现结语
spring-boot-axon-sample, 使用 Spring Boot,轴突,AngularJS和 web sockets的样例应用 Spring Boot 轴突样品简介这是一个示例应用,...Todo应用程序利用以下设计模式:域驱动设计CQRS事件来源基于任务的用户界面建筑
CQRS框架Axon快速开始。详细指导详见:https://docs.axoniq.io/reference-guide/
Axon框架是目前国外支持DDD开发最成熟的CQRS框架,本人觉得推广和普及很有意义,于是对其进行了完整的翻译,希望能给国内研究DDD的朋友们提供帮助
使用springboot+hibernate+mysql 直接解压导入idea,clean+install 即可自动生成数据库
Axon 框架 DDD(Domain Driven Design)、CQRS(Command Query Responsibility Segregation)、Event Sourcing的概念比较深。 下面,应该有助于解释。 -DDD:本质上,DDD 围绕代码中的领域驱动术语展开,并将领域...
axonframework官方文档翻译成中文,Axon框架是目前国外支持DDD开发最成熟的CQRS框架。
本人属于业内萌新,应业务学习需求对Axon框架进行学习,全篇以机翻为基础,自己凭着浅薄的理解逐句对用语进行了整理,如专业用语有误或理解有问题,请大家多多指正。 本篇是Axon4.4框架的翻译文档,按原文档分为六个...
领域驱动cqrs分支
axon_demo DDD模式研究之axon框架原始码分析。
/微型公司 该项目旨在演示使用和构建云原生,事件驱动的微服务架构的端到端最佳实践。...模式和技术: 微服务命令和查询责任分离(CQRS) 活动采购DDD-聚合技术领域 (v1.5.3.RELEASE) (Dalston.RELEASE)
Axon框架是目前国外支持DDD开发最成熟的CQRS框架,本人觉得推广和普及很有意义,于是对其进行了完整的翻译,希望能给国内研究DDD的朋友们提供帮助,目前已经完成90%的翻译,剩余的部分可以认为是非关键部分的,我会...
这个存储库提供了这样一个应用程序,尽管是一个演示而不是一个完整的解决方案。它的个人目的是在应用程序期间为实时代码提供垫脚石应用程序。我打算在连续会谈中以这个样本为基础,随着时间的推移进一步增强它的能力...
CQRS和DDD架构模式抽象的这项工作提出了CQRS(命令和查询责任隔离)和DDD(域驱动设计)体系结构模式的实际应用,其中包括: 领域模型和有界上下文定义技术代码和业务逻辑之间的清晰分离指令端休息API 查询侧边api ...