当前位置:首页 > 财经

paxos Paxos的通俗理解以及在数据库高可用上的使用

最近大家都在讨论Paxos算法。看了很多网上的文章,总觉得有点晦涩。经过一段时间的研究,对Paxos有了一些了解。这里想总结一下,希望抛砖引玉。

1.你为什么需要帕克斯

Paxos要解决的问题是分布式系统中的一致性问题。那么“分布式系统中的一致性问题”到底是什么呢?在分布式系统中,为了保证数据的高可用性,我们通常会保留多个数据副本,这些副本将被放置在不同的物理机器上。为了保持副本一致,所有副本的更新顺序应该一致。因为数据的增加、删除、修改、查询操作一般涉及多个客户端的并发操作,哪个客户端先做,哪个客户端后做,更新顺序要有保证。如果不是分布式的,可以加锁,谁申请加锁谁先操作,但是有一个单点问题。Paxos协议主要有两个用途:一个是实现全局锁服务或者命名和配置服务,比如Google Chubby和Apache ZooKeeper。另一种用法是用它把用户数据复制到多个数据中心,比如Google Megastore和Google扳手。

以一个分布式KV数据库为例,假设数据库提供Put和Get两种操作。具体架构如下:

在这样的架构下,多个服务器可以组成一个集群,以避免单点问题。我们需要解决的是三个服务器必须同步,也就是说如果请求put ("a ",1)发送到集群并成功,那么整个集群中的任何一个服务器都必须包含(" a ",1)。另外,假设多个客户端并发访问集群,来自不同客户端的请求可能会落在不同的服务器机器上,比如put ("b ",2)和put ("c ",3),我们需要保证哪些客户端请求先做,哪些客户端请求后做,并保证更新顺序,这是Paxos算法需要解决的问题。

2.Paxos算法

先简单描述一下Paxos算法,对算法本身有一个直观的认识,然后结合下面的例子进一步了解。

Paxos算法中有三个主要角色:

提议者:提议者

接受者:决策者

学习者:最终的决策学习者

实施时往往采用一套固定数量的服务器,每台服务器同时扮演上述三个角色。

Paxos算法分为以下三个阶段:

1.准备阶段

(1)发起人向多数承兑人发起1)提议人(纪元号,值)的准备请求。

(2)2)接受者收到准备请求,如果epochNo小于之前收到的,则直接拒绝;如果电子方案号大于收到的电子方案号,则将电子方案号最大的方案返回给提案人。

(3)由3)提议者发起的提议在进入下一个接受阶段之前,必须至少收到来自多于大多数接受者的准备响应;否则,有必要在准备阶段再次向大多数接受者发出准备请求。

2.接受阶段:

(1)演示者收到大多数接受者的“准备”响应后,查看接受者是否接受了1)提议者。如果没有已接受的建议,则提出建议并启动接受请求;如果已经有一个接受建议,从其中选择具有最大电子技术号的建议,并启动对此建议的接受请求。

(2)接受方收到请求后,如果建议书的电子技术号大于其上次响应准备请求的电子技术号,则接受方接受该请求;否则,请求将被拒绝。

3.学习阶段:

接受者接受的所有建议都应不断通知学习者,或者学习者应主动询问。一旦学习者确认建议书被大多数接受者接受,这意味着建议书的价值被选择,学习者可以了解建议书的价值,同时,他自己的服务器将不再接受建议书的请求。

我喜欢通过例子来理解理论,理论来源于生活。我会用生活中的例子来描述算法。

假设一群驴友决定端午节去旅游。全国有10个驴友。为了达成协议,这10个人又找了5个队长。5个队长互不交流,只给10个驴友发短信。

第一阶段(申请阶段),驴友给五个队长发短信申请和他们沟通。队长任何时候只能和一个驴友交流。每条信息都有时间。组长采取的原则是同意用最新的消息发送时间和驴友沟通。如果有更新的消息,就用更新的消息和驴友沟通。至少大部分队长同意沟通,让驴友进入实质性沟通的第二阶段。

第二阶段(交流阶段),获得交流权的驴友A收到队长发给他的旅游目的地,可能有几种情况。

第一种情况:所有通信队长都还没决定去哪里旅行。这时,驴友a会把他想去的目的地发给船长(比如马尔代夫)。因此,大多数船长可能会同意。整个过程完成后,他将前往马尔代夫,其他驴友迟早会知道。另外,意味着失败。可能是队长没回复(打电话给女朋友),也可能是其他驴友抢了交流权(上面说队长只和最新的短信交流)。如果失败,A需要重启第一阶段申请,并向组长发送短信申请通信权限。

