消息驱动
- 事件不要求持久化保存
- 消息只是为了更新业务数据的状态,数据库才是一等数据
- 不要求所有的数据操作都通过消息驱动
事件溯源
- 事件作为一等数据保存
- 统一的事件管理器和接口,数据更新都由事件产生
- 数据库中数据的当前状态根据事件的聚合产生
- 聚合数据可以保存在数据库中,可以根据事件重新生成
事件溯源的优点
- 历史重现:从事件中重新生成视图数据库
- 方便的数据流处理于报告生成
- 性能
- 服务的松耦合
事件溯源的缺点
- 只能保证事务的最终一致性
- 设计和开发思维的转变,学习成本
- 事件结果的改变
- 扩展性:Event Store的分布式实现,事件的分布式处理
消息驱动 vs事件溯源
- 一等数据:事件vs业务数据
- 事件永久保存、历史重现
- 所有数据更新都必须通过事件来产生
- Event Store服务承担更多的功能
事件溯源的数据一致性
- 一个事件只处理一个服务的数据
- 保证事件的至少一次处理、幂等性
- 业务请求的错误处理:多次重试失败、网络异常、服务不可用
事件溯源和CQRS
- CQRS:命令查询职责分离
- C端执行命令,Q端执行查询
事件溯源与Axon框架
Axon框架介绍
- 实现Event Sourcing和CQRS模式的框架
- 实现了命令、事件的分发、处理、聚合、查询、存储
- 提供标签式开发,易维护,并提供了Spring boot的集成
- 提供Command和Event
- 可扩展,可用于分布式环境,如Spring Cloud
Axon框架的构成
- 聚合:Aggregate
- 聚合的资源库:Repository
- Command:Command Bus 和 Command handler
- Event :Event Bus 、Event Handler 和Event Store
- Sage: 基于事件的流程管理模式
- Query: 执行数据查询操作的特殊Command
Axon框架的构成- 可扩展性
- 分布式Command分发
- 通过AMQP实现分布式Event分发和处理

网友评论