分布式系统理论基础


分布式系统目标

  1. 提升系统整体性能和吞吐量
  2. 尽量保证分区容错性,即在分布式系统遇到某节点或网络分区故障时,仍要能够对外保证满足一致性和可用性的服务

分布式系统设计思路:中心化/去中心化

1.中心化

  • 中心化分布式系统中存在两类角色:Leader/Follower
  • Leader负责分发任务,并监控整个系统,如果有Follower不工作则将其踢出整个系统
  • Follower负责执行Leader分配的任务

    比如MySQLMaster/Slave架构,MasterSlave的角色是生来就是确定的。

又或者你可以参考现实中的黑心企业,领导负责分配工作给手底下的员工,并且监控员工,如果有员工过劳病倒了不能工作,领导不会尝试医治他,而是会直接开除他。

中心化分布式系统 存在的问题 & 解决

  1. 单点故障问题:一旦Leader宕机,整个系统就不可用

    解决:
    Leader热备或冷备,一旦Leader故障可以自动/手动切换
    直接用去中心化取代中心化,一旦Leader宕机就重新进行选举

  2. Leader能力会限制系统的扩展

2.去中心化

  • 去中心化分布式系统不意味着没有Leader,而是由Follower来自由选择Leader
  • 一旦Leader宕机,集群中的Follower就会自发举行新一轮的选举,推选出新的Leader

    ZKZAB协议的Master选举就是此类。

去中心化分布式系统 存在的问题 & 解决

  • 网络分区(“脑裂”)

    解决:小集群“自杀”或拒绝服务


基础理论

(一)CAP理论

  1. C:Consistency,一致性 —— 所有节点访问同一份最新数据副本

    强一致性:任何时间所有节点访问到的数据都是最新的。
    最终一致性:不保证任何时间所有节点访问到的数据都是最新的,但是保证一定时间后系统中的数据都是最新的。

  2. A:Availability,可用性 —— 每次请求都能收到非错响应,但是不保证获取的数据是最新数据

  3. P:Partition Tolerance,分区容错性 —— 在分布式系统遇到某节点或网络分区故障时,仍能够对外保证满足一致性和可用性的服务

    CAP理论常被认为是一致性(C)、可用性(A)、分区容错性(P)只能3选2
    但是实际上,分区容错性(P)是分布式系统的基本能力,必须要保证

C/A的取舍

  • 在发生网络分区(P)的情况下,如果想要保证继续服务,那么强一致性(C)和可用性(A)只能2选1。
  • 保证强一致性,放弃可用性 —— 可以保证用户看到的数据都是最新的数据,但是代价是响应时间急剧增加,一般不可取
  • 保证可用性,放弃强一致性 —— 首先保证用户的体验,允许用户看到的数据不是最新的,只保证在一定时间后系统中的数据会一致(即最终一致性)

(二)BASE理论

  • BA:Basically Available,基本可用性 —— 在集群故障时,允许损失一部分的可用性,但绝不允许系统不可用

    如:
    响应时间增加
    ②系统功能的损失:大促期间,为了保证系统的稳定性,部分消费者会被引导到一个降级页面

  • S:Soft-state,软状态 —— 允许数据存在中间状态,即允许不同数据副本之间的同步存在延迟

  • E:Eventually Consistent,最终一致性