[读书笔记][从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. https://blog.youkuaiyun.com/yeyazhishang/article/details/80758354

通过以上2个地方的讲解,概括下自己的理解:
分区容错性是分布式系统的基础,放弃则表示失去了系统的扩展性,违背了分布式系统设计的初衷。所以通常提到CAP的取舍,是在CA之间的取舍。

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

这样看来,不管单纯地牺牲一致性,还是可用性,都是不太可取的,所以会有BASE理论。

1.3.3 BASE理论

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

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

这样看来,还是可以在一致性和可用性之间做一定的权衡,来达到一个相对满意的状态。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值