a)   两阶段提交协议(2PC)

系统包括两类节点:一个协调者和多个事务参与者,正常的执行过程中,这两个阶段的执行过程如下:

-    请求阶段:协调者通知事务参与者准备提交或者取消事务然后进入表决阶段,事务参与者告知协调者自己的决策:同意(事务参与者本地执行成功)或者取消(事务参与者本地执行失败)

-    提交阶段:协调者基于第一个阶段的投票结果进行决策。当且仅当所有参与者同意提交事务协调者才通知所有参与者提交事务

很明显,2PC存在两种故障:

-    事务参与者发生故障:给每个事务设置一个超时时间,如果某个事务参与者已知不响应,到达超时时间后整个事务失败

-    协调者发生故障:协调者需要将事务相关信息记录到操作日志并同步到备用协调者节点。如果没有备用协调点,那么事务参与者将已知等待下去。

可以知道,2PC是阻塞协议,执行过程需要锁住其他更新,且不能容错,大部分分布式存储系统并不采用该协议。

b)  Paxos协议

为了实现高可用性,主节点往往将数据以操作日志的形式同步到备节点,如果主节点发生故障,备节点会提议自己成为主节点,在大多数系统中只有一个备节点提议,这时Paxos协议执行步骤如下:

-    批准(accept):提议者发送accept消息要求所有其他节点(acceptor)接受这个提议值,acceptor可以选择接受或者拒绝

-    确认(acknowledge):如果超过一半的acceptor接受了这个提议,意味着提议值生效,proposer发送acknowledge消息通知所有的acceptor提议生效

当出现网络或者其他异常的时候,系统中可能存在多个proposer,他们各自发起不同的提议。这里的提议可以是修改操作,也可以是提议自己成为主节点。如果proposer第一次发起的accept请求没有被acceptor中的多数派批准,那么需要执行一次完整的Paxos协议:

-    准备(prepare):proposer首先选择一个提议序号n给其他的acceptor节点发送prepare消息。Acceptor收到prepare消息后如果提议的序号大于他已经回复的所有prepare消息,则acceptor将自己上次接受的提议回复给proposer,并承诺不再回复小于n的提议

-    批准(accept):Proposer收到了acceptor中的多数派对prepare的回复后,就进入批准阶段。如果在之前的prepare阶段acceptor回复了上次接受的提议,那么proposer选择其中序号最大的提议值发给acceptor批准,否则,proposer生成一个新的提议值发给acceptor批准。Acceptor在不违背他之前在prepare阶段承诺的前提下,接受这个请求。

-    确认(acknowledge):如果超过一般的acceptor接受,提议值生效。Proposer发送acknowledge消息通知所有的acceptor提议生效

有两个问题值得考虑,正确性(只有一个提议值生效)和可终止性(最后总有一个提议值生效)。Paxos协议中要求每个生效的提议被acceptor中的多数派接受,并且每个acceptor不会接受两个不同的提议,从而保证正确性。但是Paxos并不能保证严格的可终止性,但是从运行过程看,如果有超过一个acceptor接受了提议没那么proposer很快就会发现,并重新提议其中序号最大的提议值。因此,协议会往“提议值被多数派接受并生效”这一最终目标靠拢。

Paxos协议有两种用法,一是用来实现全局的锁服务或者命名和配置服务;二是将用户数据复制到多个数据中心。

c)   Paxos和2PC的比较

所起作用不同:Paxos用于同一数据分片的多个副本之间的数据一致性,2PC用于保证属于多个数据分片上的操作的原子性。

2PC最大的问题是无法解决协调者宕机问题,通常可以将2PC和Paxos结合起来,使用Paxos选举新的协调者。

欢迎扫描二维码关注微信公众号 深度学习与数学   [每天获取免费的大数据、AI等相关的学习资源、经典和最新的深度学习相关的论文研读,算法和其他互联网技能的学习,概率论、线性代数等高等数学知识的回顾]

