[读书笔记][从Paxos到Zookeeper分布式一致性原理与实践] 1. 分布式系统原理和理论

1. 分布式原理

分布式系统是硬件和软件分布在不一样网络计算机上,彼此间经过消息传递进行通讯和协调的系统。网络

1.1 分布式环境存在的问题

  1. 通讯异常:分布式环境存在消息丢失和消息延迟的状况。
  2. 网络分区:在组成分布式系统的全部节点中只有部分节点能进行正常通讯,另外一些则不能,造成网络分区孤岛,也称为脑裂。
  3. 三态:分布式环境请求有3种状态,成功、失败、超时。
  4. 节点故障:分布式环境中每一个节点都有可能出现故障。

1.2 分布式系统特性

  1. 分布性:服务分布在网络的不一样的机器上,可能会变更。
  2. 副本:
  • 数据副本:多节点持久化同一份数据,当某个节点宕机或存储的数据丢失,可从副本读取到数据,解决分布式系统数据丢失的问题。
  • 服务副本:多节点提供一样的服务,每一个节点都能接收外部的请求并进行相应的处理。
  1. 并发性:并发状况较单点系统更为复杂,对于共享资源的访问须要准确和高效地协调。
  2. 故障:分布式系统中每一个节点都有可能发生故障,设计时应该充分考虑可能发生的故障和备案。

1.3 CAP和BASE理论

1.3.1 分布式系统的几个基本要求

  • 一致性:在分布式环境中,多个数据副本之间是否可以保持一致的特性。若是对一个数据项更新后,全部用户在集群其余节点都能读到更新后的值,那么认为系统具有强一致性(严格一致性)。
  • 可用性:对于用户的每个请求,系统能够在有限的时间内返回结果。有限的时间随系统类型不一样而不一样,是知足用户预期的时间。返回结果是指系统应该返回正确的响应,而不是用户没法理解的结果,好比OutOfMemory。
  • 分区容错性:分布式系统在遇到任何网络分区故障时,仍须要保证对外提供一致性和可用性的服务,除非是整个网络发生故障。

1.3.2 CAP理论

CAP理论:一个系统不可能同时知足一致性(C:Consistency)、可用性(A:Avaliability)和分区容错性(P:Partition Tolerance)这三个基本需求,最多只能知足其中的两项。并发

那么为何会这样呢?如下2个地方讲的都挺好的:分布式

  1. https://www.zhihu.com/question/54105974
  2. http://www.javashuo.com/article/p-tedpjipc-gy.html

经过以上2个地方的讲解,归纳下本身的理解:
分区容错性是分布式系统的基础,放弃则表示失去了系统的扩展性,违背了分布式系统设计的初衷。因此一般提到CAP的取舍,是在CA之间的取舍。
spa

  • 保证分区容错性:须要用到上文中提到的数据副本,即同一份数据分布到不一样的节点上,在网络发生故障时,仍须要保证对外提供一致性和可用性的服务,除非是整个网络发生故障。
  • 保证一致性:此时为知足分区容错性的需求,设置了多个数据副本(副本越多,分区容错性越强),分布式系统须要承担数据同步的工做。若是要保证强一致性,那么部分节点须要牺牲可用性,等待数据同步完成后再提供服务。极端状况下,当网络出现故障造成网络孤岛的时候,孤岛内的节点为保证强一致性,须要完全中止服务,等待网络恢复,同步最新的数据保证强一致性。
  • 保证可用性:一样是多个数据副本的场景,保证强可用性的一个方法便是牺牲一致性,在数据同步的同时提供服务,此时可能各个节点对同一个数据返回的值不一样(还未完成数据同步),出现数据不一致的状况。

这样看来,无论单纯地牺牲一致性,仍是可用性,都是不太可取的,因此会有BASE理论。.net

1.3.3 BASE理论

BASE理论:基本可用、软状态、最终一致性设计

  • 基本可用:分布式系统在遇到问题时,容许损失部分可用性。响应时间上的延长、功能降级。
  • 软状态:和强一致性相比,软状态容许系统中的数据存在中间状态,容许系统在不一样节点的数据副本之间进行数据同步的延迟。
  • 最终一致性:系统中的全部数据副本,在通过一段时间的同步后,最终可以达到一个一致的状态。

这样看来,仍是能够在一致性和可用性之间作必定的权衡,来达到一个相对满意的状态。blog