第二种情况:至少有一个船长决定了目的地。这时A会收到不同队长决定的多个目的地,这些目的地是不同队长和不同驴友在不同时间决定的。a将首先检查一些旅游目的地是否得到了大多数(超过一半)团队领导的同意。如果有(假设三个领队决定去三亚,一个去拉萨,可能因为某种原因没有照顾),证明整个决定过程已经达成一致。a收拾东西去三亚,结束!

如果没有一个达到一半(比如两个去三亚,一个去拉萨,一个去昆明,一个没管),A这个时候可能想去马尔代夫,但是并没有按照自己的意愿乱来(这是Paxos的关键,后者认可前者,否则整个过程没完没了), a会根据所有接待队长的旅游目的地找到最新的决定地点(比如去昆明是队长一分钟前决定的,这时候去昆明的决定更新了,这样下一个抢到交流权的驴友很可能会去昆明,越来越多的队长决定去昆明。

一旦大部分(超过一半)队长同意在某个时刻去某个地方,比如昆明,后续得到交流权的驴友B会发现大部分队长都决定去昆明了,它会服从,最后所有的驴友都达成了去昆明的协议。

Paxos的基本思路大致就是上面这个过程。Paxos用的是少数服从多数的思想。只要n (n为奇数,至少大于等于3)个节点中有[N/2]+1(其中N/2向下舍入)个或更多个节点与某个决策一致,那么系统就被认为是一致的。在这种情况下,客户端不需要与所有的服务器通信,而是选择其中的大部分。不需要所有服务器都处于工作状态,有些服务器是挂起的。只有半数以上存活下来,整个过程才能继续,容错性相当好。

帕克斯里的接受者相当于上面的船长,提议者相当于上面的驴友,而epochNo。相当于示例中申请短信的发送时间。Paxos最费时间的地方是,需要他们一半以上的人同意沟通,才能进入第二步。试想一下,刚开始的时候,所有的驴友都给队长发疯狂短信,每个队长都收到不同驴友的最新短信,很难达到一半以上同意和一个驴友交流的状态。为了减少这个时间,这里不详述Paxos和Fast Paxos的改进。另外,paxos不是指一个协议,而是一类协议的总称。比较常见的paxos协议有基本paxos和多paxos。这里的例子是基本的paxos。基本的paxos协议比较复杂,效率相对较低,所以现在所有的paxos相关协议的系统,一般都是基于多paxos的。如果你感兴趣,你可以参考https://zhuanlan.zhihu.com/p/25664121的文章

3.Paxos在数据库高可用性中的应用

作为dba,为了实现高可用性,最常用的高可用性模式是主从模式,以mysql为例,主要有几种方式

(1)强同步复制,binlog同步到从库后,从库可以返回到主库,然后提交给客户端成功。这有一个问题。一旦主库和从库之间的网络紧张,甚至从库关闭,主库就不能再提供服务。这种模式实现了强大的数据一致性,但牺牲了服务的可用性。

(2)异步复制:主库本地写成功后,立即返回客户端说成功,不用等待从库回复。这样,一旦主库关闭,少量日志可能无法与从库同步,从而导致部分数据丢失。这种模式有很好的可用性,但代价是数据的一致性。

(3)半同步复制,这是一种折衷,主要是指从库节点收到的至少一个日志返回到主库ok后,可以返回到客户端成功提交,在网络环境不好的时候可能退化为异步复制。

另外,主从模式还有一个不可避免的问题,就是选择主。对于主从模式,很多高可用的方案,比如MMM、MHA、中间层等等,都诞生了很久,但显然理论和思路都不是最先进的。

综上所述,主从模式下处理数据库高可用性存在很多缺陷。为了改进这种数据同步模式,我们可以对数据库的高可用性提出几个要求:

(1)数据没有丢失

(2)服务的持续可用性

(3)自动选择主控形状

(4)自动容错

以上三个需求可以通过使用paxos协议的日志同步来实现。当然,paxos协议需要依赖一个基本假设,即主备之间的大部分机器(N/2+1)是活的,它们之间的网络通信是正常的。如果不满足此条件,服务将无法启动,数据也无法写入或读取。

因此,我们可以使用paxos复制重做日志或binlog,以确保集群具有高可用性和强一致性。不需要担心主从切换,只需要有一个vip,后端映射后面数据库的多个点。paxos将自动确保多个点的一致写入。业内阿里巴巴云用paxos或者raft做一个企业三节点mysql集群。

1.《paxos Paxos的通俗理解以及在数据库高可用上的使用》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。

2.《paxos Paxos的通俗理解以及在数据库高可用上的使用》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。

3.文章转载时请保留本站内容来源地址,https://www.lu-xu.com/caijing/1008885.html

上一篇

讲解一下微信小程序怎么无限投票刷票,小程序投票刷票多少钱

下一篇

红通人员曲志林回国投案 具体是什么情况

女排队长 中国女排前队长,嫁大12岁老外,40岁产子当妈妈,如今胖到认不出

  • 女排队长 中国女排前队长,嫁大12岁老外,40岁产子当妈妈,如今胖到认不出
  • 女排队长 中国女排前队长,嫁大12岁老外,40岁产子当妈妈,如今胖到认不出
  • 女排队长 中国女排前队长,嫁大12岁老外,40岁产子当妈妈,如今胖到认不出
两驴友失联获救后承担2万搜救费 两驴友引起了公愤

两驴友失联获救后承担2万搜救费 两驴友引起了公愤

近日,一则“两个驴友失联”的新闻引起广泛关注。据悉,8月14日下午6时许,四川峨眉山、河南孙曼磨鹏、浙江孙曼墨涛终于被救援人员找到,但获救后不得不承担2万元搜救费。这两个朋友失去联系并获救后,他们承担了2万英镑的搜救费据了解,8月14日,他们失联失联5天4夜,50多名救援人员搜救46小时。8月10日,他们擅自...

广东7名驴友被冲走3人溺亡 遇难者最小3岁

广东7名驴友被冲走3人溺亡 遇难者最小3岁

近日,广东清远自然保护区发生令人心碎的事件。十二人乘车进入英德石门台自然保护区。由于天气突变,7人被洪水冲走,导致3人溺水。最年轻的受害者才三岁!广东7个朋友被冲走,3人死亡8月18日晚,记者从英德市应急指挥中心获悉,广东英德石门台国家级自然保护区7名驴友被水流冲走。经过紧张的搜救,4个驴友获救,3个溺死。英...

官方回应驴友挑战贵州网红瀑布 具体是什么情况

官方回应驴友挑战贵州网红瀑布 具体是什么情况

8月24日,有网友发帖称,重庆一男一女两个驴友23日挑战贵州在线名人瀑布滴水滩,坠崖身亡。24日10时50分左右,记者从滴水潭瀑布所在的关岭县应急管理局确认,当地消防队员正在现场进行救援,但由于坡度较大,救援难度较大,官方尚未确认两人是否遇难。官方回应驴友挑战贵州在线名人瀑布据贵州蓝天救援队队长王毅介绍,他们...

挑战瀑降被困同行驴友施救都遇难 又是一桩悲剧

挑战瀑降被困同行驴友施救都遇难 又是一桩悲剧

挑战瀑布,被困旅伴,救援,全部遇难8月23日,贵州关岭。一名女子在滴水瀑布挑战瀑布下坡时,因设备问题被困在瀑布中央。来自王兴的旅伴没能救出他们,两人都被杀死了。另一个和他一起去的驴友告诉记者,那个救死扶伤的王兴驴友今年68岁,叫“王老师”。他是一名救援队员,在汶川地震等许多地方救了很多人。这次他想拍一张王老师...

荣成非法捕捞事件相关队长被停职 具体是什么情况

《新京报》披露,山东荣成的非法捕捞引起了人们的关注。根据以往的调查,人们和码头经常在深夜卸鱼,鱿鱼在被大卡车运往冷库的途中意外脱落。当地海鲜市场有卖海鲜的商贩,声称“渔政会查,会藏”。记者在向渔政报告后接到了“石平”的电话。8月26日,山东省农业和农村事务厅宣布,已派工作组到荣成市与当地有关部门进行调查。记者...

辽宁男子三进宫后当上城管队长 具体怎么回事

辽宁男子三进宫后当上城管队长 具体怎么回事

8月27日,中国裁判文书网公布了《苏斌、王万成在一审刑事判决中收受贿赂罪》。1992年6月16日,海城市城管局牌楼执法大队队长苏斌因伤害罪被判处有期徒刑五年。1996年12月16日,因流氓罪被辽宁省鞍山市中级人民法院判处有期徒刑五年。2000年9月20日,他被判处5个月的刑事拘留,并于2000年9月27日获释...

中国驴友徒步穿越非洲时确诊新冠 曾惊动过大使馆

  • 中国驴友徒步穿越非洲时确诊新冠 曾惊动过大使馆
  • 中国驴友徒步穿越非洲时确诊新冠 曾惊动过大使馆
  • 中国驴友徒步穿越非洲时确诊新冠 曾惊动过大使馆