分布式存储系统学习笔记(一)—什么是分布式系统(6)—2PC和Paxos协议相关推荐

  1. 大规模分布式存储系统 - 读书笔记

    文章目录 大规模分布式存储系统(原理解析与架构实战OceanBase) 第1章 概述 1.1 分布式存储概述 1.2 分布式存储分类 第一篇 基础篇 第2章 单机存储系统 2.1 硬件基础 2.1.1 ...

  2. HBase分布式存储系统学习

    简介: hadoop的数据库,根据谷歌的bigtable论文实现的 分布式的可扩展的大数据存储技术 随机访问 实时读写海量数据 存储数'十亿行 百万例'的数据 高性能.高可靠.面向列.可伸缩的分布式存 ...

  3. 分布式文件与分布式存储系统学习总结(持续更新)

    存储系统知识 Write Ahead Log 问题引入 存储系统在运行过程中,每时每刻都在发生数据更新.如对文件数据的CRUD. 对于中心控制节点来说,这些都会涉及到metadata的更新操作. 为了 ...

  4. 大数据存储系统学习笔记(一)

    1. NFS 设计目标:服务器出现故障,可以简单快速地恢复 NFS Server不保持任何状态,每个操作都是无状态的 如果NFS崩了,只用重启,什么额外操作都不用,因为每个操作无状态 NFSv2 对于 ...

  5. torch分布式训练学习笔记

    分布式通讯包 - torch.distributed 基本 初始化 TCP初始化 共享文件系统初始化 环境变量初始化 组 点对点通信 集体功能 torch.distributed提供了一种类似MPI的 ...

  6. spring分布式事务学习笔记(2)

    此文已由作者夏昀授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. Model类如下:package com.xy.model 1 package com.xy.model;2 ...

  7. Nuth | Hadoop完全分布式运行 学习笔记

    原始URL: hdfs://10.66.27.181:9000/user/hadoop/urldir  url.txt -->http://blog.tianya.cn hdfs://10.66 ...

  8. TCP/IP学习笔记(3)----IP,ARP,RARP协议

    把这三个协议放到一起学习是因为这三个协议处于同一层(网络层协议),ARP协议用来找到目标主机的Ethernet网卡Mac地址,IP则承载要发送的消息.数据链路层可以从ARP得到数据的传送信息,而从IP ...

  9. 学习笔记之七_第2层交换和生成树协议(STP)(CCNA知识考点)

    1.交换机的3种功能.地址学习.转发/过滤决定和避免环路是交换机的3种功能. 2.命令show mac address-table.命令show mac address-table将显示LAN交换机上 ...

  10. 【学习笔记】网络层——无分类编址CIDR、ARP协议、DHCP协议和ICMP协议

    文章目录 一. CIDR ① 定义 ② 构成超网 ③ 最长前缀匹配 二. ARP协议 ① 定义 ② 例题 三. DHCP协议 ① 主机如何获取IP ②DHCP协议 四. ICMP协议 ① ICMP差错 ...

最新文章

  1. WordPress podPress插件‘playerID’参数跨站脚本漏洞
  2. 【数据结构与算法】之深入解析“最长有效括号”的求解思路与算法示例
  3. 基于RBGD的mapping
  4. Python3.0 新特性
  5. 26岁宝妈去汤臣倍健面试兼职工作
  6. 2018牛客网暑假ACM多校训练赛(第六场)I Team Rocket 线段树
  7. python整型数据源码分析_大师兄的Python源码学习笔记(三): 整数对象
  8. java 次方_Java入门笔记0/3(基本数据结构)
  9. MCGS保存并显示历史记录
  10. php图片大马加后门,一次对php大马的后门的简单分析
  11. 4x4矩阵键盘扫描c语言程序,技巧:C语言超经典矩阵键盘连接,流程图和扫描程序...
  12. 如何正确安装 Google Picasa 2 中文版?
  13. linux windows拷贝文件,把linux上的文件拷贝到windows下
  14. Paypal Express Checkout介绍独立站一种付款选择
  15. scrapy分布式写入到mysql_scrapy-redis分布式爬虫去重异步写入mysql数据库实例代码...
  16. C:/Inetpub/AdminsScripts的常用语法
  17. E - Ricochet Robots( dfs+hash优化 )
  18. mysql show-warnings_MySQL-show warnings
  19. C语言函数中的3个点 ...有什么作用
  20. Lora、zigbee比较

热门文章

  1. iOS - 数组字典模型根据模型属性key排序
  2. win10总是2分钟就自动睡眠怎么办 win10系统自动休眠bug怎么解决(转)
  3. 20172325 2018-2019-1 蓝墨云班课实验--哈夫曼树的编码
  4. CentOS7安装GNOME可视化界面
  5. Linux特殊符号浅谈
  6. 1.4.5 动态字段
  7. cocos2dx 开发成长之路 004
  8. 【转】三层架构的业务逻辑层存在的意义
  9. C#字符串转Json,Json解析
  10. ElasticSearch出现Cluster state has not been recovered yet, cannot write to the [null] index的解决办法