当前位置: 首页 > news >正文

Multi Paxos

basic paxos 是用于确定且只能确定一个值,“只确定一个值有什么用?这可解决不了我面临的问题,例如每个用户都要多次保存数据.” 你心中可能有这样的疑问。

原simple paxos论文里有提到一连串个instance of paxos [4] 但没有提出 multi paxos的概念,原simple paxos有提出多leader的方式,目的只是减少 proposer 的数量,为了降低单一paxos过程中的死锁问题,并不是为了提高multi-paxos的效率。 实际上multi paxos是由谷歌提出的[3].  zk和raft也都是multi paxos,且使用了唯一leader的方式,将经典paxos的两次半数过程变成了仅一次半数过程。

simple paxos论文的实现很复杂,虽然有leader,但每次还是basic paxos. 但zk,raft中的实现是对basic paxos又一次创造性优化,各个instances复用了prepare阶段的半数约束(即leader的产生是通过prepare的半数约束产生的). 详细讲解见下文

正常的存储系统其实不断地进行“确定一个值”的过程、再为每个过程编上序号,就能得到具有全序关系(total order)的系列值,进而能应用在数据库副本存储等很多场景。我们把单次“确定一个值”的过程称为实例(instance),它由proposer/acceptor/learner组成,下图说明了A/B/C三机上的实例:

不同序号的实例之间互相不影响,A/B/C三机输入相同、过程实质等同于执行相同序列的状态机(state machine)指令 ,因而将得到一致的结果。

 如何实现?(by phil)

1. 方法一,比较差的.延续basic paxos的思路.

每个分布式存储server接受到client请求后,就提出议案. 有可能别人也在提. 那就各自抢,看谁的议案先被通过. 通过后如果没有新的client请求,就不提案了.其他机器接着提"提案". 这里"提案"就是客户端请求的"命令". 这样命令之间的顺序就确认了.

2. 方案二, 上面那个方案性能太差了.

缺点:

1. 每次请求都有可能互相争抢

2.有些请求明明可以并发的也不能并发了.例如对不同的key修改值.

改进:

增加一个leader,把所有的命令都提交给leader,然后leader再进行提案申请. 如果leader不能排他, 提案仍旧需要进行basic paxos. 而且也无法知道是否操作的是相同的key. 不能并发.

核心问题: leader是否是排他的?

再改进:

做不到leader排他,但是可以将"leader选举结果"作为所有后面提案basic paxos的共同"prepare 部分". 这样及时有一个leader最终变成了假leader,即basic paxos的加锁失败. 问题也不大. 其提案的值也不会被认可.

这就是zk的zab 和 ltcd的raft 使用的方案.

不过他们选举leader的方式不太一致. 并且zk是通过队列保证一致的. raft是通过连续的序号保持一致的.类似 simple paxos里的例子.[1]

note: leader的选举不一定要是paxos完整paxos协议. 不一定严格排他的. 毕竟你认为已经大多数是历史时刻的,有可能会改变.

proposer leader在Multi Paxos中还有助于提升性能,常态下统一由leader发起提议,可节省prepare步骤(leader不用问询acceptor曾接受过的ID最大的提议、只有leader提议也不需要acceptor进行promise)直至发生leader宕机、重新选主。

小结

以上介绍了Paxos的推演过程、如何在Basic Paxos的基础上通过状态机构建Multi Paxos。Paxos协议比较“艰深晦涩”,但多读几遍论文一般能理解其内涵,更难的是如何将Paxos真正应用到工程实践。

微信后台开发同学实现并开源了一套基于Paxos协议的多机状态拷贝类库PhxPaxos,PhxPaxos用于将单机服务扩展到多机,其经过线上系统验证并在一致性保证、性能等方面作了很多考量。

[1] Paxos算法与Zookeeper分析,raft协议,ltcd 8. 与Galera及MySQL Group replication的比较 https://www.cnblogs.com/fei33423/p/7888503.html

[2] 分布式系统理论进阶 - Paxos 和multi paxos 大部分摘抄自这里

