在复制中提升主人

时间:2012-10-10 00:52:03

标签: replication distributed-computing database-replication distributed-system

我正在设计一个复制算法,以在众多奴隶中推广一个主人。我希望它比Paxos更快更简单。基本思路是:

  1. 为每个节点分配一个“促销优先级”,例如5个节点将有优先级:50,40,30,20和10,50最高,10最低。
  2. 当需要选举主设备时,所有从设备将同时向其他4个节点发送请求成为主设备的消息,但只会选择将由所有从设备确认并确认消息的主设备。如果自己的“促销优先级”低于询问节点,或者优先级较高的请求节点为其自己的请求发出拒绝消息,则奴隶将发送确认消息。
  3. 如果从属设备收到来自具有较高“促销优先级”的从属设备的拒绝消息,则会中止该过程。
  4. 应该没有具有相同优先级的节点。
  5. 奴隶应该收集最少数量的确认消息才能成为主人。
  6. 此算法应该更快,因为所有从站将并行选择主站,优先级将有助于加快进程。

    你怎么看?是否存在任何其他具有优先级的主促销算法?

1 个答案:

答案 0 :(得分:1)

  

你怎么看?

如果不了解您的要求的详细信息,很难完全评估算法的有效性。总的来说,它看起来是一种有效的方法,但我认为有一些问题值得关注。

您的问题与A distributed algorithm to assign a shared resource to one node out of many有一些相似之处。因此,我在回答这个问题时提出的一些论点也适用于这个问题。

  

当主人需要当选时,所有奴隶都会发送(同时   时间)其他4个节点请求成为主节点,但是   只有那个将由所有奴隶确认的主人才会当选   带有确认信息。

这种方法假设所有从属设备都知道任何时候有多少个从属设备 - 否则假设的主设备在收到所有从设备的确认后就无法得出结论。隐含地,这意味着没有奴隶可以离开并加入系统而不会破坏算法。

在实践中,这些从属来来往往,因为崩溃,重新启动,网络中断等。这种情况随着奴隶数量的增加而增加,但这是否是一个问题取决于您的要求。您的系统必须具有容错能力?

顺便说一下,既然你提到有很多奴隶,我假设你正在使用多播或广播来发送请求消息。否则,根据很多对您来说意味着什么,在管理所有从属设备所在的位置时,您的设置可能容易出错。

  

奴隶将发送确认消息,如果它自己的促销优先级'   低于询问节点,或者询问节点是否更高   优先级超时,为自己的请求发出拒绝消息。

与之前的评论相似:如果某个奴隶因任何原因出现问题,奴隶可能会得出错误的结论。事实上,如果一个从站关闭或出现网络问题,所有其他从站将得出相同(最可能是错误的)结论,即无响应的从站是主站。

  

这个算法应该更快,因为所有的奴隶都会   并行选举大师

这个答案中提出的问题几乎是以分布式方式进行主选择所固有的,并且在没有引入某种集中决策者的情况下难以解决。你获得了一些,你失去了一些......

  

是否存在具有优先级的主促销的其他算法?

另一种方法是让系统中的所有从属者不断维持关于谁是当前主人的管理。这可以通过某种心跳消息周期性地使每个从属多播/广播其优先级来完成(以某些网络带宽为代价)。结果,每个从站都会知道每个其他从站,并且在需要选择主站的那一刻,每个从站都可以立即执行该操作。网络问题或其他"系统健康"将检测到问题,因为错过了心跳。对于加入和离开系统的从站,该算法是灵活的。心跳频率越高,系统对拓扑更改的响应越快。但是,由于网络断开,您可能仍会遇到运行绘制独立结论的从站问题。如果这是一个问题,那么你可能无法以完全平行的方式解决这个问题。