手撸分布式选举
以下出现的非专业大白话完全是个人为了方便记忆.
1. 命中注定(ServerID)选举法
生来就已经约定了谁当leader .
在项目启动前, 给每个项目做好编号.
我的代码因为是在本机启动5个服务模拟集群环境,所以用了端口号作为编号. 谁的端口号最大.谁就是leader,其他人是follower.
过程也很简单.
1.初始化的时候没有leader.所有人都可以毛遂自荐.但是只需要发送给比自己大的人 毛遂自荐 消息即可. 等待他们回复他们是否'健在'.
2.当收到'健在'回复后, 就老老实实等待比自己大的人'登基',并等待接收'登基成功并在位'的消息.
3.如果发起毛遂自荐后,比自己大的无回复,自动登基, 并发送所有服务,自己'登基成功并在位'的消息
4.如果超过设定时间收不到'在位者'消息,开始重复步骤1.
代码初步构思思路
项目结构
- demo 模拟应用
- util 选举模式的工具包
源码地址:
2. 谁干活多(事务ID)选举法
// TODO
3. 票数过半选举法
// TODO