第 7 章 设计活动 设计活动
本作品已使用人工智能进行翻译。欢迎您提供反馈和意见:translation-feedback@oreilly.com
为事件驱动架构设计事件的方法有很多。但是,有些方法比其他方法更适合在事件驱动数据 Mesh 中使用。本章将介绍为事件驱动数据产品设计事件的最佳策略,包括如何避免在设计过程中遇到的许多陷阱。
事件类型介绍
有两种主要的事件类型,它们是所有事件设计的基础:状态事件(我们在"状态事件和事件携带的状态转移 "中首次介绍)和delta事件(我们将在本章中详细介绍)。
图 7-1显示了一个处于稳定状态的简单方波,它根据三角洲周期性地从一种状态转换到另一种状态。与这个方波类似,我们对事件进行建模时,要么捕捉状态本身,要么捕捉从一种状态过渡到另一种状态的边缘。
图 7-1. 变化过程中的状态和三角洲
系统中发生的任何情况都分为三个阶段:
-
初始状态
-
改变初始状态以产生最终状态的三角洲
-
最终状态(也是下一个变化周期的初始状态)
我们遇到的大多数事件都可以完全归类为状态或三角洲。以这种方式来看待事件,有助于区分关注点并集中设计工作:
- 国家活动
-
状态事件完整地描述了一个实体在给定时间点的状态,是在域之间交流数据产品的最佳选择。在事件驱动的 Data Mesh 中,状态事件通常是最灵活、最有用的事件类型。
- 三角洲活动
-
这些事件描述了状态之间的转换,通常只包含发生变化的信息。Delta 事件是许多事件驱动应用程序开发人员遇到的第一类事件。然而,这些事件通常并不适合事件驱动型 Data Mesh,我们很快就会讨论到这一点。
虽然混合事件可能同时具有两种事件的特征,但这种情况并不常见,因为它们可能会导致不理想的强耦合。我们将在本章稍后部分详细讨论。
让我们先来看看州级活动。
扩展状态事件和事件携带状态转移
"状态事件和事件携带状态转移 "介绍了状态事件和 ECST。作为复习,状态事件展示了实体在某一精确时刻的当前状态,就像关系数据库中的一行。ECST 允许事件流的任何消费者将其所需的数据物化、聚合和存储到自己的域边界中,并根据自己的需要加以使用。在本节中,我们将介绍一些扩展状态事件的有用选项。
状态事件可以只包含 "现在 "的状态,也可以包含 "之前/之后 "的状态(我们将在下一章的"变化数据捕捉 "中介绍这种模式)。这两种选择各有利弊,我们将依次进行探讨。首先,让我们看看这些选项对事件流压缩的影响。
定义 ECST 事件结构和内容的设计策略主要有两种:
- 当前状态
-
包含事件创建时的完整公共状态。
- 之前/之后的状态
-
包含事件发生前的完整公共状态和事件发生后的完整公共状态。
让我们逐一详细了解它们的利弊得失。
国家时事
事件只包含 实体的当前状态,需要与之前的状态事件进行比较才能确定发生了什么变化。例如,给定item_id 的inventory 事件将只包含quantity 当时库存的最新值。这种设计策略有几个主要优点:
- 精益
-
状态事件在事件流中占用的空间极小。网络流量也降至最低。
- 简单
-
事件代理会存储该实体以前的任何状态事件,因此如果需要历史状态,只需倒退并重放消费者偏移量即可。您可以根据消费者对历史数据的需求,为每个事件流设置独立的压缩策略。
- 紧凑型
-
您可以让数据流中的事件数量与域的密钥空间成比例。 ...
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