zookeeper先验知识(2PC+paxos)
一、2PC两阶段提交:
在分布式事务中,每个机器节点只能够明确知道自己事务操作的结果,是成功还是失败,而无法获取其他分布式节点的操作结果,因此在事务操作需要跨多个分布式节点时,需要引入一个协调者统一调度所有节点的执行逻辑。

阶段一:提交事务请求
(1)事务询问。协调者向所有的参与者发送事务内容,询问是否可以执行事务提交操作,并开始等待各参与者的响应。
(2)执行事务。各参与者节点执行事务操作,并将Undo和Redo信息记入事务日志中。
(3)各参与者向协调者反馈事务询问的响应。如果参与者成功执行了事务操作,那么久反馈给协调者yes响应,表示事务可以执行;如果参与者没有成功执行事务,那么久反馈给协调者No响应,表示事务不可以执行。
阶段二:执行事务提交
在阶段二中,协调者会根据各参与者的反馈情况,来决定最终是否可以进行事务提交操作,正常情况下,包含以下两种可能。
(1)执行事务提交:假如协调者从所有的参与者获得的反馈都是yes响应,那么就会执行事务提交。
a、发送提交请求。协调者向所有参与者节点发出Commit请求。
b、事务提交。参与者接收到Commit请求后,会正式执行事务提交操作,并在完成提交之后释放在整个事务执行期间占用的事务资源。
c、反馈事务提交结果。参与者在完成事务提交之后,向协调者发送Ack消息。
d、完成事务。协调者接收到所有参与者反馈的Ack消息后,完成事务。
(2)中断事务:假如任何一个参与者向协调者反馈了No响应,或者在等待超时之后,协调者尚无法接收到所有参与者的反馈响应,就会中断事务
a、发送回滚请求。协调者向所有参与者节点发出Rollback请求
b、事务回滚:参与者接收到Rollback请求后,会利用其在阶段一中记录的Undo信息来执行事务回滚操作,并在完成回滚之后释放在整个事务执行期间占用的资源
c、反馈事务回滚结果:参与者在完成事务回滚之后,向协调者发送Ack消息
d、中断事务:协调者接收到所有参与者反馈的Ack消息后,完成事务中断
二阶段提交将一个事务的处理过程分为了投票和执行两个阶段,其核心是对每个事务都采用先尝试后提交的处理方式,因此也可以将二阶段提交看作一个强一致性的算法,下图分别展示了二阶段提交过程中事务提交和事务中断两种场景下的交互流程:


