事件存储、CQRS 与基础设施构建:技术深度解析
1. 事件存储(Event Store)
事件存储系统相对简单,可以使用多种数据存储系统来实现,如文件系统中的简单文件、亚马逊简单存储服务(S3)存储桶,或者任何能可靠存储数据条目序列的数据库存储。事件存储的接口需支持三个基本功能:
- 存储新事件并分配正确的顺序,以便按保存顺序检索事件。
- 通知正在构建投影的事件订阅者有关他们关注的新事件,并支持竞争消费者模式。
- 针对特定事件类型,获取事件 X 之后的 N 个事件,用于协调流程,例如在投影丢失、受损或存疑时重新计算。
本质上,事件存储的基本接口仅由两个函数组成:
save(x)
getNAfterX()
此外,还有一种强大的通知系统,允许消费者订阅事件。“强大”意味着符合竞争消费者模式,该模式很重要,因为基于事件构建投影的任何系统可能希望有多个客户端实例“监听”事件,以实现冗余和可扩展性。为避免意外的事件重复导致数据损坏,通知器必须合理确保仅向单个监听器实例进行一次交付。可采用以下两种方法:
1. 使用已为其消费者提供此类保证的消息队列实现,例如 Apache Kafka。
2. 允许消费者将 HTTP 端点注册为回调。为每个新事件调用回调端点,并让消费者端的负载均衡器处理工作分配。
这两种方法各有优劣,一种是基于推送的,另一种是基于拉取的,具体选择取决于实际需求。
同时,有一个示例实现可在 GitHub 上查看、试用或贡献代码。
超级会员免费看
订阅专栏 解锁全文
920

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



