分布式一致性理解
2019-01-03 本文已影响0人
凯文不上班
1.两个维度看方案:一致性、可用性
强一致性、强可用性 --- cap理论告诉我们不可能(p是必备,ca二选一)
强一致性、很差的可用性 --- 主备同步/停机更新/两阶段提交 (一旦机器故障或网络分区系统不可用)
强一致性、较高的可用性 --- paxos/raft/zab 容忍部分节点故障、有问题
最终一致性、强可用性 --- 消息/tcc/saga
2.读取配置方式
一致不一致是针对外部来说的,内部不一致没关系,只要保证从外部使用方的角度统一读取信息是一致的就ok
3.CAP理论中的P到底指的是什么?
摘自知乎里的一个回答,我觉得很好理解
C:集群中所有机器状态是一致的。A:客户端访问集群中任意一个节点,总能得到"处理成功"的结果。
假设有五个节点:n1~n5 ,出现网络分区被分成两组:[n1n2]和[n3n5],
那么当n1出来客户端请求时(为了处理这种情况,也就是说"容忍网络分区",即支持 P)
1:如果要保证C(一致性),那么它需要把消息复制到所有节点,但是网络分区导致无法成功复制到n3~n5,
所以它只能返回"处理失败"的结果给客户端。(这时系统就处于不可用状态,即丧失了A)
2:如果要保证可用性A,那么n1就只能把消息复制到n2,而不用复制到n3~n5(或者无视复制失败/超时),
但n3同时也可能在处理客户端请求(譬如对同一个值进行修改),n3也为了保证A而做了同样的处理。
那么 [n1n2]和[n3n5]的状态就不一致了,于是就丧失了 C。
那么如果不支持P(也就是不容忍网络分区),也就是说(很乐观的认为)假设系统不会出现网络分区~