Appearance
说下CAP原则
薪资:8·k-15k
岗位:初中级开发工程师
在设计一个分布式项目的时候会遇到三个特性:一致性(consistency)、可用性(Availability)、分区容错(partition-tolerance)都需要的情景.
CAP定律说的是在一个分布式计算机系统中,一致性,可用性和分区容错性这三种保证无法同时得到满足,最多满足两个。
如下图,CAP的三种特性只能同时满足两个。而且在不同的两两组合,也有一些成熟的分布式产品。

接下来,我们来介绍一下CAP的三种特性,我们采用一个应用场景来分析CAP中的每个特点的含义。
该场景整体分为5个流程:
DANGER
流程一、客户端发送请求(如:添加订单、修改订单、删除订单)
流程二、Web业务层处理业务,并修改存储成数据信息
流程三、存储层内部Master与Backup的数据同步
流程四、Web业务层从存储层取出数据
流程五、Web业务层返回数据给客户端
(1) 一致性Consistency
一致性指“
all nodes see the same data at the same time”,即更新操作成功并返回客户端完成后,所有节点在同一时间的数据完全一致。
一旦数据更新完成并成功返回客户端后,那么分布式系统中所有节点在同一时间的数据完全一致。
一致性是指写操作后的读操作可以读取到最新的数据状态,当数据分布在多个节点上,从任意结点读取到的数据都是最新的状态。
一致性实现目标:
Web业务层向主Master写数据库成功,从Backup读数据也成功。

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

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

分布式一致性特点:
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数据库不允许出现响应超时或响应错误。

必要实现流程:
1.写入Master主数据库后要将数据同步到从数据库。
2.由于要保证Backup从数据库的可用性,不可将Backup从数据库中的资源进行锁定。
3.即时数据还没有同步过来,从数据库也要返回要查询的数据,哪怕是旧数据/或者默认数据,但不能返回错误或响应超时。

分布式可用性特点:
所有请求都有响应,且不会出现响应超时或响应错误。
(3) 分区容错性(Partition tolerance)
分区容错性指
“the system continues to operate despite arbitrary message loss or failure of part of the system”,即分布式系统在遇到某节点或网络分区故障的时候,仍然能够对外提供服务。
分布式系统中,尽管部分节点出现任何消息丢失或者故障,系统应继续运行。
通常分布式系统的各各结点部署在不同的子网,这就是网络分区,不可避免的会出现由于网络问题而导致结点之间通信失败,此时仍可对外提供服务。
分区容错性实现目标:
其一个结点挂掉不影响另一个结点对外提供服务。

必要实现流程:
1.尽量使用异步取代同步操作,例如使用异步方式将数据从主数据库同步到从数据,这样结点之间能有效的实现松耦合。
2.添加Backup从数据库结点,其中一个Backup从结点挂掉其它Backup从结点提供服务。

分区容错性特点:
分区容忍性分是布式系统具备的基本能力。
更新: 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