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
介绍     Google 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数据复制与一致性的更多相关文章

  1. 一. 数据分片和路由 <<大数据日知录>> 读书笔记

    本章主要讲解大数据下如何做数据分片,所谓分片,即将大量数据分散在不同的节点,同时每个存储节点还要做副本备份. 而一般的抽象分片方法是, 先将数据映射到一个分片空间,这是多对一的关系,即一个数据分片区间 ...

  2. 二. 大数据常用的算法和数据结构 <<大数据日知录>> 读书笔记

    基本上是hash实用的各种举例 布隆过滤器 Bloom Filter 常用来检测某个原色是否是巨量数据集合中的成员,优势是节省空间,不会有漏判(已经存在的数据肯定能够查找到),缺点是有误判(不存在的数 ...

  3. 读&lt;大数据日知录:架构与算法&gt;有感

    前一段时间, 一个老师建议我能够学学 '大数据' 和 '机器学习', 他说这必定是今后的热点, 学会了, 你就是香饽饽.在此之前, 我对大数据, 机器学习并没有非常深的认识, 总觉得它们是那么的缥缈, ...

  4. 《大数据日知录》读书笔记-ch1数据分片与路由

    目前主流大数据存储使用横向扩展(scale out)而非传统数据库纵向扩展(scale up)的方式.因此涉及数据分片.数据路由(routing).数据一致性问题 二级映射关系:key-partiti ...

  5. 《大数据日知录》读书笔记-ch16机器学习:分布式算法

    计算广告:逻辑回归 千次展示收益eCPM(Effective Cost Per Mille) eCPM= CTR * BidPrice 优化算法 训练数据使用:在线学习(online learning ...

  6. 《大数据日知录》读书笔记-ch15机器学习:范型与架构

    机器学习算法特点:迭代运算 损失函数最小化训练过程中,在巨大参数空间中迭代寻找最优解 比如:主题模型.回归.矩阵分解.SVM.深度学习 分布式机器学习的挑战: - 网络通信效率 - 不同节点执行速度不 ...

  7. 《大数据日知录》读书笔记-ch11大规模批处理系统

    MapReduce: 计算模型: 实例1:单词统计 实例2:链接反转 实例3:页面点击统计 系统架构: 在Map阶段还可以执行可选的Combiner操作,类似于Reduce,但是在Mapper sid ...

  8. 《大数据日知录》读书笔记-ch3大数据常用的算法与数据结构

    布隆过滤器(bloom filter,BF): 二进制向量数据结构,时空效率很好,尤其是空间效率极高.作用:检测某个元素在某个巨量集合中存在. 构造: 查询: 不会发生漏判(false negativ ...

  9. [转载] leveldb日知录

    原文: http://www.cnblogs.com/haippy/archive/2011/12/04/2276064.html 对leveldb非常好的一篇学习总结文章 郑重声明:本篇博客是自己学 ...

随机推荐

  1. CodeForces 347A Difference Row (水题)

    题意:给定 n 个数,让你找出一个排列满足每个数相邻作差之和最大,并且要求字典序最小. 析:这个表达式很简单,就是把重新组合一下,就成了x1-xn,那么很简单,x1是最大的,xn是最小的,中间排序就好 ...

  2. schedule-pool模拟并行任务分片

    模拟并行任务分片 代码部分: package com.pool; import com.alibaba.fastjson.JSON; import java.io.BufferedReader; im ...

  3. 编写高质量代码改善C#程序的157个建议——建议117:使用SSL确保通信中的数据安全

    建议117:使用SSL确保通信中的数据安全 SSL(Secure Socket Layer)最初是由NetScape公司设计的,用于Web安全的网络协议.目前它已经广泛应用到各类网络传输通信中了.SS ...

  4. JS 前端构建工具gulpjs的使用介绍及技巧

    gulpjs是一个前端构建工具,与gruntjs相比,gulpjs无需写一大堆繁杂的配置参数,API也非常简单,学习起来很容易,而且gulpjs使用的是nodejs中stream来读取和操作数据,其速 ...

  5. modelsim使用常见问题及解决办法集锦 ②

    二.Error deleting “msim_transcript” Error deleting “msim_transcript”:permission denied. Check the Nat ...

  6. spark介绍4(sparksql)ODBC(Windows)gc

    (ODBC是open database connection开源数据连接)  在Windows控制面板的管理工具里面 GC(Garbage Collection):JAVA/.NET中的垃圾回收器 l ...

  7. ES 遇到的一个坑too_many_clauses: maxClauseCount

    异常: Caused by: org.elasticsearch.common.io.stream.NotSerializableExceptionWrapper: too_many_clauses: ...

  8. 7z文件格式及其源码的分析(五)

    这是7z文件格式及其源码的分析系列的第五篇. 上一篇讲到了7z文件压缩流程.最近太忙了,好久没更新,都快忘了写到哪了.:) 这一篇就说说7z文件的尾头的生成方式吧. 上一篇已经讲了尾header的结构 ...

  9. openedx使用中可能用到的一些资源

    这几天一直在弄openedx,你会发现安装好只是第一步,后面还有很多东西在等着你,那么哪里可以看到较新的资料了,分享几个站点: 1.https://readthedocs.org/projects/e ...

  10. GRPC .netcore

    GRPC是Google发布的一个开源.高性能.通用RPC(Remote Procedure Call)框架.提供跨语言.跨平台支持.以下以一个.NET Core Console项目演示如何使用GRPC ...