《大数据日知录》读书笔记-ch2数据复制与一致性
CAP理论:Consistency,Availability,Partition tolerance

对于一个分布式数据系统,CAP三要素不可兼得,至多实现其二。要么AP,要么CP,不存在CAP。分布式系统往往要求必须满足P。

传统关系数据库选择CA,NoSQL更关注AP。
CAP Reloaded:

关系数据库ACID原则:Atomicity,Consistency,Isolation,Durability;更强调数据一致性
NoSQL系统BASE原则:Basically Available,Soft state,Eventual consistency;更强调数据可用性
幂等性(Idempotent):

一致性模型分类:



副本更新策略:
延时和一致性做权衡
策略1-同时更新:
A 同一时刻的两个写请求,无法保证各副本操作顺序一致
B 通过某种一致性协议确定执行顺序
策略2-主从更新:
一个主副本(master replica),多个从副本(slave replica)。写主副本,主副本转发写给从副本,主副本决定写顺序。
A 同步方式:主副本等待所有从副本写完,视作操作完成。请求延时大
B 异步方式:主副本通知从副本写之前视作完成。应对主副本未通知前崩溃的情形:指定存储记录此次写操作(比如log文件)
1.读请求都转发给主副本:代价是高延时。eg:Chubby
2.所有副本可读:代价是弱一致。eg:PNUTS,Zookeeper
C 同异步混合:主副本同步写部分从副本,视作完成,异步写其他从副本
1.读的数据必须来自同步写的节点:强一致,高延迟
2.同1相反
策略3-任意节点更新:
A 同步通知:强一致,高延时
B 异步通知:弱一致,低延时
一致性协议:
两阶段提交(two-phrase commit,2PC)协议:
解决分布式事务问题:实现ACID中原子性(Atomicity)。eg:Raft一致性协议用其保证信息更新原子性。


存在3个阻塞态:协调者的WAIT态,参与者的INIT态、READY态
解决阻塞问题:
1 超时判断:协调者WAIT态若超时发Global-abort,参与者INIT态超时发Vote-abort
2 参与者互询:参与者READY态超时不能abort事务,因为不确定协调者下发表决信息,所以需要互询。
参与者P问参与者Q:
if Q=COMMIT then P:=COMMIT
if Q=ABORT then P:=ABORT
if Q=INIT then P:=ABORT
if Q=READY then P问其他参与者;最坏情形是其他参与者也都出于READY态,即长时阻塞(还好较少发生)
解决长时阻塞:协调者和参与者将自身状态写入本地log,崩溃重启根据log恢复。
向量时钟(vector clock)协议:
将时间戳和事件绑定进而判定事件因果依赖关系。
规则:

判断因果关系:

例子:


Dynamo使用向量时钟管理数据版本。

如有数据一致性冲突经向量时钟无法判定,则交给客户端(应用端)判定。
RWN协议:


R或W越大延迟越高。
可根据实际情况配置R和W的数值。
必须结合向量时钟配合达到强一致性。
Paxos协议:
1. 副本状态机模型(replicated state machines)
典型实现:Log副本方式

一致性协议作用是保证各个Log副本数据的一致性:一致性模块(consensus module)

2. Paxos基本概念




3. Paxos协议机制



学习者获取倡议:


Raft协议:
目标:可理解性,实现实际系统的确定性

基本概念


1. 领导者选举


2. Log复制

(注:项目即item)


3. 安全性


