仅使用C的分布式系统设计

时间:2009-11-13 02:02:46

标签: c algorithm network-programming distributed

我有实现分布式节点系统(如p2p节点)的工作,每个节点(比如A,B,C和D)执行某些功能,需要相互交互以进行各种操作,例如同步操作和其他事情如15 A节点与一组5个B节点交互以进入最小负载节点的队列并获得令牌号,然后等待C将它们重定向到空闲节点D,依此类推。

我对如何进行设计感到有点迷失:

  1. 我想到的协议是封装一个操作类型的结构和其他要发送的东西。此外,这是使用确认方案完成的,所以我可以确定对方得到了消息。

  2. 我如何处理分布式互斥方面,因为我没有中央服务器。我猜每个节点都复制数据,但这听起来有点贵(更不用说愚蠢了)。

  3. 实施p2p系统时遵循的基本设计方法是什么,即如何实现程序,使其在接收时被阻止,但也可以发送进一步的更新等,同时从其他人​​那里获取信息关于整个系统的“状态”。

  4. 如何确保请求的总排序?

  5. 此外,我可能需要查看/面对的其他问题是什么。如果您能指出我在实施p2p和分布式系统方面的一些良好的在线资源,我也将不胜感激。

    谢谢!

3 个答案:

答案 0 :(得分:2)

我不会试图给出一个“完整”的答案(因为这个问题太大而且模糊不清)但是我可以指出一个有趣的难题:

  1. 您可以使用消息队列系统(例如AMQP RabbitMQ:可以使用实验性C绑定)在您的节点之间实现可靠的消息传递。

  2. 相互排斥:您可以使用Paxos等协议

答案 1 :(得分:1)

防止阻塞的秘诀是你的终点必须全部写成具有“协议”处理线程的服务器,这些线程与数据处理的线程分开。

至于线路协议,我已经迷恋于线路协议的JSON。它是人类可读的。无需长度字节就可以流式传输!它易于扩展,并且大部分不受协议版本更改的影响。

答案 2 :(得分:-1)

另一款值得一看的软件可能是KadC!

http://kadc.sourceforge.net