COPS 架构精选:分布式系统因果一致性与COPS算法

关注微信微信官方账号
PHP技术全集
每天精彩的分享都是不间断的
COPS是保序系统簇的简称。在了解COPS之前,最好先了解一下,从cap->:CAC->;COPS是分布式系统的发展路径,在保证高性能、低延迟、高可扩展性的前提下,追求高一致性直到事务机制。
COPS系统可以提供因果性+一致性,原因+一致性,是为了支持复杂的在线应用而设计的。这些应用程序托管在少数大型数据中心,每个应用程序都有一个前端服务器(COPS客户端)和一个后端键值数据存储。COPS在本地数据中心以线性化的方式执行所有放入写操作和获取读操作,然后在后台以因果+一致性的顺序跨数据中心复制。
有了COPS,我们可以获得ALPS:可用性、低延迟、分区容差和可伸缩性。
可用性可用性:所有操作都可以成功读取,不存在会无限期阻塞或返回不可用显示数据的错误。
低延迟:目标响应时间以毫秒为单位。
分区容错分区容错:数据存储可以在网络分区的情况下连续运行。
可扩展性:数据存储可以线性和水平扩展。
根据CAP定理,这个ALPS系统必然会牺牲强一致性,比如线性化线性一致性,但我们仍然可以在这个约束下找到最强的一致性,即因果一致性。
我们来看看什么是因果一致性。让我们假设键值数据存储有两个基本操作:put(key,val)和get(key)=val。这类似于独立共享内存系统中的读操作和写操作(请参考:)。
我们同意遵循以下三条规则来表达潜在的一致性,并用符号来表达->:
在同一执行线程中:。如果a和b是一个执行线程中的两个操作,如果操作a发生在操作b之前,那么a->:b;
不同的线程从。如果a是put操作,b是get操作,可以返回a put的写操作的结果值,那么a->:b;
及物性。对于操作a,B,C,如果a->: B,b->: C,那么a->: c。
这些规则在同一线程内的操作之间以及与数据存储交互的不同线程的操作之间创建潜在的因果关系。该模型不允许线程直接通信,而是通过数据存储进行通信。
让我们用这个因果规则来看看具体的分布式系统,如下图所示:

COPS 架构精选:分布式系统因果一致性与COPS算法


文章图片

【COPS 架构精选:分布式系统因果一致性与COPS算法】上图模拟了三个规则,同一执行线程中的规则是get (y) = 2->: Put(x,4)(客户端2);在图中);而gets from规则是put (y,2)->: Get(y)=2(图中client1和client2中间是垂直的,代表两个不同线程的读写操作);而传递性规则是put (y,2)->: Put(x,4)(由前两个规则导出的因果关系)。甚至有些操作比如put(x,3)也是实时发生的。因为没有其他操作依赖它,所以没有其他读取操作会读取写入的值,在同一个线程内存中也不会有其他操作跟随,所以client3得到的x值是4,而不是3。
因果一致性是指分布式复制环境中get操作获得的值由->有序定义决定。从上图看来,put(y,2)出现在put(x,4)之前,而put(x,4)出现在put(z,5)之前。如果client2看到get(x)=4,然后get(x)= 1,这违反了因果关系。
因果一致性不对并发操作进行排序。如果A在A之前不发生,B and B在A之前不发生,那么A和B是并发的,A和B是两个不相关的操作,所以在分布式系统中复制时不必遵循任何顺序,从而避免了它们之间因果关系的序列化。
但是,如果A和B使用相同的键值执行put写操作,则会发生冲突。例如,如果操作A放(x,1),操作B放(x,2),那么一个复制节点将总是返回x为1;另一个返回x值2;还有一个意想不到的情况。两个人用同一个用户名登录,把商品放进自己的购物车。那么应该把哪些商品一个个放到用户账号对应的购物车里呢?

推荐阅读