目录

  • 前言
  • 一、geo-replication
    • 1.1 Spanner
    • 1.2 Memchche
    • 1.3 新的需求
  • 二、预备方案One
  • 三、预备方案Two
  • 四、COPS
  • 五、limitations
  • 总结

前言

主要讲了有一定consistency保证的情况下有很不错性能的DB方案Causal Consistency, 其中notion of dependency一定程度上解决了写在不同servers上异步的特点


一、geo-replication

1.1 Spanner

– 通过Paxos保证强consistency
– Two phase commit
– no one site can --write on its own
– but has read transactions, consistent, fairly fast

1.2 Memchche

– 写操作只能通过primary site完成
– read非常快

1.3 新的需求

– 写操作可以再任何server上进行
– 先满足performance再满足consistency


二、预备方案One

每个server都可以有写操作,然后再同步给其它server
这个属于"eventually consistent" design

特点

  1. clients may see updates in different orders
  2. if no writes for long enough, all clients see same data
    a pretty loose spec, many ways to implement, easy to get good performance
    used in deployed systems, e.g. Dynamo and Cassandra
    but can be tricky for app programmers

Example

  C1 uploads photo, adds reference to public list:C1: put(photo) put(list)C2 reads:C2:                       get(list) get(photo)

这里C2是不一定能看到photo的,因为在C1的put(photo) put(list)两个操作不能保证按照原来的顺序传到其它的每个server

决定哪一个write是最近的这个很难做到,但是要做到eventual consistency是需要让每个server都choose the same value

时间比对是一个解决方案,后面再跟上一个server的unique id保证同一时间的两个writes可以区别开来

不过每个server自己的时钟其实是会有差异,这个差异甚至可能是小时级别的,这样可能会prevents any other update for an hour

改进的时间对比方案
each server implements a “Lamport clock” or “logical clock”

 Tmax = highest v# seen (from self and others)T = max(Tmax + 1, wall-clock time)

if some server has a fast clock, everyone who sees a version from that server will advance their Lamport clock


三、预备方案Two

