分布式(5)

news2024/11/16 9:37:31

目录

22.什么是Paxos算法?如何实现?

24.全局唯一ID有哪些实现方案?

25.数据库方式实现方案?有什么缺陷?


22.什么是Paxos算法?如何实现?

Paxos算法是Lamport宗师提出的一种基于消息传递的分布式一致性算法,使其获得2013图灵奖。

三个角色?可以理解为人大代表(Proposer)在人大向其他代表(Acceptors)提案,通过后让老百姓(Learner)落实。

Paxos将系统中的角色分为提议者(Proposer),决策者(Acceptor),和最终决策学习者(Learner):Proposer:提出提案(Proposal)。Proposal信息包括提案编号(Proposal  ID)和提议的值(Value)。

Acceptor:参与决策,回应Proposers的提案。收到Proposal后可以接受提案,弱Proposal获得多数Acceptors的接受,则称该Proposal被批准。

Learner:不参与决策,从Proposers/Acceptors学习最新达成一致的提案(Value)。

在多副本状态机中,每个副本同时具有Proposer,Acceptor,Learner三种角色。

基于消息传递的三个阶段

第一阶段:Prepare阶段;Proposer向Acceptors发出Prepare请求,Acceptors针对收到的Prepare请求进行Promise承诺。

Prepare:Proposer生成全局唯一且递增的Proposal  ID(可使用时间戳加Server ID),向所有Acceptors发送Prepare请求,这里无需携带提案内容,只携带Proposal  ID即可。

Promise:Acceptors收到Prepare请求后,做出“两个承诺,一个应答”。

承诺1:不再接受Proposal  ID 小于等于(注意:这里是<=)当前请求的Prepare请求;

承诺2:不再接受Proposal  ID小于(注意:这里是<)当前请求的Propose请求;

应答:不违背以前做出的承诺下,回复已经Accept过的提案Proposal  ID最大的那个提案的Value和Proposal  ID ,没有则返回空值。

第二阶段:Accept阶段;Proposer收到多数Acceptors承诺的Promise后,向Acceptors发出Propose请求,Acceptors针对收到的Propose请求进行Accept处理。

Propose:Proposer收到多数Acceptors的Promise应答后,从应答中选择Proposal  ID最大的提案的Value,作为本次要发起的提案。如果所有应答的提案Value均为空值,则可以自己随意决定提案Value。然后携带当前Proposal  ID,向所有Acceptors发送Propose请求。

Accept:Acceptor收到Propose请求后,在不违背自己之前做出的承诺下,接受并持久化当前Proposal  ID和提案Value。

第三阶段:Learn阶段;Proposer在收到多数Acceptors的Accept之后,标志着本次Accept成功,决议形成,将形成的决议发送给所有的Learners。

23.什么是Raft算法?

不同于Paxos算法直接从分布式一致性问题出发推导出来,Raft算法则是从多副本状态机的角度提出。Raft实现了和Paxos相同的功能,他将一致性分解为多个子问题:Leader选举(Leader election),日志同步(Log  replication),安全性(Safety),日志压缩(Log compaction),成员变更(Membership   change)等。同时,Raft算法使用了更强的假设来减少了需要考虑的状态,使之变的易于理解和实现。

三个角色

Raft将系统中的角色分为领导者(Leader),跟从者(Follower)和候选人(Candidate):

Leader:接受客户端请求,并向Follower同步请求日志,当日志同步到大多数节点上告诉Follower提交日志。Follower:接受并持久化同步的日志,在Leader告诉日志可以提交之后,提交日志。

Candidate:Leader选举过程中的临时角色。

Raft要求系统在任意时刻最多只有一个Leader,正常工作期间只有Leader和Followers.

以子问题Leader选举为例?

Raft使用心跳(heartbeat)触发Leader选举。当服务器启动时,初始化为Follower。Leader向所有Followers周期性发送心跳。如果Follower在选举超时时间内没有收到Leader的心跳,就会等待一段随机的时间后发起一次Leader选举。

Follower将其当前term加一然后转换为Candidate。他首先给自己投票并且给集群中其他服务器发送RequestVote  RPC(RPC细节参见八,Raft算法总结)。结果有以下三种情况:

赢得了多数的选票,成功选举为Leader;

收到了Leader的消息,表示有其他服务器已经抢险当选了Leader;

没有服务器赢得多数的选票,Leader选举失败,等待选举时间超时后发起下一次选举。

选举出Leader后,Leader通过定期向所有Followers发送心跳信息维持其统治。若Follower一段时间未收到Leader的心跳则认为Leader可能已经挂了,再次发起Leader选举过程。

24.全局唯一ID有哪些实现方案?

常见的分布式ID生成方式,大致分类的话可以分为两类:

一种是类DB型的,根据设置不同起始值和步长来实现趋势递增,需要考虑服务的容错性和可用性;

另一种是类snowflake型,这种就是将64位划分为不同的段,每段代表不同的涵义,基本就是时间戳,机器ID和序列数。这种方案就是需要考虑时钟回拨的问题以及做一些buffer的缓冲设计提高性能。

