CAP理论
-
概述
1988年,加州大学计算机科学家Eric Brewer 提出了分布式系统的三大指标:Consistency、Availability、Partition Tolerance,他指出这三个条件同时最多只能满足两个,目前所有的分布式系统都遵循CAP定律,比如Hadoop、HBASE、Redis集群、es、kafka等
-
Consistency
一致性。某个节点通过写操作改变一个值后,其他节点的读操作可以获取到改变后的值称为一致性。
eg.
client向G1发起一个写操作,将其中的值改为v1,G1修改成功后,client再向G1发起读操作得到v1而不是v0,这就是一致性
但如果用户client是向G2发起读操作,得到的值依然是v0,这样并不满足一致性
所以需要在client向G1发送写操作修改数据的请求时,还需要G1再向G2发送消息,要求G2也将数据改为v1即可
一致性有三种情况:
强一致性 —— 更新数据后,并发访问情况下后续读操作可以立即感知该更新
弱一致性 —— 更新数据后,部分或者全部节点都感知不到该更新,也就不作出更新
最终一致性 —— 更新数据后,其他节点也许并不会马上更新,但最终所有节点都会在一段时间后全部更新 -
Availability
可用性。研究的是服务器是否会给响应,任何一个没有发生故障的节点必须在有限的时间内返回合理的结果才能满足可用性的要求。
-
Partition Tolerance
分区容错性。研究的是多个分区实现数据的备份机制。当部分节点宕机或者无法与其它节点通信时,各分区间还可保持分布式系统的功能称为分区容错性。一般来说,分区容错无法避免,因为网络问题出现的不稳定经常出现,因此可以认为 CAP 的 P 总是存在的。即永远可能存在分区容错这个问题
Kafka满足的是CAP当中的CA,并使用ISR尽量避免Partition Tolerance