分布式系统相关概念


分布式系统相关概念

CAP

C(Consistency):A read is guaranteed to return the most recent write for a given client.数据在各个节点是一致的,读操作总能读到最新写入的数据。
A(Availability):A non-failing node will return a reasonable response within a reasonable amount of time (no error or timeout).非故障节点必须在合理有限的时间返回合理的结果(非Error或者Timeout)
P(Partition Tolerance):The system will continue to function when network partitions occur.分布式系统必须在发生网络分区(脑裂,任意子节点集合故障)的情况下也提供服务。
对于CAP,在分布式系统中,总是认为网络是不可靠的,则P是必选,所以分布式系统的一致性也就只存在CP和AP两种选择:在发生网络分区时,是选择一致性还是可用性?
CAP

PACELC

  • PAC:if there is a partition (P), how does the system trade off availability and consistency (A and C);
  • ELC:else (E), when the system is running normally in the absence of partitions, how does the system trade off latency (L) and consistency (C)?
    个人理解PACELC是CAP的一个细化描述,
    其中可用性涉及到时延的描述,PACELC细化了CAP,如下图:
    分布式系统发生网络分区时,是在A和C之间选择(PA or PC)?还是在L和C之间选择(PL or PC)?
    意思就是,在分布式系统中,网络分区和一致性是硬性要求。根据不同的情景,牺牲一定的一致性来换取低延迟和可用性。
    PACELC
    CA:即不考虑网络分区,认为网络是可靠的。(只存在于单节点系统,或系统认为集群是“不可分区的”)
    CP:牺牲A来获得强一致性。P发生时,为了保证C,必然损失A。例如,写数据最后1个副本时遇上网络延时(分区),此时只能返回Timeout或者Error,可用性丧失。
    AP:牺牲C来获得A。P发生时,每个节点依然可以提供合理的服务响应。但是在整个分布式系统,各个节点的数据并非一致。一致性丧失,当分区恢复正常,数据逐渐同步,达到最终一致性。

ACID and BASE

ACID

  • Atomicity:原子性,整个事务中的所有操作,要么全部完成,要么全部不完成,不可能存在中间状态。
  • Consistency:(强)一致性,事务提交后,所有读操作都可以读到事务提交后的一致的数据。
  • Isolation:隔离性,并发事务之间相互隔离,互不影响。
  • Durability:持久性,在事务提交后,该事务对数据库所作的更改便持久的保存在存储介质之中,并且不可变。

BASE(牺牲一致性)

  • Basic Availability:基本可用,分布式系统更加关注系统的可用性。分布式系统在出现不可预知故障时,允许损失部分可用性:性能损失(高延时)和功能损失(降级,参考Spring Cloud熔断器Hystrix)

    响应时间上的损失:正常情况下,一个在线搜索引擎需要在0.5秒之内返回给用户相应的查询结果,但由于出现故障(比如系统部分机房发生断电或断网故障),查询结果的响应时间增加到了1~2秒。
    功能上的损失:正常情况下,在一个电子商务网站上进行购物,消费者几乎能够顺利地完成每一笔订单,但是在一些节日大促购物高峰的时候,由于消费者的购物行为激增,为了保护购物系统的稳定性,部分消费者可能会被引导到一个降级页面。

  • Soft-state:软状态/柔性事务。指在分布式系统中,client和server cluster建立的连接是无状态的(stateless)。可以类比Storm集群,Storm状态信息在Zookeeper。无状态提高了Storm的可用性,但牺牲了一致性(Storm节点的内存消息会丢失)。于我理解,无状态的分布式session是否也属于Soft-state的一种运用?

  • Eventual consistency:最终一致性

ACID/BASE特点

ACID BASE
强一致性事务优先 高可用可伸缩优先
弱化可用性 弱一致性
悲观锁 乐观锁
rigorous analysis best effort最优性能,充分利用系统资源
复杂机制 简单高效

Quorum NWR

Quorom机制,是一种分布式系统中常用的,用来保证数据冗余和最终一致性的投票算法,其主要数学思想来源于鸽巢原理。
具体体现是选主投票(过半数投票才会成为Leader)和NWR。

  • N: 数据副本总数量(可以理解为分布式系统中的节点数,因为通常是一个节点一个副本)
  • W: 写操作需要写入的最少副本数。W越大,写性能越低。
  • R: 读操作需要读取的最少副本数。R越大,读性能越低。
    NWR其实也是CAP的另外一种体现。
  • W+R>N:强一致性。因为读写必然重叠,只要取到版本号最高的数据(读写重叠部分的数据)即为最新数据。无脏读。
  • W+R<=N:最终一致性。因为读写不重叠,存在发生脏读的可能。

Lease机制

Lease,租约。我在用Redis实现分布式锁的时候使用过(利用expired),目的是防止死锁。
在Raft算法里面,term也可以理解是一个租约有效期的体现。
理解为:跨进程持有的资源使用的是租赁的形式,持有资源的进程如果存在宕机的可能,则租约过期后,资源会被自动释放。

引用

Consistency Tradeoffs in Modern Distributed Database System Design
15-446 Distributed Systems Spring 2009
解惑soft state
CAP和BASE理论