Replication 容错系统设计

Replication 容错系统设计,replication,state-machine,distributed-system,fault-tolerance,Replication,State Machine,Distributed System,Fault Tolerance,有一个DB作为数据存储和y(>5)台其他机器。有一台机器a每x分钟更新一次数据。y机器每x分钟从机器A获取一次数据,更新数据库中的数据。每台机器做同样的事情是为了容错。是否有一种干净的方法来模拟容错工作 欢迎使用任何指针。这是一个范围非常大的问题。数据是如何结构化的?“db加载器”如何从“数据生成”机器获取数据?如果更新失败会发生什么情况?数据是否丢失或必须不惜任何代价将其持久化 我将做出一些假设并提出解决方案: 1.数据可以进行分区。 2.您可以访问中央持久缓冲区。e、 g.MSMQ或WebS

有一个DB作为数据存储和y(>5)台其他机器。有一台机器a每x分钟更新一次数据。y机器每x分钟从机器A获取一次数据,更新数据库中的数据。每台机器做同样的事情是为了容错。是否有一种干净的方法来模拟容错工作


欢迎使用任何指针。

这是一个范围非常大的问题。数据是如何结构化的?“db加载器”如何从“数据生成”机器获取数据?如果更新失败会发生什么情况?数据是否丢失或必须不惜任何代价将其持久化

我将做出一些假设并提出解决方案: 1.数据可以进行分区。 2.您可以访问中央持久缓冲区。e、 g.MSMQ或WebSphere MQ

生成数据的机器将数据块放入中央队列中。每个数据块由一组记录ID和相关属性的新值组成),粒度由您决定。 “db加载器”侦听队列,每个都将一个块从队列中解列(争用仅在解列阶段进行,并且非常优化),并更新自己的ID集。 通过这种方式,插入工作在机器之间分配,每个机器处理自己的部分,如果一台机器崩溃,那么其他机器只会更加努力地工作


如果更新失败,您可以将区块返回队列,稍后重试(事务性读取)。

谢谢。数据生成计算机没有任何记录ID。假设它只是一个(type1-type2)对,没有重复项,数据库是sql server。来自数据生成计算机的数据无法退出队列。db加载器获取记录id,这导致数据库中可能存在重复记录db加载器从何处获取id?你为什么不能排队?注意-它不必像我描述的那样是一个持久队列。它可以是生产者内部的内存队列,由服务向加载器公开。我无法控制数据产生机器。db加载程序生成一个新id,比如guid。没问题。您可以有一个中间进程,该进程将从生产者获取数据,并将其分块以供db加载程序使用。中间进程将成为单点故障,对吗?