欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

分布式系统的CAP原则

程序员文章站 2022-03-22 21:47:18
...
 (编写不易,转载请注明: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天然有顺序,所以操作一定可以按照顺序执行。