我正在尝试进行领导人选举。这些天我正在考虑使用键值存储来实现这一点,但我不确定这个想法是否可靠,因为可扩展性和一致性问题。真正的部署将有数千个节点,选举应该在没有任何中央权威或服务的情况下进行,如zookeeper。
现在,我的问题是:
我可以使用键值存储(最好像Cia A可调,如riak)来执行领导者选举吗?利用KV商店进行领导人选举有哪些可能的利弊?
谢谢!
编辑: 我不再对欺负算法方法感兴趣了。
答案 0 :(得分:3)
不保证一致性的键值存储(如Riak)是一种不好的方法,因为你可以得到两个节点,他们都认为(有理由!)他们是新的领导者。保证一致性的键值存储不能保证在出现问题时的可用性,并且当您遇到可能导致节点丢失的问题时,可用性将会受到严重影响。
我建议对数千个节点执行此操作的方式是从具有数千个节点的直接对等安排转变为分层排列。所以有一个主人和几个小组。每个传入节点都分配给一个组,该组将其分配给一个子组,该子组将其分配给子子组,直到您发现自己处于足够小的对等组中。然后大师选举只在小组的领导者之间进行,并且胜利者从小组的领导者中晋升。如果一个团体的领导者离开(可能是因为晋升),其子组领导人之间的大选将选出新的领导者。等等。
如果对等组太大,比如26,那么它的主人随机将它分成5个较小的组,每组5个对等,随机分配的领导者。同样地,如果一个同伴小组变得太小,比如3,那么它可以请求其领导者与其他人合并。如果领导者注意到它的关注者太少,比如3,那么它可以告诉其中一个人将其子组推广到完整的组,并加入其中一个组。您可以使用这些数字,具体取决于您需要多少冗余。
这将导致更多的选举,但你将大大减少每次选举的开销。这应该是一个非常重要的整体胜利。首先,随机混淆的节点不会立即开始轮询数千个对等体,从而在网络流量中产生巨大的峰值。