distributed - 同步分布式系统中的操作

标签 distributed distributed-computing apache-zookeeper distributed-system

可以使用哪些技术/工具来实现满足这些要求的分布式系统:

  • 在给定时间,系统可以处于 3 种状态之一:同步、计算或空闲。

  • 系统中的每个节点可以接收两个指令:sync()和 计算()。

  • sync()指令将立即发送到所有节点。收到sync()指令后,如果系统处于IDLE状态,每个节点应将其本地缓存与数据库同步,并且系统状态更改为SYNCING。当所有节点完成同步后,系统状态将更改为 IDLE。如果发生节点故障,一旦所有事件节点完成同步,系统状态仍应更改为 IDLE。

  • 收到compute()指令后,如果系统未同步,节点将运行一些计算,并且系统状态应更改为COMPUTING。当计算完成时,或者在节点发生故障的情况下,如果没有其他计算正在进行,状态应更改为 IDLE。

最佳答案

Zookeeper 将是同步操作的一个不错的选择。假设以下方法。有一个/sync znode,每次需要触发同步时都会使用当前时间戳或一些新数据进行更新。基本上,主节点更新/sync 节点的值以触发工作节点上的操作。

工作节点在/sync znode 上监视数据更改。因此,每次主节点更新/同步时,工作人员都会收到通知并更新其本地缓存。

此外,工作节点在/workers znode 下注册自己(通过在/workers 下创建带有一些 uuid 的临时 znode)。这些节点将是临时的,因此如果工作节点/进程死亡,相应的临时节点就会消失。工作人员在/workers znode 下放置了子进程的监视,因此当新工作人员出现或任何现有工作人员消失时,他们会收到通知。此外,他们还监视/workers 下所有临时节点上的数据更改。

现在一切是如何运作的:

Master 使用当前时间戳更新/sync 以触发工作节点上的同步。 所有工作人员都会收到有关/sync 节点中的数据更改的通知。他们获取/sync 节点的修改数据。 工作人员从数据库同步他们的缓存。 工作人员在/workers 节点下更新其相应的 znode。例如,ID为4dc1efd2-01c8-11e5-bee1-08002791d032的worker更新znode/workers/4dc1efd2-01c8-11e5-bee1-08002791d032。 放置在工作人员特定 znode 上的数据是“synced_at_timestamp”(例如,synced_at_1432451046000) 每当任何工作人员更新其 znode 时,所有其他工作人员都会收到通知。 所有workers都会不断检查/workers下所有znode上的当前数据。 当/workers 下的所有worker znode 具有相同的数据synced_at_timestamp 时,它们会切换到IDLE 状态。

可能还有许多其他可能的方法。如果你熟悉memcache、redis、hazelcast等,你也可以使用它们来实现这样的系统。

关于distributed - 同步分布式系统中的操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30407788/

相关文章:

java - 如何在kafka 0.9.0中使用多线程消费者?

node.js - 无限循环 Kafka Consumer

apache-zookeeper - 在 Fabric8 上部署 ZooKeeper 时出错

amazon-ec2 - 无法从亚马逊 aws 中删除安全组

java - 创建大量的多个输出

python - Tensorflow 变量未使用图间复制进行初始化

algorithm - 将工作分配给节点而不对生产者不公平的公平算法

distributed - 分布式快照算法(如 Chandy Lamport)是如何在现实世界的分布式系统中实现的?

python - 使用 Queue() 在 python 分布式应用程序中共享文件

architecture - 水平和垂直分布 - 它们命名的原因是什么?