| Zookeeper | Raft | Chubby | PNUTS | Dynamo | Cassandra | Riak | |
| 介绍 | Yahoo | Amazon,NoSQL | NoSQL | 模仿Dynamo | |||
| 操作 | idempotent | idempotent | |||||
| 副本更新 | master-slave read | master-slave async: read master | master-slave async: read all | master-slave sync+async | master-slave sync+async | master-slave sync+async | |
| exception: random | exception: random | exception: random | |||||
| 一致性协议 | vector clock+RWN |
《大数据日知录》读书笔记-ch2数据复制与一致性的更多相关文章
- 一. 数据分片和路由 <<大数据日知录>> 读书笔记
本章主要讲解大数据下如何做数据分片,所谓分片,即将大量数据分散在不同的节点,同时每个存储节点还要做副本备份. 而一般的抽象分片方法是, 先将数据映射到一个分片空间,这是多对一的关系,即一个数据分片区间 ...
- 二. 大数据常用的算法和数据结构 <<大数据日知录>> 读书笔记
基本上是hash实用的各种举例 布隆过滤器 Bloom Filter 常用来检测某个原色是否是巨量数据集合中的成员,优势是节省空间,不会有漏判(已经存在的数据肯定能够查找到),缺点是有误判(不存在的数 ...
- 读<大数据日知录:架构与算法>有感
前一段时间, 一个老师建议我能够学学 '大数据' 和 '机器学习', 他说这必定是今后的热点, 学会了, 你就是香饽饽.在此之前, 我对大数据, 机器学习并没有非常深的认识, 总觉得它们是那么的缥缈, ...
- 《大数据日知录》读书笔记-ch1数据分片与路由
目前主流大数据存储使用横向扩展(scale out)而非传统数据库纵向扩展(scale up)的方式.因此涉及数据分片.数据路由(routing).数据一致性问题 二级映射关系:key-partiti ...
- 《大数据日知录》读书笔记-ch16机器学习:分布式算法
计算广告:逻辑回归 千次展示收益eCPM(Effective Cost Per Mille) eCPM= CTR * BidPrice 优化算法 训练数据使用:在线学习(online learning ...
- 《大数据日知录》读书笔记-ch15机器学习:范型与架构
机器学习算法特点:迭代运算 损失函数最小化训练过程中,在巨大参数空间中迭代寻找最优解 比如:主题模型.回归.矩阵分解.SVM.深度学习 分布式机器学习的挑战: - 网络通信效率 - 不同节点执行速度不 ...
- 《大数据日知录》读书笔记-ch11大规模批处理系统
MapReduce: 计算模型: 实例1:单词统计 实例2:链接反转 实例3:页面点击统计 系统架构: 在Map阶段还可以执行可选的Combiner操作,类似于Reduce,但是在Mapper sid ...
- 《大数据日知录》读书笔记-ch3大数据常用的算法与数据结构
布隆过滤器(bloom filter,BF): 二进制向量数据结构,时空效率很好,尤其是空间效率极高.作用:检测某个元素在某个巨量集合中存在. 构造: 查询: 不会发生漏判(false negativ ...
- [转载] leveldb日知录
原文: http://www.cnblogs.com/haippy/archive/2011/12/04/2276064.html 对leveldb非常好的一篇学习总结文章 郑重声明:本篇博客是自己学 ...
随机推荐
- 51Nod 1554 欧姆诺姆和项链 (KMP)
题意:中文题. 析:首先要使用KMP的失配函数 f ,对于长度为 i 的串,如果存在循环节那么 i % (i-f[i]) == 0,循环节的长度就是 i - f[i] ,当然次数就是 i / (i- ...
- 我的CSS3学习笔记
1.元字符使用: []: 全部可选项 ||:并列 |:多选一 ?: 0个或者一个 *:0个或者多个 {}: 范围 2.CSS3属性选择器: E[attr]:存在attr属性即可: E[attr=val ...
- Java内存模型(转载)
本文章节: 1.JMM简介 2.堆和栈 3.本机内存 4.防止内存泄漏 1.JMM简介 i.内存模型概述 Java平台自动集成了线程以及多处理器技术,这种集成程度比Java以前诞生的计算机语言要厉害很 ...
- [Asp.net Mvc]为js,css静态文件添加版本号
方式一: 思路 string version = ViewBag.Version; @Scripts.RenderFormat("<script type=\"text/ja ...
- C#中数组作为参数传递的问题
原则:尽可能控制对数据的修改,如果可以预测某个数据不会或不应该被改变,就要对其控制,而不要期望使用这个数据的调用者不会改变其值. 如果参数在使用过程中被意外修改,将会带来不可预知的结果,而且这种错误很 ...
- pageadmin建站软如何修改和设置iis站点应用程序池
很多用户第一次安装PageAdmin建站系统时候会出现这个错误,主要原因: 1.首选打开iis站点基本设置,可以看到当前站点对应的应用程序池,如下图: 可以看到当前站点用的程序池名为MyAppPool ...
- Android源码:(一) 安卓2.1到4.4操作系统通用的Actionbar实现的tab导航例子。
说一下我在完成这个例子之前的尝试吧 一,修改“actionbarsherlock”的导航例子.我在实现这个例子之前,尝试过“actionbarsherlock”,修改它的一个tab导航的例子,修改成功 ...
- 1.Javascript简介
web前端有三层: HTML:从语义的角度,描述页面的结构 CSS:从审美的角度,描述样式(美化页面) JavaScript:从交互的角度,描述行为(提升用户体验) 历史背景介绍 布兰登 艾奇 199 ...
- [Maven实战-许晓斌]-[第二章]-2.1在Windows上安装maven
来源:<maven实战> 1.检查JAVA_HOME和java -version C:\Users\admin>echo %JAVA_HOME% C:\Users\admin&g ...
- Python编程中 re正则表达式模块 介绍与使用教程
Python编程中 re正则表达式模块 介绍与使用教程 一.前言: 这篇文章是因为昨天写了一篇 shell script 的文章,在文章中俺大量调用多媒体素材与网址引用.这样就会有一个问题就是:随着俺 ...