[3] Blockchain的鱼和熊掌系列(9)Multi-Paxos协议 http://blog.csdn.net/Canhui_WANG/article/details/54981593

[4]  第三节第二段 we implement a sequence of separate instances of the Paxosconsensus algorithm  https://www.microsoft.com/en-us/research/wp-content/uploads/2016/12/paxos-simple-Copy.pdf

相关文章:

Multi Paxos

basic paxos 是用于确定且只能确定一个值,“只确定一个值有什么用?这可解决不了我面临的问题,例如每个用户都要多次保存数据.” 你心中可能有这样的疑问。 原simple paxos论文里有提到一连串个instance of paxos [4] 但没有提出 multi paxos的概念&…...

Android - dimen适配

一、分辨率对应DPIDPI名称范围值分辨率名称屏幕分辨率density密度(1dp显示多少px)ldpi120QVGA240*3200.75(120dpi/1600.75px)mdpi160(基线)HVGA320*4801(160dpi/1601px)hdpi240WVGA4…...

深度学习网络模型——RepVGG网络详解

深度学习网络模型——RepVGG网络详解0 前言1 RepVGG Block详解2 结构重参数化2.1 融合Conv2d和BN2.2 Conv2dBN融合实验(Pytorch)2.3 将1x1卷积转换成3x3卷积2.4 将BN转换成3x3卷积2.5 多分支融合2.6 结构重参数化实验(Pytorch)3 模型配置论文名称: RepVGG: Making V…...

仓库拣货标签应用案例

使用场景:富士康成都仓库 解决问题:仓库亮灯拣选, 提高作业效率和物料明晰展示仓库亮灯拣选使用场景:京东仓库 解决问题:播种墙分拣,合单拣货完成后按订单播种播种墙分拣使用场景:和尔泰智能料…...

介绍一款HCIA、HCIP、HCIE的刷题软件

华为认证考试分为三个等级,分别为工程师HCIA、高级工程师HCIP、专家HCIE,等级越高,考试难度越大。 本篇带大家详细了解华为数通题库刷题工具的详细操作步骤。 操作须知:本款刷题工具为一款刷题小程序,无需安装即可在线…...

线程池整理汇总

它山之石,可以攻玉。借鉴整理线程池相关文章,以及自身实践。 文章目录1. 线程池概述2. 线程池UML架构3. Executors创建线程的4种方法3.1 newSingleThreadExecutor3.2 newFixedThreadPool3.3 newCachedThreadPool3.4 newScheduledThreadPool小结4. 线程池…...

华为OD机试真题Python实现【最短木板长度】真题+解题思路+代码(20222023)

🔥系列专栏 华为OD机试(Python)真题目录汇总华为OD机试(JAVA)真题目录汇总华为OD机试(C++)真题目录汇总华为OD机试(JavaScript)真题目录汇总文章目录 🔥系列专栏题目输入输出示例一输入输出说明示例二输入输出说明...

VMware安装CentOS7

个人简介:云计算网络运维专业人员,了解运维知识,掌握TCP/IP协议,每天分享网络运维知识与技能。个人爱好: 编程,打篮球,计算机知识个人名言:海不辞水,故能成其大;山不辞石…...

力扣24.两两交换链表中的节点

文章目录力扣24.两两交换链表中的节点题目描述方法1:非递归方法2:递归力扣24.两两交换链表中的节点 题目描述 给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题&…...

AtCoder Regular Contest 137 题解(A~C)

A-Coprime Pair 思路 我们知道两个质数之间并不会相隔太远&#xff0c;于是我们直接用暴力就可以通过这题。 先从大到小枚举答案&#xff0c;并且枚举所有可能的起点&#xff0c;当枚举到的两个值满足条件输出并结束程序即可。 代码 #include <bits/stdc.h> using n…...

【C语言】预处理指令

C语言预处理指令一、什么是预处理指令二、预处理指令特点三、文件包含四、C标准库<stdio.h>一、什么是预处理指令 C语言的源文件&#xff08;.c文件&#xff09;需要经过编译生成可执行程序&#xff0c;编译操作会将源文件转换成目标文件&#xff0c;对于 VC、VS&#x…...

