《从PAXOS到ZOOKEEPER分布式一致性原理与实践》
CAP中,P是必然要满足的(否则分布式就没意义了),所以要在C和A中做选择和平衡了;
BASE是对CAP中一致性和可用性的权衡结果;
BASE核心思想是,即使无法做到强一致性,也可以用适当的方式达到最终一致性;
(ACID是强一致性;)
(最终一致性是一种特殊的弱一致性;)
(最终一致性存在5种变种:因果一致性、读己之所写、会话一致性、单调读一致性、单调写一致性;)
CAP的一致性有很多协议,如2PC、3PC、Paxos;
(绝大部分关系型数据库都是用2PC来完成分布式事务的;)
2PC的阶段一是投票阶段,表明是否要执行事务;
2PC的阶段二是事务执行或中断(回滚);(只要有一个反馈是NO,就不会执行事务;)
2PC中有协调者(一个)和参与者(多个);
2PC是一个强一致性算法;
2PC的优点:原理简单、实现方便;
2PC的缺点:同步阻塞、单点问题、脑裂(数据不一致)、太过保守;
3PC将2PC的阶段二进行了一分为二,最终形成CanCommit、PreCommit、doCommit三个阶段;
3PC的优点:与2PC相比,降低了参与者阻塞范围、出现单点故障也能继续达成一致;
3PC的缺点:当参与者接收到PreCommit消息之后,此时网络出现问题,无法阻止参与者提交事务,也会导致数据不一致;
拜占庭问题假设信道不可靠,会被篡改;实际假设不存在拜占庭问题;
(在异步系统和不可靠信道达到一致性是不可能的!)
(貌似不仅是分布式问题,也是信息安全和密码学的问题。。)
Paxos和拜占庭问题一样,也是Lamport提出的(Paxos是一个岛的名字);
Paxos论文在1990年以讲故事方式发表不被接受,在1998年重写后发表,又在2001年重写了一遍;(总共有3篇论文)
Paxos引入了‘过半’的概念,通俗点,就是‘少数服从多数’;
Paxos支持分布式节点角色之间的轮换,极大的避免了单点问题的出现,既解决了无限期等待的问题,也解决了‘脑裂’问题;
Paxos的一个工程应用是google的Chubby,一个分布式锁服务;(Chubby主要用于master选举)
(Chubby提供了分布式锁服务,而不是一致性协议的库;侵入性更小、也能便捷;)
(Chubby是强一致性;)
zk使用ZAB协议(zookeeper Atomic Broadcast);
zk是google Chubby的开源实现,由雅虎创建;
zk有leader、follower、observer三种角色;
(observer节点不参与选举;)
(leader提供读写服务,follower、observer只能提供读服务;)
zab协议包括消息广播和奔溃恢复;
zab对事务编号ZXID进行如下设计:低32位是一个递增的计数器(每个事务会加1),高32位是leader周期的epoch(每选举一个leader加1);
zab三个步骤或阶段:发现、同步、广播;
(正常情况一直在阶段三;)
(若leader奔溃,需要重新选举,则会进入阶段一;)
zab和paxos区别:
zab在paxos之上额外加了同步阶段;
https://en.wikipedia.org/wiki/Paxos_(computer_science)
满足ACID的事务的为钢性事务,满足BASE理论的为柔性事务?
柔性事务分为四种:两阶段型、补偿型、异步确保型、最大努力通知型;
TCC属于补偿型柔性事务,本质也是一个两阶段型事务,这与JTA是极为相似的,但是与JTA的不同点是,JTA属于资源层事务,而TCC是服务层事务;
https://my.oschina.net/fileoptions/blog/899991?utm_source=tool.lu
TCC是指try、confirm、cancel;
Paxos、ZAB、TCC哪个好?
TCC是专门的事务机制,Paxos、ZAB只是一致性协议?
(当然它们都满足BASE理论)
分布式事务一般使用2PC、3PC解决,而不是Paxos、ZAB(当然2PC、3PC都有问题);
TCC就是基于2PC的;
es内部自己实现了和zk类似的主节点选举和发现机制?
(es的zen和zk的zab类似?)
(es选举采用bully即霸道算法?发现采用zen?注意霸道算法比paxos简单很多!)
https://www.jianshu.com/p/9454ac19921d
https://www.2cto.com/kf/201709/681444.html
es也是过半原则的吗
https://www.jianshu.com/p/b21b42d02bd8
https://www.jianshu.com/p/8601bc17a270
有人认为zk的选举算法是paxos或fast paxos,有人认为不是,有争议!
见https://www.cnblogs.com/shenguanpu/p/4048660.html
zk的数据同步包括(7.9.5节):直接差异化同步、先回滚再差异化同步、仅回滚同步、全量同步;
(同步期间集群不可用;)
Learner负责leader和follower/observer之间的网络通信?包括同步、请求转发、投票等
第1,2,4章,6.1,7.6,7.7节也是重点;
《分布式系统概念与设计》
分布式涉及面比较广,它以计算机网络、密码学(网络安全)、操作系统、软件体系结构等课程为基础;
细分为分布式文件系统、分布式计算、分布式对象、分布式事务、分布式多媒体、分布式共享内存等;
(甚至还包括特定语言的知识和技术,如java的rmi、rpc、序列化;)
(注意,DSM或分布式共享内存,在spark博士论文也多次提到;)