Database 对分布式事务使用事件源是一个好主意吗?
我有两个有状态服务集群:mongo和elasticsearch集群。我想保持两个集群的文档同步 对我来说,这看起来像是一个分布式事务问题,我决定尝试事件源,因为它不仅解决了这个问题,而且自然适合我的应用程序 我决定使用来存储事件,并从后端订阅更改,然后更新有状态集群 我的后端是无状态的,最终会扩展到多个实例,我担心每个后端实例都会从eventstore获得更新,并更新有状态集群,因为更新可能是幂等的,因此每次写入都会得到N个类似的文档。这个问题通常是如何解决的 我真的不想为每个集群创建一个单例订阅服务器,它侦听更新,这会使这个单例成为单点故障 这个问题通常是如何解决的 使用单例编写器是一个很好的解决方案。通过这种方式,您可以确保不重复工作,并按照事件写入事件存储的顺序使用事件更新有状态集群 我真的不想为每个集群创建一个单例订阅服务器,它侦听更新,这会使这个单例成为单点故障Database 对分布式事务使用事件源是一个好主意吗?,database,architecture,event-sourcing,eventstoredb,Database,Architecture,Event Sourcing,Eventstoredb,我有两个有状态服务集群:mongo和elasticsearch集群。我想保持两个集群的文档同步 对我来说,这看起来像是一个分布式事务问题,我决定尝试事件源,因为它不仅解决了这个问题,而且自然适合我的应用程序 我决定使用来存储事件,并从后端订阅更改,然后更新有状态集群 我的后端是无状态的,最终会扩展到多个实例,我担心每个后端实例都会从eventstore获得更新,并更新有状态集群,因为更新可能是幂等的,因此每次写入都会得到N个类似的文档。这个问题通常是如何解决的 我真的不想为每个集群创建一个单例订
这可以很容易地缓解,因为这个单例服务是无状态的,所以当它失败时,可以很容易地重新启动,甚至可以在另一台主机上移动它。如果您使用容器编排器(如Docker Swarm或Kubernetes),这非常简单。请不要建议我使用mongo connector(我使用6.x ES)或logstash(更新/删除不同步)。我发现的另一种方法是使用乐观并发,因此每个状态转换将执行一次。单例必须存储一些数字-“上次应用的事件号”为了容忍崩溃,如果单例是无状态的,我应该将其存储在哪里?@warchantua理想情况下,您应该将其存储在目标(您的有状态集群)上