2013-02-16 62 views
0

我必须编写一个分布式系统,并在四个不同节点上运行四个进程。分布式系统应该按照以下方式工作:随机数生成器在每个进程中生成一个随机数。目标是通过消息在进程之间传递来平衡所有进程中的这些值。这样的过程A是服务器从所有过程中获取数字,然后命令他们将其部分数字发送到一个或多个其他过程,以平衡过程所持有的所有数字。例如,A的计数是30,B的计数是65,C的计数是35,D的计数是70.计算30 + 65 + 35 + 70 = 200除以4 = 50.现在流程A知道谁少了比平均水平和谁的平均水平更高。现在的问题是,A如何决定谁向谁发送什么号码?平衡所有流程的价值。请注意A不能直接指示进程减少或增加它的计数,例如它不能发送消息给B,并告诉它递减15,然后向C发送另一个消息并告诉它增加15.必须向B发送消息,告诉B递减15,然后发送一个消息给B给C的消息,并告诉它增加15或换句话说,它告诉B发送15你的计数C.预先感谢。扎基。为所有进程均匀分配值的算法

回答

0

您所描述的问题被称为分布式聚合。有许多解决方案适用于网络上的不同假设(连接了哪些节点?可能会丢失信息?),计算函数(平均值?和?)等等。您可以在http://arxiv.org/abs/1110.0725找到一个很好的概述,并提供可以使用的算法。

+0

谢谢你,我发现调查报告中描述的戒指方法,你提供了一个链接,为我工作。 – Zaki 2015-01-02 13:28:54

1

对于我所知道的没有一个具体的配方或者只能很好地定义模式来实现这样的分布式系统(同样如果有材料提供参数的指导,请参阅问题末尾的链接)。 这里涉及到各种选择,将形成最终的系统,其可扩展性,如何将响应,如何将稳固等。

您将问题标记为语言不可知的。我相信,好的概念不仅仅是技术,而是最终必须做出选择,而像这样的系统太复杂,不能用你不熟悉的语言来构建。

我会用C#构建它,因为它是我的主要开发语言,所以我的技术面向agile development

  1. 首先,我会尽力绘制一个宏观建筑设计,突出参与演员和他们的责任(但不打算过多的细节)。
  2. 然后,我会尝试编写第一个简单原型,涉及两个节点。
  3. 当原型工程时,我会尝试找到薄弱点并让它与四个节点一起工作。
  4. 如果有问题,请重复上一点直到它满足要求

进一步细化,你甚至可以使用原始插座来编译它;但为了保持简单建议你发现在系统上HTTP protocol(例如使用.NET BCL HttpListenerHttpClient组件的基础上)进行通信:

  1. 一组预定义消息GET可以执行对等服务器之间的同步。
  2. POST消息可用于在随机数上交换数据。

关于数字世代,它打开了一个全新的世界。我会依赖一个外部服务,如ANU Quantum Random Server(如果您可以计算一个活动的Internet连接)。我知道你说过你有一个算法来实现,我提供这个作为替代(我不知道这部分是否可以改变)。

至于最少的事情,我建议你阅读this articlethis对等网络如果您将使用.NET框架。

+0

谢谢你的评论周杰伦。然而,我正在寻找的是算法,以促进均匀分布,如上所述。无论如何我不担心执行(或随机数生成)。 – Zaki 2015-01-02 11:30:57