Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 对分布式事务使用事件源是一个好主意吗?_Database_Architecture_Event Sourcing_Eventstoredb - Fatal编程技术网

Database 对分布式事务使用事件源是一个好主意吗?

Database 对分布式事务使用事件源是一个好主意吗?,database,architecture,event-sourcing,eventstoredb,Database,Architecture,Event Sourcing,Eventstoredb,我有两个有状态服务集群:mongo和elasticsearch集群。我想保持两个集群的文档同步 对我来说,这看起来像是一个分布式事务问题,我决定尝试事件源,因为它不仅解决了这个问题,而且自然适合我的应用程序 我决定使用来存储事件,并从后端订阅更改,然后更新有状态集群 我的后端是无状态的,最终会扩展到多个实例,我担心每个后端实例都会从eventstore获得更新,并更新有状态集群,因为更新可能是幂等的,因此每次写入都会得到N个类似的文档。这个问题通常是如何解决的 我真的不想为每个集群创建一个单例订

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

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

我决定使用来存储事件,并从后端订阅更改,然后更新有状态集群

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

我真的不想为每个集群创建一个单例订阅服务器,它侦听更新,这会使这个单例成为单点故障

这个问题通常是如何解决的

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

我真的不想为每个集群创建一个单例订阅服务器,它侦听更新,这会使这个单例成为单点故障


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

请不要建议我使用mongo connector(我使用6.x ES)或logstash(更新/删除不同步)。我发现的另一种方法是使用乐观并发,因此每个状态转换将执行一次。单例必须存储一些数字-“上次应用的事件号”为了容忍崩溃,如果单例是无状态的,我应该将其存储在哪里?@warchantua理想情况下,您应该将其存储在目标(您的有状态集群)上