概述
ZooKeeper是一个优秀的高性能分布式协调框架,就因为它主打分布协调所以现在分布式架构满天下的时代,也让它成了一个十分给力的基础组件,所以深入了解它的原理是一件十分有价值的事情。本文是笔记属性,易懂地方只记要点,在难点地方着重去描述。
何为分布式
分布式系统是一个硬件或软件组件分布在不同的网络计算机上的,彼此之间仅仅通过消息传递进行通信和协调的系统
分布式特点
分布性
系统各节点可分布在不同的网络与地区
对等性
分布式各个节点的角色是对等的,不是主从等的关系
并发性
并发的调用某个服务等,如同时去请求数据
缺乏全局时钟
意思就是各节点的请求不能保持同步的,能像单机电脑那样保留,利用全局时钟来控制各节点执行逻辑的顺序
节点故障
要考虑到各节点是可能出现故障的
分布式环境问题
通信异常
分布在不同的网络中的节点,当然容易出现通信问题
网络分区
在地域或者区域里集群之间的通信不畅时,形成“脑裂”现象,如两个数据中心服务不同时,数据无法同步,这样就形成了网络分区
三态
平时请求都只有两个状态,成功与失败,但在分布式的世界里,当请求消息丢失时,就可能出现未知状态,然后超时未响应
节点故障
就是分布式里的机器故障。
从ACID到CAP/BASE
说到事务就会涉及到ACID特性,这些事务特性针对单机来说,是很容易实现的,但对于分布式的系统来说,很就非常复杂了,这出现相关的CAP理论及BASE理论。下面来简单说说,
ACID
A(Atomicity) 原子 性
C(Consistency) 一致性
其中这个一致性,其中一个解释是指,在执行事务前后保留数据库状态一致,如数据库操作破坏约束规范,如唯一性
I (Isolation) 隔离性
说到隔离性,就要提到经典的数据读取问题,脏读,不可重复读,幻读,然后针对这几个问题弄成了四个隔离级别分别
- Read Uncommitted
- Read Committed
- Repeatable Read
- Serializable
D(Durability)持久性
CAP
针对分布式系统,有一个特点就是无法同时做到一致性,可用性,分区容错性,最多只能同时满足基中两个,这就是著名的CAP理论
C(Consistency)这里的到一致性和数据库事务里的一致性不一样,这里的一致性是指在分布式的系统中读取结果都是一致的,如读取张三的余额为100,从各个节点读取张三的余额都为100
A( Availability) 可用性,就是系统服务是否可用
P (Partition tolerance) 分区容错性,从前面提到过的分布式的常见的问题之一网络分区,当出现这个问题时,系统是否即为分区容错性。
作为分布式的框架都是优先满足分区容错性,因为作为分布式系统某些节点故障就导致不可用,那这个分布式就非常脆弱的,所以是都是在满足P这个基准下,在C和A中作权衡,然后有了AP 与 CP 的一些框架,
- 如Zookeeper是满足CP,追求的是强一致性,集群中节点数N,则必须保证N/2+1个节点是可用,集群的一致性才能得到保证,否则一致性得不到保证的情况下,这个集群也停止对外提供服务
- Eureka 是满足AP的,追求是可用性,集群里只要还有一个节点活,都是可用的,就算出现了网络分区,两边网络分区里的数据不一致,也一样的可用
- 在实现框架时选择CP与AP,是根据需求来权衡,无优劣之分,只有适用与否
BASE理论
它的由Basically Available, Soft state, Eventual consistency,三个短语缩写而成,它是由eBay的架构师Dan Pritchett 经过大量分布式架构中提出的,就是在CAP理论下,权衡了服务的可用性和数据一致性想出来的这么一套理论。
这套论本来是拿来解决数据库的ACID,在分布式的架构下放弃了强一致性所提出来的一套方案
- Basically Available 基本可用是指数据库不保证一致性,能保证读写的可用性,能读,能写,但读取的值 可能是旧值,所以叫它基本可用
- Soft state 软状态,指的是各个指点之间的数据从不一致到一致时的中间状态
- Eventual consistency, 最终一致性,指的是更新一个值后,在后面没有更新的情况下,经过一定时间后,系统从软状态到最终所有节点的数据保持一致。
其中我们最常听见的就是这个最终一致性, 如在实现我们的业务时使用分布式锁时会使用大大降低系统的性能,就是可以通过BASE理论来实践。
总结
这章就是主要介绍了一下,分布式系统的特点及分布式环境所遇到的问题,及解决这些问题所出现的一些理论,有了理论,在我们实现业务时就可以用这套理论来指导实践。
参考:
《从Paxos到ZooKeeper分布式一致性原理与实践》