我必须编写一个分布式系统,并在四个不同节点上运行四个进程。分布式系统应该按照以下方式工作:随机数生成器在每个进程中生成一个随机数。目标是通过消息在进程之间传递来平衡所有进程中的这些值。这样的过程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.预先感谢。扎基。为所有进程均匀分配值的算法
回答
您所描述的问题被称为分布式聚合。有许多解决方案适用于网络上的不同假设(连接了哪些节点?可能会丢失信息?),计算函数(平均值?和?)等等。您可以在http://arxiv.org/abs/1110.0725找到一个很好的概述,并提供可以使用的算法。
对于我所知道的没有一个具体的配方或者只能很好地定义模式来实现这样的分布式系统(同样如果有材料提供参数的指导,请参阅问题末尾的链接)。 这里涉及到各种选择,将形成最终的系统,其可扩展性,如何将响应,如何将稳固等。
您将问题标记为语言不可知的。我相信,好的概念不仅仅是技术,而是最终必须做出选择,而像这样的系统太复杂,不能用你不熟悉的语言来构建。
我会用C#构建它,因为它是我的主要开发语言,所以我的技术面向agile development。
- 首先,我会尽力绘制一个宏观建筑设计,突出参与演员和他们的责任(但不打算过多的细节)。
- 然后,我会尝试编写第一个简单原型,涉及两个节点。
- 当原型工程时,我会尝试找到薄弱点并让它与四个节点一起工作。
- 如果有问题,请重复上一点直到它满足要求。
进一步细化,你甚至可以使用原始插座来编译它;但为了保持简单建议你发现在系统上HTTP protocol(例如使用.NET BCL HttpListener和HttpClient组件的基础上)进行通信:
- 一组预定义消息
GET
可以执行对等服务器之间的同步。 POST
消息可用于在随机数上交换数据。
关于数字世代,它打开了一个全新的世界。我会依赖一个外部服务,如ANU Quantum Random Server(如果您可以计算一个活动的Internet连接)。我知道你说过你有一个算法来实现,我提供这个作为替代(我不知道这部分是否可以改变)。
至于最少的事情,我建议你阅读this article也this约对等网络如果您将使用.NET框架。
谢谢你的评论周杰伦。然而,我正在寻找的是算法,以促进均匀分布,如上所述。无论如何我不担心执行(或随机数生成)。 – Zaki 2015-01-02 11:30:57
- 1. 将项目均匀分配到3列的算法
- 2. 按天分配行均匀
- 3. 算法均匀分配“奖品”/无方差彩票
- 4. 编程算法:如何均匀分布列间的类别
- 5. pyspark在所有执行者之间均匀分配负载
- 6. Hadoop:如何将任务均匀分配给所有节点
- 7. 将非均匀分布转化为均匀分布
- 8. 均衡分配算法
- 9. 在水平线上均匀分配div
- 10. PRNG均匀分布
- 11. 几乎均匀分布的数据的高效聚类算法
- 12. 将矩形均匀分布在另一个矩形内所需的算法
- 13. 均匀分布比特但密度不断增加的算法
- 14. 算法矩阵中元素的均匀分布
- 15. 一个形状上的均匀分布算法
- 16. 算法:如何均匀分布不同的彩球?
- 17. 倍增一个numpy的阵列和均匀地分配值
- 18. 通过它的值将数组拆分为两个均匀值
- 19. 功能/算法以均匀地重新分配数据处理介乎
- 20. 根据字段值均匀分配工作
- 21. 从非均匀数据创建均匀分布的示例
- 22. Python pandas在所有重复的ID中均匀地分割行值
- 23. AFHTTPRequestOperation进度不均匀
- 24. 均匀分布[0,1)转换为{-1,1}
- 25. 使用np.piecewise为均匀分布
- 26. 所有的OpenID连接提供程序是否均匀实施?
- 27. CFUUIDCreate是否均匀分布在所有位中?
- 28. 具有非均匀分布的随机值
- 29. Spark没有将负载均匀分配到任务
- 30. 随机均匀分布
谢谢你,我发现调查报告中描述的戒指方法,你提供了一个链接,为我工作。 – Zaki 2015-01-02 13:28:54