分布式系统的CAP原则

dananhai 2018-02-26

 (编写不易,转载请注明: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天然有顺序,所以操作一定可以按照顺序执行。

相关推荐