Java基础之多线程JUC全面学习笔记

目录初识多线程多线程的实现方式常见的成员方法线程安全的问题死锁生产者和消费者线程池自定义线程池初识多线程 什么是多线程? 线程 线程是操作系统能够进行运算调度的最小单位。线程被包含在进程之中&#xff0c;是进程中的实际运作单位。 简单理解:应用软件中互相独立&…...

13.CSS文本样式

文本样式 h1 {color: blue; }● 回顾上一节的内容&#xff0c;我们让h1标题的文字变成了蓝色&#xff0c;注意如果html中有多个h1标签&#xff0c;那我们这种写法所有的h1标签都会变成蓝色&#xff0c;除了颜色&#xff0c;本节我们将学习更多的CSS属性 文字大小font-size h…...

西恩科技更新招股书:IPO前大手笔分红“套现”, 赵志安为实控人

2月14日&#xff0c;上海西恩科技股份有限公司&#xff08;下称“西恩科技”&#xff09;更新了招股书&#xff08;申报稿&#xff09;。据贝多财经了解&#xff0c;西恩科技于2022年8月12日递交上市申请材料&#xff0c;准备在创业板上市&#xff0c;此次是西恩科技第二次更新…...

【CentOS】有关时间的设置

目录环境信息date语法信息查看时间设置时间设置日期tzselecttimedatectl语法显示当前及所有时区修改时区hwclock语法读取硬件时钟使用硬件时钟设置系统时间使用系统时间设置硬件时钟如何理解硬件时钟和系统时钟环境信息 CentOS 7 date 语法信息 date --help用法&#xff1a…...

OpenCV制作Mask图像掩码

一、掩膜&#xff08;mask&#xff09; 在有些图像处理的函数中有的参数里面会有mask参数&#xff0c;即此函数支持掩膜操作&#xff0c;首先何为掩膜以及有什么用&#xff0c;如下&#xff1a; 数字图像处理中的掩膜的概念是借鉴于PCB制版的过程&#xff0c;在半导体制造中&am…...

C++STL剖析(九)—— unordered_map和unordered_multimap的概念和使用

文章目录1. unordered_map的介绍和使用&#x1f351; unordered_map的构造&#x1f351; unordered_map的使用&#x1f345; insert&#x1f345; operator[ ]&#x1f345; find&#x1f345; erase&#x1f345; size&#x1f345; empty&#x1f345; clear&#x1f345; sw…...

Android无菜单键,如何触发onCreateOptionsMenu(Menu menu)

文章目录小结问题及解决无法触发onCreateOptionsMenu(Menu menu)修改配置文件解决使用一个按钮来触发其它办法参考小结 现在的Android有三个键&#xff1a; 任务键&#xff0c;Home键&#xff0c;返回键&#xff0c;也就是没有菜单键了&#xff0c;那么如何如何触发onCreateOp…...

“黑洞”竟是外星人的量子计算机?

宇宙中的黑洞可以用作终极量子计算机&#xff0c;我们可以从中探索它们的特征。&#xff08;图片来源&#xff1a;网络&#xff09;我们完全有理由怀疑生命在我们的宇宙中很常见&#xff0c;但是为什么我们从未发现过其他生命存在的迹象&#xff1f;这个问题几乎自现代天文学诞…...

计算机网络入门

一&#xff0c;计算机网络在信息时代中的作用 21世纪的一些重要特征就是数字化&#xff0c;网络化和信息化&#xff0c;它是一个以网络为核心的信息时代。有三类大家很熟悉的网络&#xff0c;即电信网络&#xff0c;有线电视网络和计算机网络。按照最初的服务分工&#xff0c;…...

并发编程进阶:volatile、内存屏障与 CPU 缓存机制详解

知识点回顾 1. 什么是CQRS&#xff1f; CQRS是Command Query Responsibility Segregation的缩写&#xff0c;一般称作命令查询职责分离。从字面意思理解&#xff0c;就是将命令&#xff08;写入&#xff09;和查询&#xff08;读取&#xff09;的责任划分到不同的模型中。 对比…...

