database - 对分布式事务使用事件溯源是个好主意吗?

标签 database architecture event-sourcing eventstoredb

我有 2 个有状态服务集群:mongo 和 elasticsearch 集群。我想让两个集群的文档保持同步。

对我来说,这看起来像是一个分布式事务问题,我决定尝试事件溯源,因为它不仅解决了这个问题,而且自然适合我的应用程序。

我决定使用 https://eventstore.org存储事件,从我的后端订阅更改,然后更新我的有状态集群。

我的后端是无状态的,最终它会扩展到多个实例,我担心每个后端实例都会从 eventstore 获取更新并更新有状态集群,因为更新可能是幂等的,所以我会每次写入都会得到 N 个相似的文档。通常如何解决这个问题?

我真的不想为每个集群创建一个单例订阅者,它监听更新,它使这个单例成为单点故障......

最佳答案

How is usually this problem solved?

使用单例编写器是一个很好的解决方案。通过这种方式,您可以确保不会重复工作,并且可以按照事件写入事件存储的顺序使用事件更新有状态集群。

I really don't want to create a singleton subscriber for each cluster, which listens for updates, it makes this singleton a single point of failure...

这可以很容易缓解,因为这个单例服务是无状态的,所以它可以很容易地重新启动,甚至可以在失败时转移到另一台主机上。如果您使用容器编排器(如 Docker Swarm 或 Kubernetes),这将非常简单。

关于database - 对分布式事务使用事件溯源是个好主意吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54223047/

相关文章:

spring-boot - org.axonframework.eventsourcing.IncompatibleAggregateException(轴突框架 : Aggregate identifier must be non-null after applying an event)

.net - 何时使用事件存储

python - 使用 R 读取和搜索非常大的 CSV 文件是否有意义?

c# - 错误 CS0012 : The type 'DbConnection' is defined in an assembly that is not referenced

javascript - 如何在 RequireJS 和 JQuery 之上构建 MVC 结构?

reactjs - 如何改进 React 应用程序的架构

mysql - 查询 MySQL 数据库以从另一个表中获取值

asp.net - 将项目开发提升到一个新的水平

silverlight - 定义可靠的 SIlverlight 4 架构

postgresql - 用于事件溯源的关系数据库模式