1.分布式基本理论
- cap理论:
consistency: 一致性
availablity:可用性
partition tolerance: 分区容错
分布式服务在系统出现一定故障的时候,还可以对外提供服务。基本所有分布式系统都可以满足此要求。c和a之间存在矛盾,如果追求一致性就需要抛弃可用性,如果追求可用性,数据一致性就不会被满足。
- base理论:
basic available:基本可用
softstatue: 软状态
eventually: 最终一致性
系统可以处于一致性中间状态,但可用,系统可以达到最终一致性状态,其实现方法可以使用基于消息中间件+定时任务补发消息来实现。
2.分布式一致性算法
在cap理论中,如果保证数据强一致性,就需要所有副本同步主节点的所有数据,在数据同步过程中,对外不可用,在所有分布式一致性算法中,解决此的思想是大多数副本同步(一般都是过半)主节点的数据后,主节点就可以使用对客户端进行相应。
- basic paxos算法
basic paxos算法有prepare、accept和learn三个阶段,以及提案者,决策者和学习者。
prepare阶段:提案者发出请求到过半的决策者,请求中携带生成的全局唯一递增id,该id可以是时间戳+机器id。
accept阶段:决策者接收到提案者的id信息后,通过比较保存的id和请求的id大小,如果请求的id大于保存的id,就会把保存中的最大的id及对应的提案值作为响应发送给提案者。而且之后决策者会拒绝所有id小于当前的id的提案请求,只接受大于当前id的请求。当提案者接收到决策者过半的响应后,就会在所有响应中获取最大id的提案值作为提案值,发送给过半决策者,此过半决策者可以与提案决策者不同,决策者收到请求后,就会提交请求。
learn阶段:所有learner同步决策者的数据。具体方式可以是每一个learner去请求accept,也可以所有learner选择一个主learner,主learner同步accept的数据,其他learner同步主learner。
上述paxos算法是basic paxos算法,如果有多个提案者,就会导致活锁问题。为了解决此问题,提出只有一个主提案者,在多个提案者中,先选择一个主提案者,所有的提案都由该主提案者进行提交。
- Raft算法
leader选举
日志同步
zab算法
- 启动选举leader
每台机器发送(myid,zxid)到别的机器,别的机器检查是否是在选举过程中,然后比较zxid,投票给zxid大的,如果zxid相同就投票给myid大的,等到有机器接收到一半以上的投票后即成为leader
- 启动选举leader
- 运行中选举
逻辑大致同启动时选举leader,只不过换成sid和zxid,过半投票机制。然后再同步数据。
- kafka 选举
isr列表
高水位HW
过半机制
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。