「架构师训练营」作业:第 6 周 CAP 原理
请简述 CAP 原理。
CAP
是分布式系统的一项指标。从一致性(Consisitency)、可用性(Availability)、分区耐受性(Partition Tolerance)这3个方面来衡量分布式系统。
在介绍 CAP
原理之前,我们先来了解一个很重要的概念:事务
在计算机科学中,事务是无法被分割的操作,事务处理就是被分割为个体的信息处理。事务必须作为一个完整的单元成功或失败,不可能存在部分完成的事务。
—— 维基百科
也就是说,事务是作为一个单元执行的,要么全部成功,要么全部失败,没有中间状态的。
平时我们说的事务,主要是指数据库事务。数据库事务有ACID
这4个基本特性:
A:原子性(atomicity)
一个事务对状态的改变是基元的,所有发生的或是不发生的。
要么都成功,要么都失败。
C:一致性(consistency)
事务是对状态的正确转换,以组为单位采取的行动不违反与状态相关联的完整性约束。
数据在执行前后满足一致性状态,数据都是有效合法的。
I:隔离性(isolation)
即使事务并发执行,对于每个事务T来看,其他的事务都是在T之前或之后执行,但不是两者都执行。
多个事务直接是互不影响的。
D:耐久性(durability)
一旦事务成功完成(提交),对状态的改变从故障中幸存并被保留。
随着分布式系统的出现,一个系统会有多个进程、多个数据库,那就会诞生分布式事务的问题。分布式事务是协调不同服务器、不同数据库上的操作的,本质上它还是数据库事务。
CAP
原理是分布式系统的入门理论。它从 3 个方面描述一个分布式系统。
C:一致性(Consistency)
每次读取的数据都应该是最近写入的数据或者返回一个错误,而不是过期数据
A:可用性(Availability)
每次请求都应该得到一个响应,而不是返回一个错误或者失去响应,不过这个响应不需要保证数据是最近写入的。也就是说系统需要一直都有可以正常使用的,不引起调用者的异常,但是并不保证响应的数据是最新的。
P:分区耐受性(Partition Tolerance)
即使因为网络原因,部分服务器节点之间消息丢失或者延迟了,系统依然应该是可以操作的。
子系统之间交互是会有延迟甚至网络故障的,在分布式系统下面,这个是无法避免的。
由于分区延迟或者故障是一定会存在的,在分布式系统必须要满足分区耐受性的情况下,可用性和一致性无法同时满足。CAP
3 个指标,通常只能满足两个。
参考文章:
http://www.ruanyifeng.com/blog/2018/07/cap.html
https://en.wikipedia.org/wiki/Transaction_processing
https://baike.hk.xileso.top/wiki/CAP
评论