一种分布式算法,以共享资源分配给一个节点出去的许多(A distributed algorithm

2019-10-17 05:51发布

我尝试实现多播通信分配一些资源。 我使用的JGroups对于这一点,所以我有可靠组播和FIFO排序。 通过这样做,我想知道,与分布式溶液,这意味着不充当协调器的主节点。

每个节点都能够开始进行分发,所以有可能是两个或多个节点开始在同一时间上的分布。 当一个节点接收到分发消息会回答这个问题。 有一个答案的消息,并从启动消息之间没有差异。 其中只包含了资源名称(例如resourceA),如果该节点是能够处理它的信息。 当member1中开始分布它会发出这样的消息:

Member1, resourceA, OK

Member2拥有该资源没有空间和发送应答消息,如:

Member2, resourceA, NOT_OK

在这种情况下,它是很容易的,因为现在的member1知道,他可以采取resourceA。 当多个节点都能够处理资源的其他属性将决定谁占有资源(例如,具有最高ID的成员)。

我的问题是:如何TA处理它当两个或多个节点同时开始关于同一主题(resourceA)的分配?

是否有人看到了一些问题的话是这样的:member1中和Member2开始在同一时间上的分布。 在这一点上双方期待彼此的响应。 因为事实有在响应消息或在启动的消息没有差异的两所思所想,他们刚刚收到的消息是应答。 这样的member1发送起动消息发送到多播组和Member2发送一个起动消息到mutlicast的基团(从member1中接收到该消息之前)。 现在的member1正在接收起动消息从Member2,认为这是响应。

通过每一个节点发送每个主题只有一个消息(作为首发或响应)保证我会说,没有问题的话,即使有两个以上节点的这种方式。

Answer 1:

从你的描述,得出以下结论可以得出:

  • 所有成员都假定从开始运行,一旦该系统运行没有新成员加入,并没有成员将予以排除
  • 所有成员都意识到成员的系统总数的

如果这些结论之一是不正确的(或两者),然后我看不出你的算法是如何工作的,因为没有办法知道,当所有成员都回答了首发的消息,并得出结论,其成员具有最高的ID。

如果这两个结论是正确的,那么我看不出有问题,该算法的功能和你的方法似乎工作。 然而,所得到的系统将是容易出错对于一个失败或不响应的部件。 如果一个成员不给首发消息作出响应,那么你可以结束了它不可能决定谁走资源的情况,因为它可能是也可能不是非响应部件。

不幸的是,它很可能是其中一个成员不会在某个时刻作出回应-虽然你没有提供有关正常运行时间要求的任何信息。 为了避免算法仅仅因为一个成员没有响应的全面崩溃,你将不得不通过增加超时来防范设计到算法,例如从“已知的成员名单”中删除成员,如果它不响应及时。

但即使是这样的内置容错能力,你应该意识到,如果没有某种协调主的完全分布式的解决方案,按照定义,有难以应付的情况。 例如,在分布式环境中,网络问题可能会导致一种情况:网络的一半看不到的另一半。 由于没有协调主人作出任何最终结论,网络的两个部分认为“他们知道的世界”,并会继续做自己的事情。 为了使关于如何解决的决定,你必须对你的要求更加明确,并给出可能的故障情况下更好的画面......



文章来源: A distributed algorithm to assign a shared resource to one node out of many