Skip to content

说下CAP原则

薪资:8·k-15k

岗位:初中级开发工程师

在设计一个分布式项目的时候会遇到三个特性:一致性(consistency)、可用性(Availability)、分区容错(partition-tolerance)都需要的情景.

CAP定律说的是在一个分布式计算机系统中,一致性,可用性和分区容错性这三种保证无法同时得到满足,最多满足两个。

如下图,CAP的三种特性只能同时满足两个。而且在不同的两两组合,也有一些成熟的分布式产品。

202512062334404479d4e85.png

接下来,我们来介绍一下CAP的三种特性,我们采用一个应用场景来分析CAP中的每个特点的含义。

该场景整体分为5个流程:

DANGER

流程一、客户端发送请求(如:添加订单、修改订单、删除订单)

流程二、Web业务层处理业务,并修改存储成数据信息

流程三、存储层内部Master与Backup的数据同步

流程四、Web业务层从存储层取出数据

流程五、Web业务层返回数据给客户端

(1) 一致性Consistency

一致性指“all nodes see the same data at the same time”,即更新操作成功并返回客户端完成后,所有节点在同一时间的数据完全一致

一旦数据更新完成并成功返回客户端后,那么分布式系统中所有节点在同一时间的数据完全一致。

一致性是指写操作后的读操作可以读取到最新的数据状态,当数据分布在多个节点上,从任意结点读取到的数据都是最新的状态。

一致性实现目标:

Web业务层向主Master写数据库成功,从Backup读数据也成功。

202512062334404836f1ef7.png

Web业务层向主Master读数据库失败,从Backup读数据也失败。

20251206233440f58d5d935.png

必要实现流程:

写入主数据库后,在向从数据库同步期间要将从数据库锁定,待同步完成后再释放锁,以免在新数据写入成功后,向从数据库查询到旧的数据。

202512062334408fdd296ae.png

分布式一致性特点:

1.由于存在数据同步的过程,写操作的响应会有一定的延迟。

2.为了保证数据一致性会对资源暂时锁定,待数据同步完成释放锁定资源。

3.如果请求数据同步失败的结点则会返回错误信息,一定不会返回旧数据。

(2) 可用性(Availability)

可用性指“Reads and writes always succeed”,即服务一直可用,而且是正常响应时间

对于可用性的衡量标准如下:

可用性分类可用水平(%)一年中可容忍停机时间
容错可用性99.9999<1 min
极高可用性99.999<5 min
具有故障自动恢复能力的可用性99.99<53 min
高可用性99.9<8.8h
商品可用性99<43.8 min

可用性实现目标:

1.当Master正在被更新,Backup数据库接收到数据查询的请求则立即能够响应数据查询结果

2.backup数据库不允许出现响应超时或响应错误。

202512062334403e1c7652b.png

必要实现流程:

1.写入Master主数据库后要将数据同步到从数据库。

2.由于要保证Backup从数据库的可用性,不可将Backup从数据库中的资源进行锁定。

3.即时数据还没有同步过来,从数据库也要返回要查询的数据,哪怕是旧数据/或者默认数据,但不能返回错误或响应超时。

202512062334403a7be5eac.png

分布式可用性特点:

所有请求都有响应,且不会出现响应超时或响应错误。

(3) 分区容错性(Partition tolerance)

分区容错性指“the system continues to operate despite arbitrary message loss or failure of part of the system”,即分布式系统在遇到某节点或网络分区故障的时候,仍然能够对外提供服务。

分布式系统中,尽管部分节点出现任何消息丢失或者故障,系统应继续运行。

通常分布式系统的各各结点部署在不同的子网,这就是网络分区,不可避免的会出现由于网络问题而导致结点之间通信失败,此时仍可对外提供服务。

分区容错性实现目标:

其一个结点挂掉不影响另一个结点对外提供服务。

20251206233440a7e62f13a.png

必要实现流程:

1.尽量使用异步取代同步操作,例如使用异步方式将数据从主数据库同步到从数据,这样结点之间能有效的实现松耦合。

2.添加Backup从数据库结点,其中一个Backup从结点挂掉其它Backup从结点提供服务。

202512062334400c7638b64.png

分区容错性特点:

分区容忍性分是布式系统具备的基本能力。

更新: 2023-10-15 19:39:30
原文: https://www.yuque.com/tulingzhouyu/db22bv/eav93qvg0qcgmgv3

短视频

最近有一位粉丝在后台留言,面试的时候被问到什么CAP原则,当时回答的不是很好,导致错失offer,今天我们就来好好聊聊这个问题

其实CAP原则是分布式系统设计中的一个基本原则,它指的是在分布式计算中,一致性-C、可用性-A、分区容错性-P 这三个属性不可能完全同时满足最多只能同时满足其中的两个

具体来说:

一致性是指所有节点在同一时间具有相同的数据视图,也就是对数据的修改操作在一定时间内能够被所有节点看到,并且满足事务的ACID特性

可用性是指系统能够保证每个请求都能够得到响应,换句话说就是系统能够正常对外提供服务,不会出现宕机或无法响应的情况。

最后分区容错性是指系统能够在网络分区的情况下,仍然能够保持可用性和一致性。

那么CAP原则他就认为在一个分布式系统中,由于网络通信可能会发生分区,比如说网络故障导致节点之间无法通信,因此必须满足分区容错性

而在面对网络分区时,要么保证一致性,要么保证可用性,二者无法同时保证

因为如果在分区发生时要求一致性,就可能导致部分节点无法响应请求,从而影响了可用性;

如果保证可用性,就可能导致节点间数据的不一致。

CAP原则的存在使得分布式系统设计时需要根据实际业务需求和情景,在一致性、可用性和分区容错性之间权衡取舍,我们需要根据业务特点,选择最适合的策略和技术。

更新: 2024-06-07 14:02:10
原文: https://www.yuque.com/tulingzhouyu/db22bv/rm79dc344lq3lbxu