这是我参与「第五届青训营 」伴学笔记创造活动的第 7 天

前语

记载加入青训营的每一天的笔记

本文首要记载的是关于论述CAP定理中的P

之前在看 CAP 定理时抱有很大的疑惑,CAP 定理的定义是指在分布式体系中三者只能满意其二,也就是存在分布式 CA 体系的。

在网络上查阅了许多关于 CAP 文章,虽然这些文章对于 P 的解释五花八门,但总结下来这些观点大多都是指 P 是不行缺少的,也就是说在分布式体系只能是 AP 或许 CP,这种理论与我之前所认识的理论(存在分布式 CA 体系)是抵触的,所以才有了疑惑。

这个定理起源于加州大学柏克莱分校(University of California, Berkeley)的计算机科学家埃里克布鲁尔在 2000 年的分布式计算原理研讨会(PODC)上提出的一个猜测。 在 2002 年,麻省理工学院(MIT)的赛斯吉尔伯特和南希林奇宣布了布鲁尔猜测的证明,使之成为一个定理。

什么是 CAP 定理(CAP theorem)

在理论计算机科学中,CAP 定理(CAP theorem),又被称作布鲁尔定理(Brewer’s theorem),它指出对于一个分布式计算体系来说,不行能同时满意以下三点:

  • 一致性(Consistency) (等同于一切节点访问同一份最新的数据副本)
  • 可用性(Availability)(每次恳求都能获取到非错的响应——但是不确保获取的数据为最新数据)
  • 分区容错性(Partition tolerance)(以实际效果而言,分区相当于对通信的时限要求。体系假如不能在时限内达成数据一致性,就意味着发生了分区的状况,有必要就当前操作在 C 和 A 之间做出挑选。)

分区容错性(Partition tolerance)

理解 CAP 理论的最简单方式是幻想两个节点分处分区两侧。答应至少一个节点更新状况会导致数据不一致,即丧失了 C 性质。假如为了确保数据一致性,将分区一侧的节点设置为不行用,那么又丧失了 A 性质。除非两个节点能够互相通信,才干既确保 C 又确保 A,这又会导致丧失 P 性质。

  • P 指的是分区容错性,分区现象产生后需求容错,容错是指在 A 与 C 之间挑选。假如分布式体系没有分区现象(没有呈现不一致不行用状况) 自身就没有分区 ,既然没有分区则就更没有分区容错性 P。
  • 不管我设计的体系是 AP 仍是 CP 体系假如没有呈现不一致不行用。 则该体系就处于 CA 状况
  • P 的体现前提是得有分区状况存在

文章来历:维基百科 CAP 定理

几个常用的 CAP 结构比照

结构 所属
Eureka AP
Zookeeper CP
Consul CP

Eureka

Eureka 确保了可用性,完成最终一致性。

Eureka 一切节点都是平等的一切数据都是相同的,且 Eureka 能够彼此穿插注册。 Eureka client 运用内置轮询负载均衡器去注册,有一个检测间隔时间,假如在一定时间内没有收到心跳,才会移除该节点注册信息;假如客户端发现当前 Eureka 不行用,会切换到其他的节点,假如一切的 Eureka 都跪了,Eureka client 会运用最后一次数据作为本地缓存;所以以上的每种设计都是他不具备一致性的特性。

注意:由于 EurekaAP 的特性和恳求间隔同步机制,在服务更新时分一般会手动经过 Eureka 的 api 把当前服务状况设置为offline,并等待 2 个同步间隔后从头启动,这样就能确保服务更新节点对整体体系的影响

Zookeeper

强一致性

Zookeeper 在推举 leader 时会中止服务,只要成功推举 leader 成功后才干供给服务,推举时间较长;内部运用 paxos 推举投票机制,只要获取半数以上的投票才干成为 leader,不然从头投票,所以部署的时分最好集群节点不小于 3 的奇数个(但是谁能确保跪掉后节点也是奇数个呢);Zookeeper 健康检查一般是运用 tcp 长链接,在内部网络颤动时或许对应节点阻塞时分都会变成不行用,这里仍是比较危险的;

Consul

和 Zookeeper 一样数据 CP

Consul 注册时分只要过半的节点都写入成功才认为注册成功;leader 挂掉时,从头推举期间整个 Consul 不行用,确保了强一致性但牺牲了可用性 有许多 blog 说 Consul 属于 ap,官方已经承认他为 CP 机制。