
将事件驱动架构与现有系统集成
|
53
的
1
∶
1
映射,并使用专用的下游事件处理器对流进行非范式化。我将这个过程称为
事件
化
(
eventification
)
,因为它将高度范式化的关系型数据转换为了易于消费的单个事件。它
模拟了数据存储客户端应该做的事情,但是在数据存储外部进行的,从而减轻了负载。图
4-7
展示了一个基于用户、位置和雇主信息对用户信息进行非范式化的例子。
用户发件箱
私有命名空间 公共命名空间
用户流
原始用户流
原始位置流
原始雇主流
事件代理 事件代理
用户事件化
发件箱
消费者
流生产者
位置发件箱
雇主发件箱
数据存储
图 4-7:使用私有的用户、位置和雇主事件流对公共的用户事件进行非范式化
在这个例子中,用户有一个外键指向他们所居住的国家、州
/
省份和城市,同时还有一个
外键指向他们当前的雇主。用户事件的下游消费者想要每个用户的所有信息全都在一个事
件中是很合理的,而不是被迫将每个事件流都物化为状态存储,然后用关系型工具进行非
范式化。从发件箱表里获取原始的、范式化的事件到它们自己的事件流中,但将这些流保
持在与组织其他部分无关的私有命名空间内(参见
14.3
节)
,以保护内部数据模型。
用户事件化的过程是对用户实体进行非范式化并去掉所有内部数据模型结构的过程。此过
程需要维护用户、位置和雇主的物化表,以便任何更新都能重新执行联结逻辑并为所有受
影响的用户发出更新事件。最终的事件会被发送到组织的公共命名空间以供所有下游消费
者消费。
在向事件驱动型微服务发展的组织中,内部数据模型与外部消费者的隔离程度往往会成为
争论的焦点。隔离内部数据模型对于确保服务的解耦和独立性,以及确保面对新的业务需 ...