`
lvjun106
  • 浏览: 436804 次
  • 性别: Icon_minigender_1
  • 来自: 芜湖
社区版块
存档分类
最新评论

Axon, 基于CQRS模式的分布式事务解决方案框架神器

 
阅读更多

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 电子文档 java cqrs

    Axon框架是一种轻量级的Java框架,其核心设计思想是基于领域驱动设计(Domain-Driven Design,DDD)的命令查询职责分离(Command Query Responsibility Segregation,CQRS)模式。CQRS模式将系统的读取和写入操作...

    hello-axon:CQRS + EventSourcing概念介绍的演示项目

    axon:CQRS + EventSourcing概念介绍的演示项目" 是一个基于Java技术的实践项目,旨在深入浅出地展示CQRS(Command Query Responsibility Segregation,命令查询职责分离)和Event Sourcing(事件溯源)这两种先进的...

    Axon Framework 使用指南中文版(V3.2)(翻译完成度90%)

    - **定义**:Axon框架是一个全面的支持领域驱动设计(DDD)及命令查询责任分离(CQRS)模式的开发框架,旨在帮助开发者构建高度可扩展、可维护的企业级应用。 - **主要功能**:提供聚合、存储库、事件总线等核心组件...

    axon-cqrs-sample

    轴突样本此示例简单演示了如何将基于Java的用于CQRS / ES。 该演示旨在说明该平台的以下功能... 命令和查询责任分离(CQRS)。 使用基于聚合根的存储库进行事件源使用MongoDb作为您的EventStore 使用RabbitMQ发布和...

    axon框架demo

    Axon 框架是一个基于事件驱动和命令查询分离(CQRS)原则的Java开发框架,主要用于构建可扩展和复杂的分布式系统。它提供了一整套工具和服务,帮助开发者实现领域驱动设计(DDD)中的概念,如事件溯源、事件Sagas...

    axon:分布式事务-事件驱动

    Axon 是一个基于事件驱动和命令式模式的开源框架,主要设计用于构建可扩展的、高性能的、基于Java的微服务应用。它提供了一整套工具和服务,帮助开发者实现复杂的分布式事务处理,使得在分布式系统中保持数据一致性...

    pcf-axon-cqrs-demo:使用Pivotal CloudFoundry,SpringBoot和Axon框架演示Java中的CQRS和事件源微服务

    Cloud Foundry上的CQRS和事件源该项目演示了Cloud Foundry对CQRS和事件源的使用。 它包含两个微服务,均使用提供的组件构建。 您可以阅读的。 这里有两个Spring Boot应用程序,因为模式已经在代码中按字面实现了。 ...

    Axon Framework 使用指南中文版(V3.2)

    - **Axon Framework概述**:Axon Framework是一款专为支持CQRS和领域驱动设计(DDD)开发的Java框架。它提供了一整套工具和服务,帮助开发者构建可扩展、可伸缩和可维护的应用程序。通过支持聚合、存储库和事件总线...

    Axon快速开始软件包

    Axon是一款基于Java的开源框架,专为实现领域驱动设计(DDD)和命令查询责任分离(CQRS)模式而设计。它提供了一整套工具,帮助开发者构建可扩展、高性能、模块化的微服务应用。CQRS是一种架构模式,将读取和写入...

    CQRS:轻量级Java CQRS框架

    1. **Axon Framework**:这是一个功能丰富的框架,专为构建基于事件驱动和CQRS的应用程序而设计。它提供了命令处理、事件处理、事件存储和查询服务等功能。 2. **Eventuate**:Eventuate提供了一种跨数据库事务一致...

    axonframework中文使用说明文档

    Axon Framework 是一个基于Java和JVM的开源框架,专门设计用于实现领域驱动设计(DDD)和命令查询责任分离(CQRS)模式。这个框架帮助开发者构建可扩展、高性能和可维护的应用程序,尤其适用于复杂业务逻辑的系统。...

    仿知乎java源码-axon-initializr:一个定制的SpringInitailizr,可帮助人们从头开始创建基于Axon的CQRS和

    应用程序生成器还鼓励使用通用方法解决常见问题——如果您有很多团队同时创建微服务,则特别有用。 在 Taylor 列表中的另一个重点是简化对重要图书馆的访问。 每个企业都有库——它们依赖于简化任务或处理管道的工具...

    spring-boot-axon-sample, 使用 Spring Boot,轴突,AngularJS和 web sockets的样例应用.zip

    spring-boot-axon-sample, 使用 Spring Boot,轴突,AngularJS和 web sockets的样例应用 Spring Boot 轴突样品简介这是一个示例应用,...Todo应用程序利用以下设计模式:域驱动设计CQRS事件来源基于任务的用户界面建筑

    axon_demo:DDD模式研究之axon框架源码分析

    2. **Axon框架**:Axon提供了一套工具,用于构建基于事件溯源(Event Sourcing)和CQRS(Command Query Responsibility Segregation,命令查询职责分离)架构风格的应用。它支持事件驱动的设计,使得系统更具有可...

    Axon4.4 文档中文翻译

    Axon4.4 是一款专为构建基于领域驱动设计(DDD)、命令查询责任分离(CQRS)和事件驱动架构(EDA)的应用程序而设计的框架。它提供了核心框架(Axon Framework)和Axon Server,两者共同帮助开发者创建可扩展、高可...

    axon_user_1.zip

    Axon 是一个基于领域驱动设计(DDD)、事件溯源(Event Sourcing)和命令查询职责分离(CQRS)架构模式的Java框架,专为构建可扩展的、高性能的企业级应用程序而设计。这个"axon_user_1.zip"压缩包包含了作者在学习...

    航空订票系统java源码-event-driven-airline:通过一个简化的示例演示DDD、CQRS、事件源和Axon框架

    Axon 框架 DDD(Domain Driven Design)、CQRS(Command Query Responsibility Segregation)、Event Sourcing的概念比较深。 下面,应该有助于解释。 -DDD:本质上,DDD 围绕代码中的领域驱动术语展开,并将领域...

    前端开源库-axon

    总结来说,Axon是一个强大且灵活的前端消息传递库,它简化了组件间通信,尤其是对于需要实时交互的应用,提供了高效的解决方案。通过学习和使用Axon,开发者可以提升项目的可维护性和性能,构建出更加健壮的前端应用...

    axon-2.4-full.zip

    Axon Framework 2.4.3 是一个专为构建基于事件驱动和命令式模式的分布式系统而设计的Java框架。这个框架的核心理念是通过事件溯源(Event Sourcing)和领域驱动设计(Domain-Driven Design, DDD)来帮助开发者更好地...

Global site tag (gtag.js) - Google Analytics