【分布式篇】什么是CAP?强一致性?最终一致性?

目录

CAP是什么?

一致性(Consistency)

这个和数据库ACID的一致性类似,但这里关注的所有数据节点上的数据一致性和正确性,而数据库的ACID关注的是在在一个事务内,对数据的一些约束。系统在执行过某项操作后仍然处于一致的状态。在分布式系统中,更新操作执行成功后所有的用户都应该读取到最新值。

个人理解:关注点在业务逻辑上的一致性

可用性(Availability)

每一个操作总是能够在一定时间内返回结果。需要注意“一定时间”和“返回结果”。“一定时间”是指,系统结果必须在给定时间内返回。“返回结果”是指系统返回操作成功或失败的结果。

接口反馈速度越快,可用性越高;还要保证一定能返回数据

分区容忍性(Partition Tolerance)

是否可以对数据进行分区。这是考虑到性能和可伸缩性。

这个一般情况下都是满足的,所以基本都是CP、AP

数据的一致性

强一致性:

当更新操作完成之后,任何多个后续进程或者线程的访问都会返回最新的更新过的值。这种是对用户最友好的,就是用户上一次写什么,下一次就保证能读到什么。根据 CAP 理论,这种实现需要牺牲可用性

白话文:写一个值,就立马能读到什么

弱一致性:

系统并不保证续进程或者线程的访问都会返回最新的更新过的值。用户读到某一操作对系统特定数据的更新需要一段时间,我们称这段时间为“不一致性窗口”。系统在数据写入成功之后,不承诺立即可以读到最新写入的值,也不会具体的承诺多久之后可以读到。

白话文:写一个值,但我不确定能不能读取到,也不确定什么时候能读取到(好渣呀)

最终一致性:

是弱一致性的一种特例。系统保证在没有后续更新的前提下,系统最终返回上一次更新操作的值。在没有故障发生的前提下,不一致窗口的时间主要受通信延迟,系统负载和复制副本的个数影响。DNS 是一个典型的最终一致性系统。

白话文:写一个值,如果过一段时间(这个时间依据什么?TODO)没后续的更新了,那么下次就可以读取到这个值

上一篇:[振动力学] 课程考核报告:Matlab 实现邓克利法、瑞利法、里兹法、矩阵迭代法


下一篇:层次分析法(AHP)