首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >同步分布式系统中的操作

同步分布式系统中的操作
EN

Stack Overflow用户
提问于 2015-05-23 00:50:39
回答 2查看 480关注 0票数 2

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

  • 在给定的时间,系统可以处于三种状态之一:同步、计算或空闲。
  • 系统中的每个节点都可以接收两个指令: sync()和compute()。
  • 同步()指令将同时发送到所有节点。在获得sync()指令时,如果系统处于空闲状态,则每个节点都应该将其本地缓存与数据库同步,并且系统状态被更改为同步。当所有节点完成同步时,系统状态将更改为空闲。如果节点发生故障,系统状态应在所有活动节点完成同步后立即更改为空闲状态。
  • 获得计算()指令后,如果系统不同步,节点将运行某些计算,系统状态应改为计算。当计算完成时,或者在节点失败的情况下,如果没有其他计算正在进行,则状态应该更改为空闲。
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-05-24 03:59:08

动物园管理员将是一个很好的选择,同步行动。采用以下方法。有一个/sync znode,它是用当前时间戳更新的,或者每次同步需要触发一些新数据。基本上,主节点更新/sync节点的值以触发工作节点上的操作。

工作节点监视/sync znode的数据更改。因此,每次主节点更新/sync时,工作人员都会得到通知,并更新他们的本地缓存。

此外,工作节点在/workers znode下注册自己(通过在/workers下使用一些uuid创建临时znode )。这些节点将是短暂的,因此如果工作节点/进程死亡,相应的临时节点就会消失。工人们在/workers znode下为孩子们设置了一个手表,所以当新的工人出现或任何现有的工人消失时,他们会得到通知。此外,他们还在/workers下的所有临时节点上监视数据的变化。

现在每件事都是如何运作的:

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

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

票数 2
EN

Stack Overflow用户

发布于 2015-05-23 00:55:35

这可以通过RabbitMQ来完成,并为不同的消息指定传递收据选项。sync消息应该传递给所有节点,而compute消息应该由第一个节点来确认。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30407788

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档