Vector Clock理解
背景
近期在重读“Dynamo: Amazon’s Highly Available Key-value Store”(经典好文,推荐!)。文章4.4 中聊到了Data Version
为了提高可用性,Dynamo同意“更新”操作异步的传播到其他副本,当出现多个写事件并发运行时,可能会导致系统中出现多个版本号的对象。
因为我们无法保证分布式系统中的多个结点的物理时钟是完美同步的,所以通过物理时钟来确定事件的时序是不靠谱的,但我们能够通过基于事件的逻辑时钟来构建部分有序的事件时序集合
Dynamo通过Vector Clock来构建同一对象多个事件的部分有序的时序集合
须要特别说明的是,Vector Clock能解决分布式系统多版本号合并的问题,可是对于确实发生冲突的版本号,它无法合并,而须要用户自己去做合并
另外,lamport大神写的“Time Clocks and the Ordering of Events in a Distributed System”能够觉得是Vector Clock的理论基础。有兴趣同学能够看看
简述
Vector Clock是一个向量。向量的每一个分量为(node,count),node即为分布式系统的节点,count为相应节点上的版本号,在处理事件前count会对将该值递增,当它须要和其他节点进行同步的时候也会把count带上。
通过比較这些向量的大小。来确定事件发生的顺序。
假如一个向量的全部分享量的count值都小于或等于还有一个向量。能够觉得后者并前者更"新"
否则。存在冲突
演示样例
1.“用户A在N1节点上设置x=100” ------------ 节点N1生成向量<(N1,1)>
2.“用户A在N1节点上设置x=200” ------------ 节点N1生成向量<(N1,2)>
3.“N1将x=200传播到N2” ----------- 节点N2生成向量<(N1,2)>
4.“N1将x=200传播到N3” ----------- 节点N3生成向量<(N1,2)>
5.“用户A在N2节点上设置x=300” ------------ 节点N2生成向量<(N1,2), (N2,1)>
6.“用户B在N3节点上设置x=400” ----------- 节点N3生成向量<(N1,2), (N3,1)>
此时各个节点的向量
N1: <(N1,2)>
N2:<(N1,2), (N2,1)>
N3:<(N1,2), (N3,1)>
插入一个知识点Quorum NRW模型:
N: 复制的节点数量
R: 成功读操作的最小节点数
W: 成功写操作的最小节点数
仅仅需W + R > N。就能够保证强一致性。
此处我们的N=3
当须要高可写的系统时,能够设置W=1 R=3
当须要高可读的系统时。能够设置W=3 R=1
如果此处R=3 W=1
7.有个读x的事件
client其拿到N1,N2,N3上的向量,通过比較可知,N1上的是旧数据,N2/N3版本号存在冲突,此时须要用户自己去解决冲突
转载于:https://www.cnblogs.com/bhlsheji/p/5092591.html
Vector Clock理解相关推荐
- Why Vector Clock are Easy or Hard?
通过实际例子来阐述vector clock其实是容易理解的, easy 同样通过实际例子来描述在使用vector clock时会遇到哪些难以解决的问题, hard Why Vector Clocks ...
- Distributed System: Lamport clock vs Vector clock | 分布式系统:Lamport clock 和 Vector clock 详解
Ref: Toutube Distributed Systems lecture series https://www.youtube.com/watch?v=x-D8iFU1d-o&list ...
- 向量时钟Vector Clock in Riak
Riak 是以 Erlang 编写的一个高度可扩展的分布式数据存储,Riak的实现是基于Amazon的Dynamo论文,Riak的设计目标之一就是高可用.Riak支持多节点构建的系统,每次读写请求不需 ...
- 词向量word to vector通俗理解
word2vec 概述 之前使用one-hot编码来表示词向量,比如猫为(1,0,0),狗为(0,1,0),这种稀疏编码,维度大,词与词之间是孤立的,无法表示词与词之间的语义信息! word2vec就 ...
- Redis集群方案及实现 - yfk的专栏 - 博客频道 - CSDN.NET
Redis集群方案及实现 - yfk的专栏 - 博客频道 - CSDN.NET yfk的专栏 学习&记录&分享 目录视图 摘要视图 订阅 [公告]博客系统优化升级 U ...
- 对Steering Vector的一点理解
对Beamforming中Steering Vector的理解 在学习波束成形的过程中,对于Steering Vector一直没有一个明确的概念,今天进行一些总结,供以后参考. 首先,我们从matla ...
- C++基本序列式容器 vector (一)
我们以 vector.deque 和 list 为例介绍基本序列式容器,先来看一个关于 vector 容器的例子. #include <iostream> #include <vec ...
- HybridTime - Accessible Global Consistency with High Clock Uncertainty
Amazon's Dynamo [9] and Facebook's Cassandra [13], relax the consistency model,and offer only eventu ...
- STL容器之vector
[1]模板类vector 模板类vector可理解为广义数组.广义数组,即与类型无关的数组,具有与数组相同的所有操作. 那么,你或许要问:既然C++语言本身已提供了一个序列式容器array,为什么还要 ...
最新文章
- Emmet:HTML/CSS代码快速编写规范(转发)
- docker 命令详解(cp篇)
- 外观模式(Facade)
- oracle over函数 去重,oracle over结合row_number分区进行数据去重处理
- SQL Server安全(6/11):执行上下文与代码签名(Execution Context and Code Signing)
- C#调用Power Shell 管理Office365 执行脚本时遇到的问题
- 设计模式学习-每日一记(1.简单工厂模式)
- 求标准体重Java题_Java习题
- pandas小记:pandas索引和选择
- VOC2007数据集解析
- 拼小圈营销群_拼多多拼小圈引流卖货全攻略
- 基于ssl协议和基于openssl工具创建私有CA
- docker build 时出现no space left on device解决方法
- 新世纪大学英语(第二版)综合教程第一册 Unit 2 (中英翻译和重点单词)
- strcpy()、strncpy()函数
- 碳交易计价结算货币:理论、现实与选择
- LC91 Decode Ways
- php 网页内容下载,如何使用PHP下载网页
- Ubuntu虚拟机与物理机磁盘文件共享…
- bootstrap的导航栏在页面刷新后显示选中
热门文章
- webpack.config.js====插件purifycss-webpack,提炼css文件
- [架构]--高并发问题及解决方案
- 《信息系统项目管理师软考辅导——3年真题详解与全真模拟》主要创新点、关注点...
- Linux学习笔记033_10
- 语法错误 : 缺少“;”(在“类型”的前面)的解决方案 转载
- 职场减压妙计:主动降职
- Oracle 序列的创建和使用
- xshell使用xftp传输文件 使用pure-ftpd搭建ftp服务
- 在Cisco交换机上实现隔离访问
- P1726 上白泽慧音