有一个数据库作为数据存储和 y (>5) 台其他机器。有一台机器 A 每 x 分钟有一次数据(更新)。y 台机器每 x 分钟从机器 A 获取数据,更新数据库中的数据。每台机器都这样做是为了一些容错。有没有一种干净的方法来模拟容错工作?
任何指针表示赞赏。
有一个数据库作为数据存储和 y (>5) 台其他机器。有一台机器 A 每 x 分钟有一次数据(更新)。y 台机器每 x 分钟从机器 A 获取数据,更新数据库中的数据。每台机器都这样做是为了一些容错。有没有一种干净的方法来模拟容错工作?
任何指针表示赞赏。
这是一个范围非常大的问题。数据结构如何?“数据库加载器”如何从“数据生产”机器获取数据?如果更新失败会发生什么——数据是丢失还是必须不惜一切代价保留?
我将做一些假设并提出解决方案: 1. 数据可以分区。2. 您可以访问中央持久缓冲区。例如 MSMQ 或 WebSphere MQ。
生成数据的机器将块放入中央队列中。每个块都由一组记录 ID 和相关属性的新值组成)——您决定粒度。“db loader”监听队列并且每个出队一个块(争用只在出队阶段并且非常优化)并更新它自己的一组 id。这种方式插入工作在机器之间分配,每台机器处理自己的部分,如果一个崩溃,那么其他机器只会更努力地工作。
如果更新失败,您可以将块返回到队列并稍后重试(事务读取)。