3个步骤打造个人AI知识库:AnythingLLM浏览器扩展完全指南

3个步骤打造个人AI知识库&#xff1a;AnythingLLM浏览器扩展完全指南 【免费下载链接】anything-llm 这是一个全栈应用程序&#xff0c;可以将任何文档、资源&#xff08;如网址链接、音频、视频&#xff09;或内容片段转换为上下文&#xff0c;以便任何大语言模型&#xff08;…...

PFC5.03D三轴流固耦合仿真:压力卸除下的网格分析

PFC5.03D三轴泄围压条件下的流固耦合 带网格。在岩石力学的仿真中&#xff0c;PFC5.03D软件提供了一种有效的方式来模拟颗粒的流动和结构稳定性。三轴试验是岩石力学中最常用的测试方法之一&#xff0c;特别是当压力发生卸除时&#xff0c;材料的表现往往最能反映其本质特性。…...

如何用铜钟音乐打造纯粹听歌体验?5个让你告别广告干扰的核心优势

如何用铜钟音乐打造纯粹听歌体验&#xff1f;5个让你告别广告干扰的核心优势 【免费下载链接】tonzhon-music 铜钟 (Tonzhon.com): 免费听歌; 没有直播, 社交, 广告, 干扰; 简洁纯粹, 资源丰富, 体验独特&#xff01;(密码重置功能已回归) 项目地址: https://gitcode.com/Git…...

专注核心创新:用快马AI生成openclaw101开发效率工具链

在开发机械臂控制相关的项目时&#xff0c;我发现很多时间都花在了重复造轮子上。特别是做openclaw101这类机械爪的仿真或实体开发时&#xff0c;每次都要从零开始写轨迹规划、数据滤波这些基础功能。最近尝试用InsCode(快马)平台整理了一套工具链&#xff0c;效率提升非常明显…...

Zotero 7保姆级配置指南:从PC到安卓平板,用坚果云实现文献无缝同步

Zotero 7跨设备文献管理终极方案&#xff1a;Windows与安卓全链路同步实战 作为一名长期与文献打交道的科研工作者&#xff0c;最痛苦的莫过于在实验室电脑上精心整理的参考文献&#xff0c;回到家中平板上却无法查阅。这种割裂感我深有体会——直到发现Zotero 7与坚果云的组合…...

浦语灵笔2.5-7B实战落地:3个行业客户在6个月内完成POC到上线

浦语灵笔2.5-7B实战落地&#xff1a;3个行业客户在6个月内完成POC到上线 1. 项目背景与价值 在当今AI技术快速发展的时代&#xff0c;多模态视觉语言模型正在成为企业智能化转型的重要工具。浦语灵笔2.5-7B作为上海人工智能实验室开发的多模态视觉语言大模型&#xff0c;凭借…...

突破4大硬件限制:老旧Windows设备升级Windows 11的3维优化方案

突破4大硬件限制&#xff1a;老旧Windows设备升级Windows 11的3维优化方案 【免费下载链接】OpenCore-Legacy-Patcher 体验与之前一样的macOS 项目地址: https://gitcode.com/GitHub_Trending/op/OpenCore-Legacy-Patcher 老旧设备升级Windows 11的价值解析 在数字化快…...

深度学习驱动的场景文本检测与识别:技术演进与前沿应用

1. 场景文本检测与识别的技术挑战 想象一下你正用手机拍下路边的餐厅招牌&#xff0c;想立刻知道这家店的招牌菜是什么。这个看似简单的动作背后&#xff0c;其实需要计算机完成两项关键任务&#xff1a;首先从复杂背景中找出文字位置&#xff08;文本检测&#xff09;&#x…...

避坑指南:金融风控建模中最容易被忽略的5个数据陷阱(以贷款违约预测为例)

金融风控建模实战&#xff1a;避开数据处理的五大隐形陷阱 在金融风控领域&#xff0c;数据科学家们常常陷入一个怪圈&#xff1a;模型越调越复杂&#xff0c;但预测效果却停滞不前。我曾见证过一个团队花费三个月优化算法&#xff0c;最终发现问题的根源竟是数据预处理阶段的…...