【问题标题】:algorithm for even distribution of values to all processes将值均匀分布到所有进程的算法
【发布时间】:2013-02-16 20:10:41
【问题描述】:

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

【问题讨论】:

    标签: algorithm language-agnostic distributed


    【解决方案1】:

    据我所知,没有特定的 recipe 或只有很好定义的模式来实现这种分布式系统(如果有材料提供论点指导,请参阅问题末尾的链接)。 这里涉及各种选择,这些选择将塑造最终系统、它的可扩展性、如何响应、如何稳定等等。

    您将该问题标记为与语言无关。我相信好的概念比技术更重要,但最终必须做出选择,这样的系统太复杂了,无法用你不熟悉的语言构建。

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

    1. 首先,我将尝试绘制一个宏观架构设计,突出涉及的参与者及其责任(但不涉及太多细节)。
    2. 然后我将尝试编写第一个涉及两个节点的简单原型
    3. 当原型工作时,我会尝试找到弱点,让它在四个节点上工作。
    4. 如果有问题,请迭代最后一点,直到它满足要求

    更详细地说,您甚至可以使用 原始套接字 构建它;但为简单起见,我建议您在 HTTP protocol 上找到您的系统(例如,使用 .NET BCL HttpListenerHttpClient 组件作为基础)进行通信:

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

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

    至少,如果您将使用 .NET 框架,我建议您阅读 this articlethis 关于 peer-to-peer

    【讨论】:

    • 感谢杰伊的评论。但是,我正在寻找的是促进上述均匀分布的算法。无论如何,我不担心实施(或随机数生成)。
    【解决方案2】:

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

    【讨论】:

    • 谢谢,我找到了调查报告中描述的环形方法,您提供了一个为我工作的链接。
    猜你喜欢
    • 1970-01-01
    • 2020-01-15
    • 1970-01-01
    • 2012-05-04
    • 2011-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多