第 3 章 数据 Mesh 的事件流
本作品已使用人工智能进行翻译。欢迎您提供反馈和意见:translation-feedback@oreilly.com
事件会发布到事件流中,供感兴趣的订阅者使用。但是,事件流的属性是什么,与队列有什么区别吗?或消息系统有什么不同?事件由哪些组成?我们如何确保正确地组成可重用的事件流?在本章中,我们将仔细研究事件和事件流,包括需求、与其他类似架构的区别,以及它们为我们的消费者服务提供的一些使用模式。
首先,让我们从事件开始。事件是一种定义明确的事件记录,包含有关所发生事件的所有信息。事件通常基于业务实体或实体之间的关系。举个简单的汽车例子,我们可以看到实体事件详细记录了items 、orders 和coupons 的信息。就实体之间的关系而言,您可能会看到item_added_to_cart 和coupon_applied_to_order 这样的事件。
稍后我们将详细介绍什么是事件、事件的结构以及我们需要使用的支持技术。首先,我们必须了解事件流在事件驱动数据 Mesh 中扮演的角色的几个关键概念。
图 3-1展示了图 2-1 中汽车领域边界上下文的扩展。内部实现使用关系数据库,其中的表格代表组成汽车所需的组件/实体。反腐败层提供REST API,用于操作用例,如请求组装新汽车和修改现有库存。
此外,该域还向事件流发布两个数据产品--一个基于项目,另一个基于订单。专门的业务逻辑从发布到事件流的数据中提取并隔离内部模型。无论您选择通过防破坏层公开什么,都会成为公共 API 的一部分,因此在添加内容和添加方式时一定要谨慎。
图 3-1. 一个电子商务域,包括用于数据产品的事件流应用程序接口和用于操作问题的 REST 应用程序接口
请注意,要提取或使用事件驱动的数据产品,内部实施不一定是事件驱动的。第 8 章将介绍如何将非事件驱动系统与事件驱动系统集成,以及弥合这一差距的方法。您可能还会注意到,我们在事件流中加入了传统的请求-响应选项。对于非事件驱动但需要为外部消费者提供格式良好的数据产品的记录系统来说,这是一种非常常见的模式。我们只需维护现有的应用程序接口,并根据消费者需求和现有数据要求添加事件驱动数据产品。
图 3-2显示了一个事件驱动汽车领域的抽象实现,其中包含与系统内部运行相关的领域事件。
您可以选择向外界公开某些域事件,但必须谨慎选择要公开的事件。我们将在第 7 章详细介绍事件设计和选择哪些事件要公开(哪些要隐藏)。在现阶段,只需注意不需要事件驱动系统就能产生事件流,而且并非所有事件类型都适合作为数据产品生产。
图 3-2. 数据产品是为外部使用而专门构建的,旨在耦合使用。领域事件可能不适合用于数据产品目的
现在,让我们来仔细了解一下事件、记录和消息,以及事件流和事件代理之间的关系。
事件、信息和记录
事件是应用程序中发生的事件,记录在记录(保存事件数据的容器)中,并发布到事件代理托管的事件流中。
在讨论事件流和事件驱动架构时,我通常会避免使用消息(message)这一术语,因为它是一个术语,随着时间的推移,对不同的人有着不同的含义。通俗地说,我们 ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access