【问题标题】:.Net peer-to-peer communication between a cluster of processes.Net 进程集群之间的点对点通信
【发布时间】:2011-03-03 04:16:09
【问题描述】:

我想让一组进程能够相互通信。进程可以来来去去,没有明显的“主”或“服务器”进程,因此这些进程确实需要能够在完全对等的基础上进行通信。

我了解进程间通信和不同的通信方法(TCP、命名管道等),但我并不真正了解点对点集群的工作原理,尤其是每个客户端如何有效地确定其他客户端的列表客户。

有没有办法在 .Net 中使用现有技术实现这一目标? (例如 WPF)

如果做不到这一点,我应该在哪里查找有关对等通信协议的信息?

【问题讨论】:

    标签: .net ipc p2p cluster-computing


    【解决方案1】:

    研究用于分布式点对点协调的 BitTorrent 协议可能是一个不错的起点:http://www.bittorrent.org/beps/bep_0003.html

    要调查的其他系统可能是 Tor 分布式匿名网络和 Windows Internet 名称服务 (WINS)。这些都在某种程度上涉及对等发现和协调。

    设置 P2P 集群最棘手的部分可能是找出一种可靠的方法让新对等点发现对等点集群。使用预定义的 TCP 端口号是一个开始,但当该端口已被其他进程使用时,它就会崩溃。您可以使用 UDP 广播来确定是否有任何对等方存在,但这不会通过您的第一个路由器跃点,因为路由器通常会过滤广播以防止广播传播风暴。您可以使用集中式跟踪器/调度程序,但这会成为整个对等集群的单点故障。

    网络拓扑也会影响您的发现方法。如果所有对等点都在同一个网段内,或者在同一个防火墙后面,那么您几乎可以做任何事情。但是,如果某些对等点位于防火墙后面,则您无法通过防火墙启动与它们的连接 - 它们必须启动与您的连接,或使用 UPNP 在防火墙中打开传入端口。

    发现是 BitTorrent 系统中最薄弱的部分。除非用户知道要使用哪个 torrent 目录或跟踪器 URL,否则 torrent 客户端是无用的。一旦你在对等集群中找到一个节点,任何一个节点,找到集群的其余成员就相对简单了。

    如果您的进程集合都驻留在同一台物理机器上,您可以使用消息队列服务之类的东西来充当瞬态进程之间的第三方仲裁者。否则,您可能正在考虑让对等组中的某个进程担任领导职位,以回答发现请求并将对等列表分发给其他人。当领导流程需要离开时,它可以将领导移交给其他对等点之一,或者对等点可以使用分布式对等列表故障转移到新的领导流程。这基本上就是 Windows 名称服务 (WINS) 为 NetBios 名称发现所做的工作。

    【讨论】:

    • 当您知道所有对等点都在本地机器上时,有什么方法可以简化客户端发现问题?
    • 是的,知道所有对等点都在同一台机器上大大减少了问题集,因为您不必处理路由器和防火墙,您可以利用操作系统全局名称服务t 在 TCP/IP 中可用。命名管道是点对点的——它们不能有多个监听器。
    • 您最好的选择可能是使用命名共享内存 + 命名互斥体,并使用您选择的唯一预定义名称,所有对等方都知道。使用它来发现集群成员。一个新的对等点通过获取命名互斥体、从共享内存区域读取连接信息列表、将自己的连接信息写入列表末尾并释放互斥体来加入集群。新的对等点现在具有集群成员的目录。某些条目可能已过时,因此预计会出现连接失败。定期更新互斥锁下的共享内存以清除过时的条目。
    猜你喜欢
    • 2019-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多