分布式系统的CAP原则
(编写不易,转载请注明:http://shihlei.iteye.com/blog/2411612)
一 概述
分布式系统(多台服务器,通过网络相互协调,组成一个整体对外提供服务的系统)
(1)CAP原则:任何基于网络的数据共享系统,最多只能满足数据一致性、可用性、分区容忍性三要素中的两个要素。
(2)CAP解释:
Consistency(一致性):数据在所有服务器上副本是否一致。
Availability(可用性): 数据是否在一定时间内更新成功。
Partition tolerance(分区容忍性):
分区:数据只存在于部分服务器。
分区容器性:数据保存在一个分区里,存在故障(网络慢,处理慢,或网络不可用),造成分区数据对于某些服务不可用,是否可以忍受。
二 CAP原则解释
(1)解释:
1)满足CA: 数据写入多个副本,一定写入成功,则要求不会产生故障造成分区(其实P一定保证不了,但是P的概率比较低)
2)满足CP: (强一致)所有副本要不写入成功,则视为处理成功,否则视为失败(出错几率增加,可用性下降)
3)满足AP: (弱一致)所有副本部分写入成功,则视为处理成功(数据在各个副本不一致,一致性下降)
(2)实践:
1)架构需要根据业务类型进行取舍,不要耗费精力设计同时满足CAP的分布式系统。
2)分布是系统,分区产生的概率小,但具有必然性,因此需要在可用性,一致性上进行取舍。目前大多数系统业务情况一般妥协一致性,换来高可用。
3)为解决强一致性造成可用性降低的问题,目前妥协的策略是BASE原则提出的最终一致性。
三 BASE原则
(1)原则:
基本可用(Basically Available)
软状态(Soft state)
最终一致(Eventually consistent)
(2)解释:
部分副本写入成功,视为成功,通过补偿机制,允许在一定时间内,失败的副本能写入成功。
四 关于一致性的冲突处理
(1)场景:
通过多台服务器修改相同的数据,要保证在所有副本服务器上按照相同的顺序执行修改,这样在所有副本上的最终一致性才是可靠的。
例如:
操作1 执行: A 机器 修改 数据记录 A 状态设置为有效
操作2 晚于1 执行 :B 机器 修改 数据记录 A 状态设置为废弃
若没有冲突处理的情况下,有些副本 A 是废弃的(正常想要的结果), 有些副本A 有效的(因为操作1 的同步操作因为故障灯原因,晚于 操作2 到达该副本)。
(2)解决方案:
分布式锁:不允许同时修改。
Paxos:基于消息的一致性算法,保证在副本的上更新顺序是相同的。
基于MQ:消息先写入MQ,由于MQ天然有顺序,所以操作一定可以按照顺序执行。