2、两阶段提交的优缺点。
优点:原理简单,实现方便。
缺点:同步阻塞、单点问题、脑裂、太过保守。
二、paxos
paxos算法解决的问题是,如何在一个可能发生宕机或者网络异常的分布式系统中,快速且正确的在集群内部对某个数据的值达成一致。
问题:假设有一组可以提出提案的进程集合,对于一致性的算法需要满足:被提出的提案只能有一个题案产生;假设一个提案被选定后,进程可以获取被选定的提案信息。
组成:Acceptor、Proposer、Leaner。
(1)生成提案
a、Proposer选择一个新的提案编号Mn,然后向某个Acceptor集合的成员发出请求,要求该集合中的Acceptor做出如下回应。
向Proposer承诺,保证不再批准比任何编号小于Mn的提案。
如果Acceptor已经批准过任何提案,那么其就向Proposer反馈当前该Acceptor已经批准的编号小于,但为最大编号的那个提案值。
我们将该请求成为编号为Mn的提案的prepare请求。
b、如果Proposer收到了来自半数以上的Acceptor的响应结果,那么它就可以产生编号为Mn,值为Vn的提案,这里的Vn是所有响应中编号最大的提案的Value值。
如果半数以上的Acceptor没有批准过任何提案,即响应中不包含任何的提案,那么此时Vn的值可以由Proposer任意指定。
(2)批准提案
一个Acceptor可能收到来自Proposer的两种请求,分别是prepare请求和Accept请求,对这两类请求的响应条件如下:
prepare请求:Acceptor可以在任何时候响应一个prepare请求。
Accept请求:在不违背Accept现有承诺的前提下,可以任意响应Accept请求。
总之,一个acceptor只要尚未响应过任何编号大于Mn的prepare请求,那么它就可以接受这个编号为Mn的提议。
参考博客:https://blog.csdn.net/qq_40378034/article/details/99681137
https://www.cnblogs.com/Leo_wl/p/6002110.html
zookeeper先验知识(2PC+paxos)的更多相关文章
- zookeeper 入门知识
作为开启分布式架构的基石,除了必会还有的选么 自己的一些理解,有错误的话请一定要给予指正! 一.是什么? 分布式数据一致性的解决方案. 二.有什么用 数据的发布/订阅(配置中心) . 负载均衡(du ...
- zookeeper入门知识
ZooKeeper 是什么? ZooKeeper 顾名思义 动物园管理员,他是拿来管大象(Hadoop) . 蜜蜂(Hive) .小猪(Pig) 的管理员, Apache Hbase和 Apache ...
- ZooKeeper是以Fast Paxos算法为基础的
ZooKeeper是以Fast Paxos算法为基础的,Paxos 算法存在活锁的问题,即当有多个proposer交错提交时,有可能互相排斥导致没有一个proposer能提交成功,而Fast Paxo ...
- LDA中的先验知识
LDA涉及到的先验知识有:二项分布.Gamma函数.Beta分布.多项分布.Dirichlet分布.马尔科夫链.MCMC.Gibbs Sampling.EM算法等. 二项分布 二项分布是N重伯努利分布 ...
- Zookeeper相关知识
一.Zookeeper是什么? Zookeeper 分布式服务框架是 Apache Hadoop 的一个子项目,它主要是用来解决分布式应用中经常遇到的一些数据管理问题,如:统一命名服务.状态同步服务. ...
- Zookeeper概念学习系列之paxos协议
不多说,直接上干货! 前言 一种最终一致的算法,paxos算法. paxos算法是由大牛lamport发明的,关于paxos算法有很多趣事.比如lamport论文最初由故事描述来引入算法,以至于那班习 ...
- ZooKeeper理论知识
前言 相信大家对 ZooKeeper 应该不算陌生.但是你真的了解 ZooKeeper 是个什么东西吗?如果别人/面试官让你给他讲讲 ZooKeeper 是个什么东西,你能回答到什么地步呢? 我本人曾 ...
- Zookeeper学习之:paxos算法
paxos算法的重要性众所周知,它给如今的分布式一致性提供了迄今为止最好的解决方案.无论是Lamport自己的论文描述,还是网上的诸多资料,对paxos的描述都是及其简洁的,给人的感觉是paxos看似 ...
- Zookeeper基本知识
Zookeeper的Session: (1)客户端和server间采用长连接 (2)连接建立后,server产生session ID(64位)返还给客户端 (3)客户端定期发送ping包来检查和保持和 ...
随机推荐
- MySQL权限管理常用命令
1.进入mysql命令行. (1)SSH连接:mysql -u root -p输入root密码 (2)Navicat for MySQL中:右击连接,选择“命令列界面..” 2.mysql环境操作 ( ...
- 2019秋季PAT甲级_C++题解
2019 秋季 PAT (Advanced Level) C++题解 考试拿到了满分但受考场状态和知识水平所限可能方法不够简洁,此处保留记录,仍需多加学习.备考总结(笔记目录)在这里 7-1 Fore ...
- logrus 剖析之滚动日志
在实际开发过程中,为了节省磁盘,日志需要按照时间或者大小维度进行切割分成多分,归档过期的日志,删除久远的日志.这个就是在日常开发中经常遇见的日志滚动(log rotation) 那么在 logrus ...
- 方法1:使用Jenkins构建Docker镜像 --SpringCloud
前提意义: SpringCloud微服务里包含多个文件夹,拉取仓库的所有代码,然后过根据选项参数使用maven编译打包指定目录的jar,然后再根据这个目录的Dockerfile文件制作Docker镜像 ...
- MVC模式和Maven项目构建
1. 尽管Servlet + JSP可以完成全部的开发工作,但是代码耦合度高.可读性差.重用性不好,维护.优化也不方便.所以才有了MVC. MVC是当前WEB开发的主流模式,核心是使用Strut ...
- 易百教程人工智能python修正-人工智能监督学习(回归)
回归是最重要的统计和机器学习工具之一. 我们认为机器学习的旅程从回归开始并不是错的. 它可以被定义为使我们能够根据数据做出决定的参数化技术,或者换言之,允许通过学习输入和输出变量之间的关系来基于数据做 ...
- Java 之 Servlet 体系结构
Servlet 的体系结构 体系结构示意图: 1.Servlet 接口 如果直接实现这个接口,需要重写里面所有的方法,但是只需要使用 service() 方法,其他的不常用. 2.GenericSer ...
- Win10同时安装office2016和visio2016说明
前言 无论是先安装office2016还是visio2016,均不能成功. 而office2016和visio2016的镜像文件是一样的,只是名称不一样,只需下载其一即可. 具体参考链接 https: ...
- 如何在SAP UI5应用里添加使用摄像头拍照的功能
昨天Jerry的文章 纯JavaScript实现的调用设备摄像头并拍照的功能 介绍了纯JavaScript借助WebRTC API来开发支持调用设备的摄像头拍照的web应用.而我同事遇到的实际情况是, ...
- mysql基础知识整理(一)
一.数据库基本操作 登录: 开启数据库服务,在cmd中输入指令 mysql -u用户名 -p密码 3退出: 在cmd中输入exit/quit;启动服务: net start 服务名 停止服务:net ...