25.数据库方式实现方案?有什么缺陷?

MySQL为例

我们将分布式系统中数据库的同一个业务表的自增ID设计成不一样的起始值,然后设置固定的步长,步长的值即为分库的数量或分表的数量。

以MySQL举例,利用给字段设置auto  increment   increment和auto  increment  offset来保证ID自增。

auto  increment offset:表示自增长字段从哪个数开始,他的取值范围是1...65535。

auto  increment  increment:表示自增长字段每次递增的量,其默认值是1,取值范围是1...65535。

缺点也很明显,首先他强依赖DB,当DB异常时整个系统不可用。虽然配置主从复制尽可能的增加可用性,但是数据一致性在特殊情况下难以保证。主从切换时不一致可能会导致重复发号。还有就是ID发号性能瓶颈限制在单台MySQL的读写性能。

使用redis实现

Redis  实现分布式唯一ID主要是通过提供像INCR和INCRBY这样的自增原子命令,由于Redis自身的单线程的特点所以能保证生成的ID肯定是唯一有序的。

但是单机存在的性能瓶颈,无法满足高并发的业务需求,所以可以采用集群的方式来实现。集群的方式又会涉及到和数据库集群同样的问题,所以也需要设置分段和步长来实现。

为了避免长期自增后数字过大可以通过与当前时间戳组合起来使用,另外为了保证并发和业务多线程的问题可以采用Redis+Lua的方式进行编码,保证安全。

Redis实现分布式全局唯一ID,他的性能比较高,生成的数据是有序的,对排序业务有利,但是同样他依赖于redis,需要系统引进Redis组件,增加了系统的配置复杂性。

当然现在Redis的使用性很普遍,所以如果其他业务已经引进了Redis集群,则可以资源利用考虑使用Redis来实现。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1368781.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

全球数据隐私相关专业薪酬趋势

PrimiHub一款由密码学专家团队打造的开源隐私计算平台&#xff0c;专注于分享数据安全、密码学、联邦学习、同态加密等隐私计算领域的技术和内容。 数字经济时代&#xff0c;数据已经成为新型生产要素。而数据与其他生产要素的本质区别在于&#xff0c;数据隐私是数据流动过程中…

第5章 对象

学习目标 了解什么是对象&#xff0c;能够说出JavaScript中的对象的概念 掌握对象的创建方式&#xff0c;能够使用3种方式创建对象 掌握对象的遍历&#xff0c;能够遍历对象的属性和方法 熟悉值类型和引用类型&#xff0c;能够说出值类型和引用类型的特点 掌握Math对象的使…

第三代量子计算机交付,中国芯片开辟新道路,光刻机难挡中国芯

日前安徽本源量子宣布第三代超导量子计算系统正式上线&#xff0c;这是中国最先进的量子计算机&#xff0c;计算量子比特已达到72个&#xff0c;在全球已居于较为领先的水平&#xff0c;这对于中国芯片在原来的硅基芯片受到光刻机阻碍无疑是巨大的鼓舞。 据悉本源量子的第一代、…

QT应用篇:QT解析与生成XML文件的四种方式

四种常见的解析 XML 的方式(DOM、SAX、以及基于 Qt 的 XmlStreamReader)各有自己的优缺点,适合不同的应用场景。 DOM 适合小型且结构简单的 XML 文件,需要频繁修改和操作整个文档结构的情况。SAX 适合大型 XML 文件,以及只需读取不需要修改的情况。基于 Qt 的 XmlStreamRe…

以太坊开发者会议回顾:坎昆升级、硬分叉与布拉格

作者&#xff1a;Christine Kim Galaxy研究副总裁 编译&#xff1a;秦晋 碳链价值 2024年1月4日&#xff0c;以太坊开发人员齐聚Zoom for All Core Developers Execution (ACDE) Call #178 上。ACDE电话会议通常由以太坊基金会协议负责人Tim Beiko主持&#xff0c;是一个开发人…

Databend 开源周报第 127 期

Databend 是一款现代云数仓。专为弹性和高效设计&#xff0c;为您的大规模分析需求保驾护航。自由且开源。即刻体验云服务&#xff1a;https://app.databend.cn 。 Whats On In Databend 探索 Databend 本周新进展&#xff0c;遇到更贴近你心意的 Databend 。 了解 Databend …

Java版商城:Spring Cloud+SpringBoot b2b2c实现多商家入驻直播带货及 免 费 小程序商城搭建的完整指南

随着互联网的快速发展&#xff0c;越来越多的企业开始注重数字化转型&#xff0c;以提升自身的竞争力和运营效率。在这个背景下&#xff0c;鸿鹄云商SAAS云产品应运而生&#xff0c;为企业提供了一种简单、高效、安全的数字化解决方案。 鸿鹄云商SAAS云产品是一种基于云计算的软…

程序员求职路上的光与影:我如何征服面试挑战

程序员面试攻略&#xff1a;学霸们必备的胜利秘笈来袭&#xff01; 1. 必背资料&#xff1a;提前了解面试公司或团队的背景信息&#xff0c;包括产品、技术栈和文化。别忘了复习常见面试问题&#xff0c;并准备一些项目经历和代码示例供展示。 2. 高科技武装&#xff1a;把握…

