《从Paxos到ZooKeeper》读书笔记--两阶段提交 2PC

2024-05-28 04:18

本文主要是介绍《从Paxos到ZooKeeper》读书笔记--两阶段提交 2PC,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

两种角色:
参与者(Participant): 被调度的分布式节点
协调者(Coordinator):同意调度所有分布式节点的执行逻辑,并最终决定参与者是否把事务真正进行提交。


一、两个阶段
         2PC就是把事务的提交郭晨共分为两个阶段进行处理
         (1)提交事务请求
                   也成为“投票阶段”, 即各参与者投票标明是否要继续执行接下去的事务提交操作。
                   (i) 协调者向参与者发送事务内容,询问是否可以提交并等待各参与者响应
                   (ii)执行事务:参与者执行操作写日志(包括undo redo等)
                   (iii)各参与者想协调者返回事务询问的响应。 (参与者成功执行事务操作)?Yes:No
         (2)执行事务提交
                   (i)发送提交请求:协调者向所有参与者发送commit请求
                   (ii)参与者收到commit请求,会执行事务提交。提交后,释放事务资源
                   (iii)参与者向协调者返回事务提交结果(Ack消息)
                   (iv)完成事务:协调者收到所有参与者反馈的Ack消息后,完成事务。

二、中断事务
         任何一个参与者向协调者发送了No响应,或者在等待超时之后,协调者无法收到所有参与者对的反馈响应,就会中断事务
         (1)协调者向所有参与者发送回滚请求
         (2)事务回滚:利用undo日志信息,回滚完之后释放执行事务期间占用的资源
         (3)中断事务:协调者收到所有参与者反馈的Ack,完成事务中断


三、缺点
         (1)同步阻塞
                   所有参与该事物操作的逻辑都出于阻塞状态:各个参与者等待其他参与者响应过程中,无法进行其他操作
         (2)单点问题
                   协调者出现问题后果严重。 如果是阶段二出现问题,其他参与者会一直处于锁定事务资源的状态,无法继续完成事务。

         (3)数据不一致
                   如果协调者发送Commit请求,但是发生局部网络异常或者协调者未发完就出现故障,导致最终只有部分参与者收到Commit并提交,于是分布式系统数据不一致
         
         (4)保守。
                   参与者出现故障,协调者无法获得所有参与者的响应信息的时候,参与者只能靠超时机制判断是否需要中断事务。没有完善的容错机制,任意一个节点失败都会导致整个事务的失败。












这篇关于《从Paxos到ZooKeeper》读书笔记--两阶段提交 2PC的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1009522

相关文章

Zookeeper安装和配置说明

一、Zookeeper的搭建方式 Zookeeper安装方式有三种,单机模式和集群模式以及伪集群模式。 ■ 单机模式:Zookeeper只运行在一台服务器上,适合测试环境; ■ 伪集群模式:就是在一台物理机上运行多个Zookeeper 实例; ■ 集群模式:Zookeeper运行于一个集群上,适合生产环境,这个计算机集群被称为一个“集合体”(ensemble) Zookeeper通过复制来实现

作业提交过程之HDFSMapReduce

作业提交全过程详解 (1)作业提交 第1步:Client调用job.waitForCompletion方法,向整个集群提交MapReduce作业。 第2步:Client向RM申请一个作业id。 第3步:RM给Client返回该job资源的提交路径和作业id。 第4步:Client提交jar包、切片信息和配置文件到指定的资源提交路径。 第5步:Client提交完资源后,向RM申请运行MrAp

搭建Kafka+zookeeper集群调度

前言 硬件环境 172.18.0.5        kafkazk1        Kafka+zookeeper                Kafka Broker集群 172.18.0.6        kafkazk2        Kafka+zookeeper                Kafka Broker集群 172.18.0.7        kafkazk3

HTML提交表单给python

python 代码 from flask import Flask, request, render_template, redirect, url_forapp = Flask(__name__)@app.route('/')def form():# 渲染表单页面return render_template('./index.html')@app.route('/submit_form',

Python3 BeautifulSoup爬虫 POJ自动提交

POJ 提交代码采用Base64加密方式 import http.cookiejarimport loggingimport urllib.parseimport urllib.requestimport base64from bs4 import BeautifulSoupfrom submitcode import SubmitCodeclass SubmitPoj():de

ZooKeeper 中的 Curator 框架解析

Apache ZooKeeper 是一个为分布式应用提供一致性服务的软件。它提供了诸如配置管理、分布式同步、组服务等功能。在使用 ZooKeeper 时,Curator 是一个非常流行的客户端库,它简化了 ZooKeeper 的使用,提供了高级的抽象和丰富的工具。本文将详细介绍 Curator 框架,包括它的设计哲学、核心组件以及如何使用 Curator 来简化 ZooKeeper 的操作。 1

查看提交历史 —— Git 学习笔记 11

查看提交历史 查看提交历史 不带任何选项的git log-p选项--stat 选项--pretty=oneline选项--pretty=format选项git log常用选项列表参考资料 在提交了若干更新,又或者克隆了某个项目之后,你也许想回顾下提交历史。 完成这个任务最简单而又有效的 工具是 git log 命令。 接下来的例子会用一个用于演示的 simplegit

form表单提交编码的问题

浏览器在form提交后,会生成一个HTTP的头部信息"content-type",标准规定其形式为Content-type: application/x-www-form-urlencoded; charset=UTF-8        那么我们如果需要修改编码,不使用默认的,那么可以如下这样操作修改编码,来满足需求: hmtl代码:   <meta http-equiv="Conte

js异步提交form表单的解决方案

1.定义异步提交表单的方法 (通用方法) /*** 异步提交form表单* @param options {form:form表单元素,success:执行成功后处理函数}* <span style="color:#ff0000;"><strong>@注意 后台接收参数要解码否则中文会导致乱码 如:URLDecoder.decode(param,"UTF-8")</strong></span>

zookeeper相关面试题

zk的数据同步原理?zk的集群会出现脑裂的问题吗?zk的watch机制实现原理?zk是如何保证一致性的?zk的快速选举leader原理?zk的典型应用场景zk中一个客户端修改了数据之后,其他客户端能够马上获取到最新的数据吗?zk对事物的支持? 1. zk的数据同步原理? zk的数据同步过程中,通过以下三个参数来选择对应的数据同步方式 peerLastZxid:Learner服务器(Follo