目录
CAP是什么?
一致性(Consistency)
这个和数据库ACID的一致性类似,但这里关注的所有数据节点上的数据一致性和正确性,而数据库的ACID关注的是在在一个事务内,对数据的一些约束。系统在执行过某项操作后仍然处于一致的状态。在分布式系统中,更新操作执行成功后所有的用户都应该读取到最新值。
个人理解:关注点在业务逻辑上的一致性
可用性(Availability)
每一个操作总是能够在一定时间内返回结果。需要注意“一定时间”和“返回结果”。“一定时间”是指,系统结果必须在给定时间内返回。“返回结果”是指系统返回操作成功或失败的结果。
接口反馈速度越快,可用性越高;还要保证一定能返回数据
分区容忍性(Partition Tolerance)
是否可以对数据进行分区。这是考虑到性能和可伸缩性。
这个一般情况下都是满足的,所以基本都是CP、AP
数据的一致性
强一致性:
当更新操作完成之后,任何多个后续进程或者线程的访问都会返回最新的更新过的值。这种是对用户最友好的,就是用户上一次写什么,下一次就保证能读到什么。根据 CAP 理论,这种实现需要牺牲可用性。
白话文:写一个值,就立马能读到什么
弱一致性:
系统并不保证续进程或者线程的访问都会返回最新的更新过的值。用户读到某一操作对系统特定数据的更新需要一段时间,我们称这段时间为“不一致性窗口”。系统在数据写入成功之后,不承诺立即可以读到最新写入的值,也不会具体的承诺多久之后可以读到。
白话文:写一个值,但我不确定能不能读取到,也不确定什么时候能读取到(好渣呀)
最终一致性:
是弱一致性的一种特例。系统保证在没有后续更新的前提下,系统最终返回上一次更新操作的值。在没有故障发生的前提下,不一致窗口的时间主要受通信延迟,系统负载和复制副本的个数影响。DNS 是一个典型的最终一致性系统。
白话文:写一个值,如果过一段时间(这个时间依据什么?TODO)没后续的更新了,那么下次就可以读取到这个值