TS 36.213 V12.0.0-PUSCH相关过程(4)-UE HARQ-ACK过程

​本文的内容主要涉及TS 36.213&#xff0c;版本是C00&#xff0c;也就是V12.0.0。

矩阵中的最长递增路径

题目链接 矩阵中的最长递增路径 题目描述 注意点 不能 在 对角线 方向上移动或移动到 边界外&#xff08;即不允许环绕&#xff09; 解答思路 因为最长递增路径一定是连续的&#xff0c;所以想到使用深度优先遍历来做。如果只使用深度优先遍历会导致超时&#xff08;同一个…

世微AP8851 DC-DC降压恒压芯片 2.5A应用资料及BOM清单

1. 方案特性 双层 PCB 板&#xff08;L42mm W25mm H15mm&#xff09; 输入电压范围&#xff1a; 11V&#xff5e;85V&#xff08;输出 5V) 18V&#xff5e;85V&#xff08;输出 12V&#xff09; 输出电流&#xff1a;2.5A 率&#xff1a;93.8%&#xff08;输出 12V&#xff…

亿尚网:撤柜上线电商+直播将成为美妆行业发展的绝佳组合

亿尚网&#xff1a;撤柜上线电商直播将成为美妆行业发展的绝佳组合 来源&#xff1a; 编辑&#xff1a;亿尚风范 时间&#xff1a;2024-01-09 随着社交媒体的兴起&#xff0c;网红经济逐渐成为市场中的一股不可忽视的力量。而在这其中&#xff0c;直播电商的模式更是为网红们…

Android - CrashHandler 全局异常捕获器

官网介绍如下&#xff1a;Thread.UncaughtExceptionHandler (Java Platform SE 8 ) 用于线程因未捕获异常而突然终止时调用的处理程序接口。当线程由于未捕获异常而即将终止时&#xff0c;Java虚拟机将使用thread . getuncaughtexceptionhandler()查询该线程的UncaughtExceptio…

unity:玩家从SDK注册到登陆就流失百分10几的思考

目录 前言 失去焦点问题&#xff08;黑屏&#xff09; 缓存cache.ready没有准备好&#xff08;黑屏&#xff09; 兼容性问题&#xff08;黑屏和闪退&#xff09; 用户隐私协议弹出时机&#xff08;体验&#xff09; 启动画面和登陆界面&#xff08;体验&#xff09; 游戏…

2024电影营销:转换为王,平台变阵

2023年&#xff0c;电影市场全面复苏&#xff0c;伴随着各类大片纷纷入场掘金&#xff0c;“电影营销”再度成为了今年热议的话题。 关于张艺谋拍一部戏到底要被震撼多少次&#xff1f;吴京为什么半夜老是喜欢溜达在别的剧组探班&#xff1f;徐峥一年躲在观众席里&#xff0c;…

亚信安慧AntDB数据库荣膺“2023中国数据库领域最具商业合作价值企业”殊荣

近期&#xff0c;引领数据库技术创新的亚信科技荣获数据猿发布的《2023中国数据库领域最有商业合作潜力企业排名》中的重要位置。此次入选&#xff0c;不仅彰显了亚信科技在数据库领域近二十年来的技术实力和行业认可&#xff0c;也凸显了其在商业合作潜力方面的引领地位。 图1…

Mac 安装Nginx教程

Nginx官网 Nginx官网英文 1.在终端输入brew search nginx 命令检查nginx是否安装了 2. 安装命令&#xff1a;brew install nginx 3. 查看Nginx信息命令brew info nginx 4. 启动 nginx方式&#xff1a;在终端里输入 nginx 5.查看 nginx 是否启动成功 在浏览器中访问http://l…

通达信顾比均线指标公式,识别价格趋势的变化和潜在突破

顾比均线(GMMA)是由全球知名的技术分析大师戴若顾比(Daryl Guppy)发明的的技术指标&#xff0c;通过观察短期和长期移动平均线之间的关系来识别价格趋势的变化和潜在突破。 顾比均线使用了两组移动平均线&#xff0c;每组包含6条&#xff0c;总共12条。短期均线组通常包括 3 日…

人工智能图像生成的道德利弊

目录 一、我们应该关注人工智能图像吗&#xff1f;二、利用人工智能增强创造力的积极作用三、版权和剽窃问题四、对就业和劳动力动态的影响五、无意识的偏见和影响六、负责任地前行 人工智能&#xff08;AI&#xff09;发展迅速&#xff0c;尤其是近年来。据估计&#xff0c;超…

【办公】百度网盘 Linux命令行方式使用

安装&#xff1a; pip install bypy登录&#xff1a; bypy info # 会给网页链接&#xff0c;用浏览器打开链接后会有一个授权码&#xff0c;复制授权码后粘贴到这里回车上传文件&#xff1a; bypy upload ./data下载文件&#xff1a; bypy downdir /运行时添加-v参数&#…