我必须编写一个分布式系统,其中四个进程在四个不同的节点上运行。分布式系统应该以以下方式工作:随机数生成器在每个进程中生成一个随机数。目标是通过进程之间的消息传递来平衡所有进程中的这些值。这样,进程 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。提前致谢。扎基。A 必须向 B 发送一条消息,告诉 B 减少 15,然后向 C 发送一条消息并告诉它增加 15,或者换句话说,它告诉 B 将您的计数的 15 发送给 C。提前致谢。扎基。A 必须向 B 发送一条消息,告诉 B 减少 15,然后向 C 发送一条消息并告诉它增加 15,或者换句话说,它告诉 B 将您的计数的 15 发送给 C。提前致谢。扎基。
问问题
600 次
2 回答
1
据我所知,没有特定的配方或只有很好的定义模式来实现这种分布式系统(如果有材料提供论点指导,请参阅问题末尾的链接)。这里涉及各种选择,这些选择将塑造最终系统、它的可扩展性、如何响应、如何稳固等等。
您将问题标记为与语言无关。我相信好的概念比技术更重要,但最终必须做出选择,这样的系统太复杂,无法用你不熟悉的语言构建。
我会用 C# 构建它,因为它是我的主要开发语言,继续使用面向敏捷开发的技术。
- 首先,我将尝试勾勒出宏观架构设计,突出参与者及其责任(但不涉及太多细节)。
- 然后我将尝试编写第一个涉及两个节点的简单原型。
- 当原型工作时,我会尝试找到弱点并让它与四个节点一起工作。
- 如果有问题,请迭代最后一点,直到满足要求。
更详细地说,您甚至可以使用原始套接字来构建它;但为了简单起见,我建议您在HTTP 协议上找到您的系统(例如,使用 .NET BCL HttpListener和HttpClient组件作为基础)进行通信:
- 一组预定义的
GET
消息可以在对等服务器之间执行同步。 POST
message 可用于交换关于随机数的数据。
关于数字的生成,它打开了一个全新的世界。我会依赖像ANU Quantum Random Server这样的外部服务(如果你可以计算一个活跃的 Internet 连接)。我知道你说你有一个算法要实现,我提供了这个作为替代方案(我不知道这部分是否可以改变)。
于 2013-02-17T08:09:37.487 回答
0
您描述的问题称为分布式聚合。有许多解决方案适用于网络上的不同假设(连接了哪些节点?消息会丢失吗?)、计算函数(平均值?求和?)等等。可以在http://arxiv.org/abs/1110.0725上找到一个很好的概述,并参考您可以使用的算法。
于 2013-02-17T22:38:10.983 回答