你怎么看?
在不了解您的需求细节的情况下,很难完全评估您的算法的有效性。总的来说,它看起来是一种有效的方法,但我认为有一些问题值得关注。
您的问题与A distributed algorithm to assign a shared resource to one node out of many 有一些相似之处。因此,我在回答这个问题时提出的一些论点也适用于这个问题。
当需要选举master时,所有slave都会发送(同时
time) 其他 4 个节点的消息请求成为主节点,但是
只有那个主人将被选举,将被所有奴隶确认
带有确认消息。
这种方法假设所有从站都知道在任何时候有多少从站存在 - 否则假定的主站在收到所有个从站的确认时永远无法得出结论。隐含地,这意味着没有奴隶可以在不破坏算法的情况下离开和加入系统。
但实际上,由于崩溃、重启、网络中断等原因,这些从站会来来去去。这种情况的机会随着从站数量的增加而增加,但这是否是个问题取决于您的要求。您的系统必须具备多大的容错能力?
顺便说一句,由于您提到有很多从站,我假设您正在使用多播或广播来发送请求消息。否则,根据 many 对您的意义,您的设置在管理所有从属服务器所在的位置时可能容易出错。
如果自己的“提升优先级”从属设备将发送确认消息
低于询问节点,或者如果询问节点具有更高
对于自己的请求,优先级超时发出拒绝消息。
与前面的评论类似:如果某个从站由于某种原因出现响应问题,则从站可能会得出错误的结论。事实上,如果一个从站宕机或出现网络问题,所有其他从站都会得出相同(很可能是错误的)结论,即无响应的从站是主站。
这个算法应该更快,因为所有的奴隶都会
并行选举master
这个答案中提出的问题几乎是以分布式方式进行主选择所固有的,并且如果不引入某种集中式决策者就很难解决。你得到一些,你失去一些......
是否存在其他优先提升大师的算法?
另一种方法是让系统中的所有从属设备不断维护有关谁是当前主设备的管理。这可以通过让每个从属设备通过某种心跳消息定期多播/广播其优先级来完成(以一些网络带宽为代价)。这样一来,每个从站都会知道其他每个从站,并且在需要选择主站的那一刻,每个从站都可以立即执行此操作。由于丢失了心跳,将检测到网络问题或其他“系统健康”问题。该算法对于从属系统加入和离开系统是灵活的。心跳频率越高,您的系统对拓扑变化的响应就越快。但是,由于网络断开,您可能仍然会遇到从站运行得出独立结论的问题。如果这是一个问题,那么您可能无法以完全并行的方式解决此问题。