bboyjing's blog

Zookeeper学习笔记一【序】

这两天随手翻了下以前看过的《从Paxos到Zookeeper分布式一致性原理与实践》,发现跟没看过一样。于是有了再看一遍的念头,顺便记下这一系列学习笔记。首先,向作者倪超致敬,笔记内容绝大部分来自于这本书,本章来过一过一些概念性的东西吧。

ACID

ACID是传统单机事物的特征,分别是原子性(Atomicity),一致性(Consistenty),隔离性(Isolation)和持久性(Durability),这个知识相信大家都很了解了,这里就稍微意思地梳理一下。

  • Atomicity 数据库能够进行操作的最小的逻辑单元,它包含的所有操作都是不可分割的
  • Consistenty 事务中包含的一系列的操作,这些操作必须同时成功,或者同时失败
  • Isolation 并发事物相互独立,当然得依赖事物隔离级别的类型
  • Durability 一旦事物成功结束,它对数据库所做的变更就必须永久保存下来

CAP

一个分布式系统不可能同时满足一致性(C:Consistenty)、可用性(A:Availability)和分区容错性(P:Partition tolerance)这三个基本需求,最多只能同时满足其中的两项。

  • Consistenty 在分布式环境中,一致性是指数据在多个副本之间是否能够保持一致的特性
  • Availability 系统提供的服务必须一直处于可用的状态
  • Partition tolerance 分布式系统在遇到任何网络分区故障时,仍然能够保证对外提供一致性和可用性的服务

上面已经说了,一个分布式系统无法同时满足上述三个需求,而只能满足其中的两项,因此就必须抛弃其中一项:

放弃CAP理论 说明
放弃P 放弃P意味着放弃了系统的可扩展性
放弃A 放弃A意味着一段时间系统无法对外提供正常的服务
放弃C 事实上放弃一致性指的是放弃数据的强一致性,而保留数据的最终一致性

一个分布式系统必然会面临网络问题,也就是说分区容错性是必须要面对的,因此系统架构师往往需要把精力花在如何根据业务特点在C(一致性)和A(可用性)之间寻求平衡。

BASE

BASE理论是对CAP中一致性和可用性权衡的结果,是基于CAP定理逐步演化而来的,其核心思想是即使无法做到强一致性,但每个应用都可以根据自身的业务特点,采用适当的方式来使系统达到最终一致性。

  • 基本可用:是指分布式系统在出现不可预知故障的时候,允许损失部分可用性--但是这绝不等价于系统不可用
  • 弱状态:允许系统在不同节点的数据副本之间进行数据同步的过程存在延时
  • 最终一致性:需要系统保证最终数据能够达到一致,而不需要实时保证系统数据的强一致性

2PC

2PC,Two-Phase Commit的缩写,即二阶段提交,顾名思义,二阶段提交协议是将事物的提交过程分成了两个阶段来进行处理,其流程如下:
图1
上图可以很清楚地看出二阶段提交的流程,上面是成功的情况。如果在阶段一协调者收到任何非Yes的反馈或者网络超时,会在阶段二发送Rollback请求。
二阶段提交协议的优点:原理简单,实现方便。
二阶段提交协议的缺点:同步阻塞,单点问题,数据不一致,太过保守。

  • 同步阻塞 两个阶段都存在各个参与者都在等待其他参与者响应的情况
  • 单点 协调者是个单点,如果出现问题,整个系统将无法工作
  • 数据不一致 阶段二中会发生部分参与者正常提交,部分参与者提交失败的情况

结束

除了上面说的一些概念,还有3PC和Paxos算法等,这里就先不讲了,因为我也说不清楚。。。这一章就到这里了,下面还是重点学习学习如何在工程中使用Zookeeper。