COPS是保序系统的集群(Clusters of Order Preserving System)的简称。在了解COPS之前,最好首先了解一下分布式系统CAC算法,从CAP-->CAC-->COPS是分布式系统的确保高性能低延迟高可扩展性的前提下追求高一致性直至事务机制的发展路径。

  COPS系统能够提供因果+一致性causal+ consistency,设计为支持复杂的在线应用,这些应用托管在少量的大规模数据中心,每个应用都是有前端服务器(COPS客户端)以及后端key-value数据存储,COPS在本地数据中心以线性化方式执行所有的put写操作和get读操作,然后会跨数据中心以因果一致性的顺序在后台进行复制。

  通过COPS我们能够获得ALPS:Availability, Low-Latency,Partition-tolerance, 和 Scalability.

  可用性 Availability: 所有操作读能成功,没有会无限期堵塞或返回一个显示数据不可用的错误。

  低延迟Low-latency: 目标响应时间在毫秒级别。

  分区容错Partition tolerance: 数据存储能够在网络分区的情况下持续操作。

  可扩展性Scalability: 数据存储能够线性水平扩展。

  按照CAP定理,这种ALPS系统必然会牺牲强一致性,比如linearizability线性一致性,但是我们还是能够在此约束下寻找到最强的一致性,也就是因果一致性。

  下面看看什么是因果一致性。我们假设一个key-value数据存储,有两个基本操作: put(key,val) 和 get(key)=val. 这个类似于在单机的共享内存系统中的读操作和写操作(可参考:Go语言Goroutine与Channel内存模型)。

  我们约定遵循下面三个规则表示潜在一致性,用符号表达 ->:

  在同一执行线程:. 如果a 和 b 是一个执行线程中的两个操作,如果操作a发生在操作b之前,那么a ->b;

  不同线程Gets From. 如果 a是一个put放入操作,且b是一个获得操作,能返回被a放入的写操作结果值,那么a->b;

  传递性Transitivity. 对于操作a, b, 和 c, if a -> b 且 b -> c, 那么 a -> c.

  这些规则在同一个线程内的操作之间以及在与数据存储交互的不同线程的操作之间创建了潜在的因果关系,这个模型,并不允许线程直接通讯,而是通过数据存储进行通讯。

  下面我们使用这个因果规则来看看具体分布式系统的情况,如下图:

  上图模拟了三个规则,在同一执行线程规则是get(y)=2 -> put(x,4)(图中的client 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不在b之前发生,b也不在a之前发生,那么a 和b是并发的,a和b是两个不相关的操作,那么它们在分布式系统中复制就不必遵循任何顺序了,这样就避免了在它们之间使用因果这种串行化方式。

  但是,如果a和b进行的是使用相同key值的put写操作,那么就发生冲突了。比如a操作是put(x,1),b操作是put(x,2),那么一个复制节点就永远返回x值为1;另外一个返回x值为2;还有一种意外情况发生,两个人使用同样的用户名登录,同时将商品放入他们的购物车,那么与用户帐户一一对应的购物车该选择哪个商品放入呢?

  解决这种冲突是采取基于 Lamport clock的 last-writer-win策略:

  初始存储节点使用一个Lamport时间错为每次更新分配唯一的版本号,节点将版本号作为其高位字节,低位字节保存的是节点标识,. Lamport时间戳允许COPS将每个key的所有写操作维护全局的顺序。这个顺序暗含了实现last-writer-win的收敛冲突策略 (convergent conflict handling policy)。

分布式系统因果一致性与COPS算法相关推荐

  1. 分布式系统中一致性哈希算法-简介

    分布式系统中一致性哈希算法 业务场景 近年来B2C.O2O等商业概念的提出和移动端的发展,使得分布式系统流行了起来.分布式系统相对于单系统,解决了流量大.系统高可用和高容错等问题.功能强大也意味着实现 ...

  2. 分布式系统中一致性哈希算法

    1业务场景 近年来B2C.O2O等商业概念的提出和移动端的发展,使得分布式系统流行了起来.分布式系统相对于单系统,解决了流量大.系统高可用和高容错等问题.功能强大也意味着实现起来需要更多技术的支持.例 ...

  3. 一致性哈希算法及其在分布式系统中的应用

    摘要 本文将会从实际应用场景出发,介绍一致性哈希算法(Consistent Hashing)及其在分布式系统中的应用.首先本文会描述一个在日常开发中经常会遇到的问题场景,借此介绍一致性哈希算法以及这个 ...

  4. 算法高级(24)-一致性哈希算法在分布式系统中的使用场景

    本文将会从实际应用场景出发,介绍一致性哈希算法(Consistent Hashing)及其在分布式系统中的应用. 一.一致性Hash算法背景 一致性哈希算法在1997年由麻省理工学院的Karger等人 ...

  5. 分布式系统:一致性hash算法 在分布式系统中的应用

    前段时间在了解分布式,发现firefoxbug在博客中写的这篇<一致性hash在分布式系统中的应用>对这个问题说明得比较清晰易懂,本文主要是自己的理解和实践. 在后端一般会遇到这样的场景: ...

  6. redis实现轮询算法_白话分布式系统中的一致性哈希算法

    本文首发于:白话分布式系统中的一致性哈希算法 微信公众号:后端技术指南针 持续输出干货 欢迎关注! 通过本文将了解到以下内容:分布式系统的概念和作用 分布式系统常用负责均衡策略 普通哈希取模策略优缺点 ...

  7. 一致性哈希算法原理及其在分布式系统中的应用

    本文将会从实际应用场景出发,介绍一致性哈希算法(Consistent Hashing)及其在分布式系统中的应用.首先本文会描述一个在日常开发中经常会遇到的问题场景,借此介绍一致性哈希算法以及这个算法如 ...

  8. 「分布式专题」分布式系统中一致性hash算法

    近年来B2C.O2O等商业概念的提出和移动端的发展,使得分布式系统流行了起来.分布式系统相对于单系统,解决了流量大.系统高可用和高容错等问题.功能强大也意味着实现起来需要更多技术的支持.例如系统访问层 ...

  9. 一致性哈希算法在分布式系统中的应用

    原理非常简单,但是非常重要,能够很好的帮助你去理解分布式系统中负载均衡的工作原理! 一致性哈希算法使用的数据结构是TreeMap,TreeMap本身提供了一个tailMap(K fromKey)方法, ...

最新文章

  1. python桌面翻译_Python实现桌面翻译工具【新手必学】
  2. webservice 心得
  3. silverlight 通过WCF与LinQ对数据库进行操作1
  4. linux开机自动联网设置
  5. Windows 命令模式下删除驱动
  6. 微软发布云端计算机实验室服务 可以让用户存取虚拟机
  7. SPSS24.0输了授权码还不能用怎么破?
  8. 中国AI专利申请数超美国近2.5倍
  9. miui 谷歌框架_小米1MIUI开发版可用的google服务框架
  10. win10硬盘锁怎么解除_Win10磁盘被写保护怎么解除?
  11. PS笔记:调色之通道混合器
  12. 攻防演练场景中的加密流量检测技术
  13. react CSS实现箭头图标
  14. php会员到期怎么判断,织梦用php判断检测会员是否登录并返回会员相关信息
  15. c语言输入1到12月份,C语言高手请进下面是一个日历表,运行结果中能不能把1~12月份改 爱问知识人...
  16. 互联网金融IT解决方案和服务供应商
  17. Android手机在4G网络环境下IP的识别
  18. 浏览器开发者工具菜鸡相谈
  19. 1、Anaconda安装TensorFlow(一)
  20. docker alpine包管理工具 apk

热门文章

  1. NumPy 的 nan 如何理解?
  2. Animate.css动画库的源码分析(大部分都是CSS3.0动画的使用)
  3. CMake时候出错排查
  4. 蓝桥杯嵌入式第八届省赛真题
  5. Android——实现无障碍
  6. System Verilog学习笔记—虚接口(virtual interface)
  7. 超好看的UI界面智能看板源码
  8. AndroidSerialPort:安卓串口通信库
  9. 博弈论Python仿真(一)
  10. 加油吧!数字化转型@超融合托起全能型混合游戏云