Java 将共享资源分配给多个节点中的一个节点的分布式算法
我尝试实现一个多播通信来分配一些资源。我正在使用它,所以我有可靠的多播和FIFO排序。通过这样做,我想认识到,对于分布式解决方案,这意味着没有充当协调器的主节点 每个节点都可以启动分发,因此可能有两个或多个节点同时启动分发。当节点收到分发消息时,它将回答此问题。回答信息和发起者的信息之间没有区别。它只包含有关资源名称(例如resourceA)以及该节点是否能够处理它的信息。 当Member1启动分发时,它将发送如下消息:Java 将共享资源分配给多个节点中的一个节点的分布式算法,java,networking,network-programming,distributed-computing,multicast,Java,Networking,Network Programming,Distributed Computing,Multicast,我尝试实现一个多播通信来分配一些资源。我正在使用它,所以我有可靠的多播和FIFO排序。通过这样做,我想认识到,对于分布式解决方案,这意味着没有充当协调器的主节点 每个节点都可以启动分发,因此可能有两个或多个节点同时启动分发。当节点收到分发消息时,它将回答此问题。回答信息和发起者的信息之间没有区别。它只包含有关资源名称(例如resourceA)以及该节点是否能够处理它的信息。 当Member1启动分发时,它将发送如下消息: Member1, resourceA, OK Member2没有用于该资
Member1, resourceA, OK
Member2没有用于该资源的空间,并发送一条应答消息,如:
Member2, resourceA, NOT_OK
在这种情况下很容易,因为现在Member1知道他可以使用resourceA。当多个节点能够处理资源时,其他属性将决定谁获取资源(例如ID最高的成员)
我的问题是:当两个或多个节点同时启动关于同一主题(resourceA)的分发时,ta如何处理它
有人认为这样做有问题吗:
Member1和Member2正在同时启动分发。此时,双方都在期待对方的回应。因为响应消息和起始消息没有区别,所以他们都认为刚刚收到的消息是应答者。因此,Member1向多播组发送起始消息,Member2向mutlicast组发送起始消息(在从Member1接收消息之前)。现在Member1从Member2接收到starter消息,并认为这就是响应
通过保证每个节点每个主题只发送一条消息(作为起始点或带有响应),我想说,即使有两个以上的节点,这样做也没有问题。根据您的描述,可以得出以下结论:
- 假设所有成员从一开始就在运行,系统运行后不会添加任何新成员,也不会删除任何成员
- 所有成员都知道系统中的成员总数
但是,即使有了这种内置的容错功能,您也应该意识到,根据定义,没有某种协调主机的完全分布式解决方案将遇到难以处理的情况。例如,在分布式环境中,网络问题可能导致网络的一半看不到另一半的情况。由于没有协调大师可以得出任何最终结论,网络的两个部分都认为“他们了解世界”,并将继续做自己的事情。为了决定如何解决此问题,您必须更清楚地了解您的需求,并更好地了解可能的故障情况……从您的描述中,可以得出以下结论:
- 假设所有成员从一开始就在运行,系统运行后不会添加任何新成员,也不会删除任何成员
- 所有成员都知道系统中的成员总数