事件存储、CQRS 与基础设施构建:技术解析与应用策略
1. 事件存储(Event Store)
事件存储是相对简单的系统,可以使用多种数据存储系统来实现,如文件系统中的简单文件、亚马逊简单存储服务(S3)存储桶,或任何能可靠存储数据条目的数据库。其接口需支持以下三个基本功能:
- 存储新事件并分配正确的顺序,以便按保存顺序检索事件。
- 通知正在构建投影的事件订阅者关注的新事件,并支持竞争消费者模式。
- 针对特定事件类型,获取事件 X 之后的 N 个事件,用于协调流程,例如在投影丢失、受损或存疑时进行重新计算。
本质上,事件存储的基本接口由两个函数组成:
save(x)
getNAfterX()
此外,还需要一个强大的通知系统,允许消费者订阅事件。“强大”意味着符合竞争消费者模式,避免事件重复导致数据损坏。可采用以下两种方法:
1. 使用已为消费者提供此类保证的消息队列实现,如 Apache Kafka。
2. 允许消费者将 HTTP 端点注册为回调。为每个新事件调用回调端点,并让消费者端的负载均衡器处理工作分配。
以下是一个简单的 mermaid 流程图,展示事件存储的基本流程:
graph LR
A[新事件] --> B[save(x)]
B --> C[存储事件]
C --> D{是否有订阅者}
D -- 是 --> E[通知订阅者]
D -- 否 -
超级会员免费看
订阅专栏 解锁全文
34

被折叠的 条评论
为什么被折叠?