provide a sync(k, v#) operation
– sync() does not return until every datacenter has at least v# for k
这是一个"eventual plus barriers"方案
但是这会变得slow,因为需要等待其它datacenter

– it’s a straightforward, efficient design
– if you don’t need transactions, the semantics are pretty good
– it makes the photo list example work though requires some thought to get order and sync()s right
– read performance is excellent

四、COPS

– we want to forward puts asynchronously (no sync() or waiting)
– we want each shard to forward puts independently (no central log server)

引入了context的概念,也就是每个写操作都包括其dependenc

Example

get(X)->v2context: Xv2
get(Y)->v4context: Xv2, Yv4
put(Z, -)->v3client sends Xv2, Yv4 to shard server along with new Zcontext: Xv2, Yv4, Zv3

问题

  1. 这种dependency需要cops aware of,也就是有时候回出现dependency missing的情况
  2. ever-growing client contexts
    put(K)->vN sends context, then clears context, replaces with KvN so next put(), e.g. put(L), depends only on KvN
  3. ordered puts/gets aren’t sufficient
    a photo list with an ACL (Access Control List)
    get(ACL), then get(list)
    someone deletes you from ACL, then adds a photo between the two get()s
    通过COPS-GT get_trans() approach 解决

五、limitations

  1. conflicting writes are a serious difficulty
  2. awkward for clients to track causality
  3. limited notion of “transaction”
  4. significant overhead to track, communicate, obey causal dependencies

总结

Causal Consistency处于envetual consistency以及strongly consistent之间,没有太多被业界使用

笔记 MIT6.824 Lecture 17: COPS, Causal Consistency相关推荐

  1. CS269I:Incentives in Computer Science 学习笔记 Lecture 17 评分规则和同辈预测(诚实预报和反馈激励)

    Lecture 17 Scoring Rules and Peer Prediction(Incentivizing Honest Forecasts and Feedback)(评分规则和同辈预测( ...

  2. mit6.824 2022 lab2

    MIT6.824 2022 Raft Raft leader election log persistence log compaction 整体测试 后面发现的问题 参考代码 汇总博客:MIT6.8 ...

  3. MIT6.824环境搭建:wls+vs code

    MIT6.824环境搭建:wls+vs code 背景 尝试学习MIT 6.824分布式系统,他们的实验使用的是go语言,并且不支持window.打算使用wls+vs code搭建开发环境.这里做记录 ...

  4. MIT6.824 lab4B实验记录

    Background 主要是完成一个可以根据group数量,动态调整shard所属的group的分布式kv键值引擎.其中shard->group的配置由shardctrler集群来管理,底层也是 ...

  5. 【原】Coursera—Andrew Ng机器学习—课程笔记 Lecture 17—Large Scale Machine Learning 大规模机器学习...

    Lecture17 Large Scale Machine Learning大规模机器学习 17.1 大型数据集的学习 Learning With Large Datasets 如果有一个低方差的模型 ...

  6. 谷粒商城笔记+踩坑(17)——【认证模块】登录,用户名密码登录+微博社交登录+SpringSession+xxl-sso单点登录

    导航: 谷粒商城笔记+踩坑汇总篇 目录 5. 用户名密码登录 5.1[认证模块]登录业务 5.1.1 模型类,接收用户名密码 5.1.2 feign客户端新增登录功能 5.1.3 LoginContr ...

  7. Web前端教程学习笔记1.2-2022.10.17始

    引言部分: 一.拨云见日(HTML.CSS.切图流程.PC企业站布局.PC游戏站布局) 二.溯本求源(扩展HTML.扩展CSS.HTML5新语法.CSS3新语法.兼容与hack) 三.风生水起(弹性布 ...

  8. 读书笔记-人月神话17

    有多少书,我读过:有多少事,我做过:记录下学习的点点滴滴,每一天. 回顾一下经典,记录一下悟点. 读书笔记-人月神话 - 另外一面

  9. 实习笔记Day9(2022.8.17)

    一.总结 1.今天小组进行了初步分工,我和另一个同学负责 k-means 聚类及其并行优化这一部分 2.在网上找了一份 k-means 聚类算法实现的c代码进行学习,以加深对其的理解 二.学习笔记 1 ...

最新文章

  1. python打开一个文件夹下所有txt文件-python读取一个目录下所有txt里面的内容方法...
  2. python六十五:描述符(__get__, __set__, __delete__)
  3. inspect模块---检查活动对象
  4. jupyter notebook妙用之%time
  5. INV标准报表+INVARAAS.rdf -- ABC分配报表
  6. JavaScript玩转机器学习:张量(Tensors) 和 操作(operations)
  7. 计算机用户组 xp,WindowsXP怎么加入工作组?
  8. spark job stage task概念与区分
  9. 按值传递时 php必须复制值,PHP开发笔试题及答案(一)
  10. jdbc_连接数据库
  11. 重磅!贾扬清明日发布新一代云原生数仓与数据湖产品 | 凌云时刻
  12. leetcode[81]Search in Rotated Sorted Array II
  13. LTE系统调试记录12:接收端画星座图
  14. 用户态协议栈之epoll实现
  15. 国产化替代加速升温,智和信通着力信创技术再迎突破
  16. 【学神】1-15 linux启动及常见故障的排除
  17. Definition of Spline Basis Function
  18. 从零入手体验指纹膜代打卡全过程
  19. Python代码实现图像增强(线性变换、对数变换、幂律变换、分段线性变换、灰度级分层、直方图均衡化、平滑滤波器、锐化滤波器)
  20. mysql增加中文字段_mysql怎么添加字段

热门文章

  1. 中国高校人工智能专业综合排名榜单
  2. 一、mac安装jmeter
  3. S7-2服务器安装solaris 11系统说明书
  4. Intellij IDEA使用Maven搭建spark开发环境(scala)
  5. unity 角度限制_Unity实现角度限制
  6. zip的使用--组合坐标
  7. latex(构建在pdflatex模式下)设置times new roman新罗马字体
  8. 可转债代码交流第二期:利用Python获取集思录数据(改)
  9. 如何使用svn导出项目
  10. python flask实战订餐系统微信小程序-00课程介绍及项目演示