CAP 理论

      CAP 是一致性(Consistency)、可用性(Availability)和分区容忍性(Partition Tolerance)首字母的缩写。CAP 是分布式领域著名的理论。

一致性

      一致性是指用户对数据的更新操作(包括新增、修改和删除),要么在所有的数据副本都执行成功,要么在所有的数据副本都执行失败。一致性要求对所有数据节点的数据副本的修改是原子操作。所有数据节点的数据副本的数据都是最新的,从任意数据节点读取的数据都是最新的状态。
      实现上述目标,需要在技术上满足以下条件:

  1. 应用程序将数据写入主数据库后,将数据同步到从数据库中;
  2. 数据写入主数据库后,主数据库将数据同步到从数据库存在一定的时间延迟,这个过程需要将从数据库锁定,避免应用程序向从数据库中读取出与主数据库不一致的数据,待数据同步完成后再释放从数据库的锁。

      综上所述,一致性存在如下特点:

  1. 存在数据同步的过程,应用程序的写操作存在一定的延迟;
  2. 为了保证各节点数据的一致性,需要对相应的资源进行锁定,待数据同步完成后再释放锁定的资源;
  3. 如果数据写入并同步成功,所有节点都会返回最新的数据。相反地,如果数据写入或者同步失败,所有节点都不会存在最新写入的数据。

可用性

      可用性指的是客户端访问数据的时候,能够快速得到响应。需要注意的是,系统处于可用性时,每个存储节点的数据可能会不一致,并不要求应用程序向数据库写入数据时能够立刻读取到最新的数据。
      可用性存在如下特点:

  1. 所有请求都会被响应;
  2. 不会存在响应超时或者响应错误的情况;
  3. 如果对不同的应用程序设定了超时响应时间,一旦超过了这个时间,系统将不可用。

分区容忍性

      如果只是将存储系统部署并运行在一个节点上,当系统出现故障是,整个系统将不可用。如果将存储系统部署并运行在多个不同的节点上,并且这些节点处于不同的网络,这就形成了网络分区,此时,不可避免地会出现网络问题,导致节点之间的通信出现失败的情况,但是,此时的系统仍能对外提供服务,这就是分区容忍性。
      分区容忍性存在如下特点:

  1. 一个节点挂掉,不影响其他节点对外提供服务;
  2. 分区容忍性是分布式系统必须具备的基础能力

CAP 的组合

      在分布式系统之,不会同时具备 CAP 三个特性,只能同时具备其中的两个。
      在 CAP 理论中,如果要满足一致性,需要在数据由主数据库同步到从数据库的过程中对数据库加锁,以防止同步的过程中应用程序向从数据库读取不一致的数据,数据同步完成后会释放从数据库的锁。如果数据同步失败,则需要从数据库返回错误信息或者超时信息。
      如果要满足可用性,则必须保证数据节点的可用性,无论何时查询从数据库中的数据,从数据库都要快速响应查询结果,不能出现响应超时或者返回错误信息的情况。
      由此可见,系统在满足分区容忍性的前提下,一致性和可用性是矛盾的。

AP

      放弃一致性,追求系统的可用性的可用性和分区容忍性。这是实际工作中选择最多的。
      虽然放弃了一致性,但是系统最终采用了最终一致性,允许多个节点的数据在一定的时间内存在差异,一段时间后达到数据一致的状态。

CP

      放弃可用性,追求系统的一致性和分区容忍性。这种组合方式对于数据的一致性要求比较高,追求的是数据的强一致性。
      在时间场景中,跨行转账业务需要每个银行系统都执行完转账操作的整个事务才算完成,这是典型的 CP 方式。

CA

      放弃分区容忍性,这时系统也不是个分布式系统了。

Base 理论

      分布式系统最多只能同时满足 CAP 理论中的两个特性。在实际场景中,大部分分布式系统会采用 AP 方式,即舍弃一致性,保证可用性和分区容忍性。但是通常情况下还是要保证一致性,这种一致性与 CAP 中描述的一致性有所区别:CAP 中的一致性要求的是强一致性,即任何时间读取任意节点的数据都必须要一致,而这里的一致性指的是最终一致性,允许在一段时间内每个节点的的数据不一致,但经过一段时间后,每个节点的数据达到一致。

Base 理论概述

      Base 理论是对 CAP 理论中 AP 的一个扩展,它通过牺牲强一致性来获得可用性。Base 理论中的 Base 是基本可用(Basically Available)、软状态(Soft State)和最终一致性(Eventually Consistent)的缩写。当系统出现故障时,Base 理论允许部分数据不可用,但是会保证核心功能可用;允许数据在一段时间内不一致,但是经过一段时间,数据最终是一致的。符合 Base 理论的事务可用称为柔性事务。

基本可用

      基本可用是指分布式系统出现故障时,允许其损失系统的部分可用性,但是要保证系统基本可用。例如在电商业务场景中,添加购物车和下单功能出现故障时,商品浏览功能仍然可用。

软状态

      软状态时指允许系统中存在中间状态,这些中间状态不会影响系统的整体可用性,只是允许系统各个节点之间的数据同步存在延迟。例如电商场景中,订单中的"支付中"、"退款中"等状态就是中间状态,当达到一段时间后,就会变成"支付成功"或者"退款成功"的状态。

最终一致性

      最终一致性是指系统中各个节点的数据副本经过一段时间的同步,最终能够达到一致的状态。最终一致性需要保证数据经过一段时间的同步达到一致,并不要求各个节点的数据保存实时一致。

Last modification:December 14th, 2024 at 04:48 pm
如果觉得我的文章对你有用,请随意赞赏