Chris Richardson 微服务系列之「最佳实例:Eventuate」

Chris Richardson 在微服务架构领域的研究非常权威新颖,我们为大家精选了三篇微服务架构系列文章进行翻译。本文为该系列最后一篇:「事件溯源架构的最佳实例:Eventuate」。

640

Chris Richardson,是世界著名的软件大师,经典技术著作《 POJOS IN ACTION 》一书的作者,也是 cloudfoundry.com 最初的创始人,他的研究领域包括 Spring、Scala、微服务架构设计、NoSQL 数据库、分布式数据管理、事件驱动的应用编程等。

Chris Richardson 与 Martin Fowler、Sam Newman、Adrian Cockcroft 等并称为 世界十大软件架构师。Chris 与家人居住在美国加州奥克兰市的海滨小镇,他定期为企业提供微服务设计培训和实战项目的架构咨询服务。

您可以在此回顾前面两篇精选内容:《事件驱动型微服务》事件溯源(Event Sourcing)型微服务》

上一篇为大家解读了事件溯源(Event Sourcing)架构的诸多好处,本期我们将带大家一同探索事件溯源(Event Sourcing)架构的最佳实例 Eventuate 是如何把这种独特而强大的方法付诸实现的。

事件溯源型微服务的最佳实例:EVENTUATE

EventuateTM 平台包括了一个可伸缩的,分布式的事件 Store 服务器和不限语言及框架的用户框架。

下图展示了 Eventuate 的核心组件:

11

Eventuate 事件 Store 服务器

事件 Store 有两种API:REST API 和 STOMP API。

REST API 支持以下操作:

  • 创建一个初始化和非空事件序列的新实体
  • 通过追加新事件更新现有实体
  • 用主键检索实体事件

STOMP API 让微服务得以订阅事件。微服务用 STOMP API 来为一个或多个事件类型创建持久的命名的订阅源。如果订阅者掉线或重连时,都会有事件发生。

Eventuate 用户库

Eventuate 用户框架建立在服务器 API 之上,用于提供程序语言和特定框架编程模型。例如,Eventuate 为使用 Spring 框架的 Java 和 Scala 开发者提供架构。

你可以用用户框架来编写以下组件:

  • 基于 Event Sourcing 的集合,用于处理命令和触发领域事件
  • 受外部请求而触发的服务,通过发送指令更新聚合
  • 订阅领域事件的事件处理器,用于完成以下三件事情中的一件:
  1.      升级聚合
  2.      更新具体视图
  3.      触发外部系统

实现最终事务的一致性

Eventuate 能非常容易地实现事件驱动的最终事务一致性。下方所示如何实现「下单」这个用例的。

12

概览

每个服务都包含由 Eventuate 客户框架构建的各种应用组件。

订单服务包含以下组件:

  • 订单服务
  • 订单聚合
  • 事件处理器

客户服务包含以下组件:

  • 客户聚合
  • 事件处理器

ID 为 8745 的客户已经存在于事件 Store 中。

更新具体视图

通过订阅 Eventuate 发布的事件,服务可以轻易地更新具体视图。以下图表展示了服务如何使用 MongoDB 来更新客户视图及其近期订单的视图。

13

每位客户都对应一份包含有客户信息和近期订单的 MongoDB 文档。

「用户视图更新服务」负责更新具体视图。它定义了一个事件处理器,用来订阅相关的客户和订单事件。当事件处理器接收到一个事件时,它会为更新该客户的 MongoDB 文档。

「用户视图查询服务」处理 GET 请求,通过调用客户 MongoDB 文档获得客户的详细资料。

触发外部系统

应用同样可以注册一个事件处理器来触发外部系统。例如,「订单通知服务」可以注册一个事件处理器,来处理「订单已审核」事件,使用 Amazon SES 发送确认邮件。

14


想要与大师面对面吗?想要了解微服务领域最前沿的动态吗?

DaoCloud 现联手世界著名软件大师 Chris Richardson 为您现场布道微服务架构,助力企业应用的成功转型。我们为您推荐由 Chris Richardson 和《 Docker 源码分析》一书的作者孙宏亮共同讲授的 微服务架构及容器技术高端系列课程。

报名链接:http://form.mikecrm.com/f.php?t=dUJI3G

2 thoughts on “Chris Richardson 微服务系列之「最佳实例:Eventuate」

    • 感谢您指出我们的错误,我们对此抱以歉意,我们会加以改正并继续努力,谢谢您的持续关注!

Leave a Reply

Your email address will not be published. Required fields are marked *