写在前面
接触分布式已数月有余,从zk到dubbo到springcloud都只是停留在应用层,此系列文章将深入探讨分布式背后的实现算法,如何保证分布式下的容灾与数据一致性,由于笔者水平有限,只是以自己的理解记录分布式算法实现,严谨的推导过程仍需另寻其他神犇~
阅读前请先了解CAP和BASE理论以及简单理解什么是拜占庭问题,本文默认你了解这些分布式基础理论
一、首先来宏观理解一下Paxos算法
1.Paxos算法是用来解决什么问题的?
- 明确问题:数据不能单点存放,鸡蛋不能放在同一个篮子里,所以如何在保证高度容错性下保证数据一致性就是Paxos的使命
- 更详细点说:在分布式系统中发生网络分区比如机器宕机或网络异常,Paxos需要解决的问题就是在上述情况下如何正确且快速地在集群内对某个数据达成一致
2.Paxos是强一致性算法么?
-
强一致性算法是指:任意时刻对不同节点的访问具有相同的视图,否则无法得到数据,很明显强一致性严重影响了性能,所以Paxos有一个多数派机制,也就是每次写保证写入大于N/2个节点,每次保证从大于N/2个节点中读,来维护一致性
-
说到这个问题我们来聊聊ZK,ZK使用的ZAB协议就是由Paxos算法演变而来,是multi-Poxos的一种,在ZK官方文档中有这么一个描述:
Sometimes developers mistakenly assume one other guarantee that ZooKeeper does not in