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