今天看啥  ›  专栏  ›  汪汪收房租

zookeeper基础篇(一)

汪汪收房租  · 简书  ·  · 2020-03-29 02:31

分布式理论知识

1. 集中式 vs 分布式

集中式

一台或多台主机组成中心节点,系统内所有功能集中处理。特点是部署简单,往往需要强大的大型主机来支撑。

分布式

多台计算机在空间上任意分布(分布性),多台机器之间没有主从之分(对等性),可由外部并行操作(并发性)。

2. 分布式架构主要面临的挑战

通信异常

单机下访问延时在纳秒级,而分布式往往需要通过网络通信来访问,延迟提升至0.1~1ms,相较内存访问多了100+倍。

网络分区

只有部分节点之间能够正常通信,而另一些节点不能,这种情况就叫“网络分区”,也就是大家所说的脑裂。

三态

成功、失败和超时。超时属于不确定状态。

节点故障

理论上每个节点都可能出现故障。

3. ACID & CAP & BASE

ACID & CAP & BASE 理论是分布式系统发展实践中的产物,主要还是看系统特性来决定架构设计。

ACID

原子性(Atomicity):要么全部执行、要么全部不执行

一致性(Consistency):从数据一致性or正确性状态上的描述,例如执行途中宕机了,一部分数据录入另一部分丢了,这种情况属于不正确or不一致的。

持久性(Durability):数据永久保存下来。

隔离性(Isolation):主要描述事务与事务之间在操作的过程中数据是如何隔离的。

CAP定理

C(一致性:Consistency)、A(可用性:Availability)、P(分区容忍度:Partition tolerance)。

对于分布式系统而言网络问题是一个必然会出现的因素,分布式系统往往只能在C和A之间做权衡。


CAP交合图

BASE理论

BASE(基本可用:Basically Available)。很显然,BASE是对CAP分布式实践后权衡下得出的结论。强可用性几乎是所有系统必须要做到的,因此既然无法做到强一致性,那就适当达到最终一致性也是可以接受的。从不一致到一致的状态我们称之为“软状态”。

基本可用意味着失去部分可用性,一般可以损失响应时间、损失部分功能等等。

最终一致一般有一些套路策略,因果一致、读己所写、session一致、单调一致(读/写)。

4. 2PC & 3PC & Paxos

分布式主要研究如何权衡可用性和一致性,关于一致性当下主要有以下三种一致性协议:

2PC(2 phase commit)

二阶段提交协议。主要分为准备阶段(投票阶段)和提交阶段(执行阶段)。系统有两个角色:协调者和参与者。

准备阶段:协调者给每个参与者发送prepare消息。参与者要么直接响应“失败”,要么写入redo和undo日志并响应“成功”(进入ready状态,只差commit)。

提交阶段:协调者收到失败或超时,给每个参与者发送“rollback”,否则发送“commit”。此时才会释放事务锁。


二阶段提交调用图

缺陷:同步阻塞、单点故障(指协调者)、脑裂。

3PC(3 phase commit)

三阶段提交协议是在二阶段提交协议上的改进。CanCommit、PreCommit、DoCommit三个阶段。

引入超时机制。同时在协调者和参与者中都引入超时机制。
在第一阶段和第二阶段中插入一个准备阶段。保证了在最后提交阶段之前各参与节点的状态是一致的。
CanCommit:参与者认为自身可以顺利进行commit的时候响应“成功”,否则响应“失败”。

PreCommit:等同于2PC中的准备阶段。写undo和redo日志,进入ready状态。假如有任何一个参与者在CanCommit阶段向协调者发送了No响应,或者等待超时之后,协调者都没有接到参与者的响应,那么就执行事务的abort。如果迟迟未收到PreCommit的请求,则自动abort。

DoCommit:收到所有参与者“成功”响应后,发送“commit”。未收到所有参与者“成功”响应后,发送“abort”。如果收到PreCommit后迟迟未收到DoCommit的请求,则自动commit。(超时自动commit的原因是收到PreCommit的前提是所有参与者都成功响应了CanCommit。那么有理由认为大概率是成功的,只是因为网络问题没收到DoCommit而已。)


三阶段提交时序图

优势:通过超时自动commit或abort机制,在发生单点故障后能很好的处理问题,并减少阻塞。

缺陷:还是存在发生数据不一致的风险,如果CanCommit都成功,但DoCommit阶段发送abort时如果有参与者发生网络故障,那么数据就不一致了。因为发生故障的参与者会自动commit。

paxos

paxos算法是Leslie Lamport早在1990提出的,当时没被采纳。1998年迟到9年的论文终于被世人接受,此算法经过严格数学论证,也是公认的解决分布式一致性问题的终极方案。

相关的工程实践有:谷歌的锁服务Chubby、分布式高性能数据库Hypertable等

维基百科(paxos)

知乎《Paxos Made Simple》论文笔记

《Paxos Made Simple》论文




原文地址:访问原文地址
快照地址: 访问文章快照