你的位置:开云官网kaiyun皇马赞助商 (中国)官方网站 登录入口 > 新闻资讯 > 体育游戏app平台则将土产货的 max_id 更新为这个收到的提议号-开云官网kaiyun皇马赞助商 (中国)官方网站 登录入口

新闻资讯

体育游戏app平台则将土产货的 max_id 更新为这个收到的提议号-开云官网kaiyun皇马赞助商 (中国)官方网站 登录入口

2025-07-24 09:38    点击次数:89

体育游戏app平台则将土产货的 max_id 更新为这个收到的提议号-开云官网kaiyun皇马赞助商 (中国)官方网站 登录入口

体育游戏app平台

一年一度的春运又到了,据揣度,本年铁路客运量或超 5.1 亿东说念主次,日均 1275 万东说念主次,东说念主们在比拼手速抢票的背后,12306 的磋议机系统是怎样快速反馈海量的央求的呢?单台行状器由于有限的磋议材干无法快速反馈千千万万的央求,想象一下线下的购票大厅只消一个售票窗口却有一万东说念主列队的场景,东说念主们惟恐都要带上睡袋来列队了。

那怎样加速售票的经由来减少东说念主们的恭候时刻呢?率先窗口的责任主说念主员不错加速手速,以极快的速率进行操作,然而单个责任主说念主员的手速再快也有一个上限;另一个办法就是在大厅开设多个窗口,同期进行售票。收罗售票系统亦然相同的,单台行状器处理不外来,就使用多台行状器来进行协同处理,这就需要"分散式系统"登场了!

什么是分散式系统?

泛泛地说,分散式系统是指,一群磋议机共同完成一个任务。这些磋议机也可称为节点,它们通过收罗联络在一说念,单干合作,但对用户阐发得像一个合座。不单是是 12306 售票系统,你刷视频时看到的保举、搜索引擎给出的搜索后果、外卖平台的订单分拨,背后都是分散式系统在寡言运行。比拟单个行状器,使用分散式系统既能提升系统的性能、反馈央求的速率,又能提供更好的可靠性,部分节点宕机或者断网了,统共这个词系统依然能无间提供行状。

分散式系统虽有这些克己,然而它带来的复杂性也给磋议机系统联想建议了挑战。这里就波及并发(concurrency)以及数据一致(consistency)的问题。

以售票为例,试想以下场景,东说念主在北京的张三和东说念主在广州的李四在抢兼并张票,张三的抢票央求被分发到了华北地区的某台行状器,而李四的央求被分给了华南地区的某行状器,这俩行状器咫尺不错同期并行地处理两个东说念主的抢票央求,系统合座的反馈速率很快,然而系统怎样稳健地合作使得票不会被卖重呢?

此外,分散式系统的另一大性格是存在部分失效(partial failure)的可能性,顾名想义,就是系统部分出现故障,但系统其他部分仍可运行。分散式系统由无边磋议机组成,而且通过收罗联络。显着,不论是磋议机照旧收罗自身都有可能出现故障,比喻某处停电了、网线断了,又或是某台磋议机操作系统故障,等等。即使一台机器发生故障的概率很低,关联词当磋议机的数目多了,对于统共这个词系统来说,故障会相称频频。

咱们不错作念一个通俗的磋议,假设系统中有 1000 台磋议机,每台平均一年只出一次故障(故障可能由任何原因导致),即每天出现故障的概率是 1/365;反之,每天不出现故障概率是 1-1/365,约等于 0.99726。这看起来是一个很大的概率,然而对统共这个词系统而言,每天统共机器都不出故障的概率则是 0.99726 的 1000 次方,约为 0.064。这里还未推敲收罗问题,是以对于系统来说,不出故障简直是不成能的。

因此,在分散式系统的联想中,如安在部分节点故障或者收罗断开的情况下,依然提供正常的行状是必须推敲的问题。

分散式系统的基石——共鸣算法(consensus algorithm)

共鸣算法在分散式系统中演出着中枢变装,它使得系统在莫得分享的内存,只可通过发送音信通讯,而况部分节点可能失效的情况下,统共这个词系统依然粗略就某个问题达成共鸣。比喻某一个特定的座位到底是卖了照旧没卖,是卖给了张三照旧李四等等,需要系统达成共鸣才能无间实践。

分散式系统前驱、驰名图灵奖得主 Leslie Lamport 于 1990 年建议了当代共鸣算法的基础—— Paxos 算法。

Lamport 用 Paxos 这个名字的起因很特酷爱酷爱。Paxos 本是希腊伊奥尼亚海有着悠久历史的小岛,Lamport 想象,考古学家发咫尺旷古时间小岛上有一个"业余议会"(part-time parliament),议员们通过信使传递音信对议案进行表决,然而信使不成靠,音信可能传递不到或者被蔓延,而且议员自身也有不来开会的可能性,在这种情况下,议员们怎样对某议案达成一致?在论文中,Lamport 使用这个诬捏在 Paxos 小岛的议会为框架,建议了一个在不成靠通讯的情况下竣事共鸣的算法,并给出了严格的数学解释。

1990 年 Lamport 将论文提交给 ACM Transactions on Computer Systems,审稿东说念主暗示论文还算是事理,但看起来并不很病笃,而且对于 Paxos 故事的部分建议去掉。Lamport 暗示,审稿东说念主怎样这样一丝幽默感都莫得,并拒皆备论文作念任何修改。自后,分散式系统的另一位前驱 Butler Lampson 读懂了论文,并和 Nancy Lynch 等领域大佬一说念发表了他们我方的解释,此时 Lamport 再次推敲将论文发表,最终在一众同业的激动下,论文于 1998 年发表,咫尺还是成为分散式系统的基石。

底下咱们以卖票系统为例,简述一下 Paxos 算法的想想,以及它如安在节点失效的情况依然达成共鸣。为了简化,假设系统中只消 3 台行状器(节点;3 个节点是演示 Paxos 算法所需的最少许量),而况只卖一张票(卖多张票也不错理解成反复卖一张票的经由)。此外,咱们还需要先简述一下算法的假设。

率先,Paxos 算法假设一个节点若是故障则完全罢手反馈,而不会无间在收罗发送失误的音信以阻挠系统,它被诞生之后会回到系统中无间反馈,这种类型的失效被称为 fail-stop(失败阻隔),即 fail 后就 stop 了。其次,Paxos 是一个基于无数派投票的算法,即需要无数节点投票通过才被以为是共鸣;Paxos 需要 2m+1 个节点才能容纳 m 个节点失效。也就是说,要粗略容纳 1 个节点失效,至少系统需要有 3 个节点(另外两个正常运行)。若是超出半数的节点都失效,那 Paxos 算法将无法正常运转。

咫尺咱们给这三台行状器分拨一个全局的序号以示分别:1 号节点、2 号节点和 3 号节点。Paxos 算法会为每个节点分拨一个变装,这里假设 1 号节点是提议者(proposer)亦然接管者(acceptor);2 号和 3 号节点是接管者,只接管,不提议。咫尺 1 号节点收到了来自张三的购票央求,它源泉了算法的第一步:PREPARE-PROMISE。

提议者 1 号节点率先会为它的提议 proposal(即卖票给张三)分拨一个惟一的序号(proposal number)。系统中统共的提议都会有一个我方独到的序号,一种通俗的竣事样式是这样:

每个节点我方调理一个计数器(counter),开动值为 0,每次我方建议新的提议时,计数器加 1;新提议的序号设定为由计数器的数值和该节点的全局 ID 所拼接组成的少许,两者中间用少许点作念间隔,即 {counter}.{ID}。比如 1 号节点的第一个提议的序号为 1.1,第二个提议的序号则是 2.1。访佛的,2 号节点的第一个提议序号为 1.2,它的第二个提议的序号则是 2.2,依此类推。按照这种序号的联想样式,当提议者 1 号节点收到张三的央求以后,它率先会发送一条 PREAPRE 音信给其他统共节点,而况附上提议的序号 1.1,这里写稿 PREPARE ( 1.1 ) 。

收到提议的接管者们按照以下逻辑进行反馈:

1. 检察收到的 PREPARE 音信所附带的提议序号。

2. 将收到的提议号与我方土产货的 max_id 进行对比。若是更大,则将土产货的 max_id 更新为这个收到的提议号,并复返一条 PROMISE 音信,十分于告诉提议者:我收到你的音信了,咫尺你的提议号是最大的哦,准备提议吧,我承诺将不再接管比你的序号小的提议。

3. 若是收到的提议序号小于它土产货的 max_id,该接管者就不作念回复,或者回复一条 fail 音信,即告诉提议者:你的提议失败。

若是提议者(1 号节点)收到了来惬心无数接管者(我方也算一个)复返的 PROMISE 音信,这时候它就知说念,大家还是作念好准备接管它的提议了。若是莫得得到无数东说念主的复兴,或者收到了一个 fail 音信,提议者就只可废弃本轮的提议,它不错将我方土产货 counter 加 1,然后再次建议新一轮的提议(由于 counter 加了 1,提议号也会加 1),再行尝试。当 1 号节点收到了来自无数节点的 PROMISE 音信后,它就参加第二步:PROPOSE-ACCEPT。

在第二步中,1 号节点会发送一条 PROPOSE 音信,而况附带上刚才的提议号,以及具体的值(value),这里的值 value 就是大家但愿达成共鸣的东西,在本文买票的例子中,它的内容就是"张三",代表票卖给张三。是以 1 号节点发送的音信是这样:

PROPOSE ( 1.1,"张三" )

收到音信的接管者们咫尺要作念一个判断,是否接管这个提议,它们的逻辑是这样的:

1. 若是 PROPOSE 音信里附带的提议号依然是我咫尺收到的最大的(即和我方的 max_id 进行对比),那就接管这个提议,而况复返一条 ACCEPTED 音信;

2. 不然就不复返音信,或者复返 fail 音信,告诉提议者:提议失败。

若是提议者收到来惬心无数节点的 ACCEPTED 音信,那它就知说念共鸣还是达成了。假设咫尺 2 号和 3 号都正常收到了 PROPOSE 音信,并正常复返了 ACCEPTED 音信,则统共节点就"票卖给张三"这一景况达成了一致。

回来一下,这里达成共鸣一共用了两步。第一步的主见在于取得无数东说念主的首肯,十分于提议者对每个东说念主喊话:我要进行修改数据了啊,你们首肯不首肯?只消当取得了无数东说念主的首肯之后,才会进行第二步——提议者确凿发出要 propose 的值。

试想,若是算法跳过第一步,径直发送要 propose 的值,不同的接管者就可能会收到来自不同提议者的值。而这个时候又因为莫得事前征求无数的首肯,终末招揽者也不知说念我方收到的值是否就代表了大无数的意见,系统中可能会有多个子群体大家各自有我方的值,这样全局的共鸣就莫得了。

无缺的 Paxos 算法逻辑

到此戒指,算法的运行一切正常,咫尺咱们再来望望一些愈加复杂的情况。

假设不光 1 号节点是提议者,2 号节点因收到了李四的央求,也成为了一个提议者(操纵统共节点都是接管者),咫尺系统里就有了两个不同的提议者,它们发送的音信可能以任何的样式交汇在一说念。

假设 3 号节点可能先收到了来自 1 号节点的 PREPARE 音信(张三购票),即 PREPARE ( 1.1 ) ,而况复返了 PROMISE。就在这时,它又收到了 2 号节点的 PREPARE 音信(李四购票),即 PREPARE ( 1.2 ) ,因为提议号 1.2 大于 1.1,于是它又会给 2 号节点复返 PROMISE,而况将我方的 max_id 更新为 1.2。操纵,1 号节点会进行第二步无间发送 PROPOSE 音信,PROPOSE ( 1.1,"张三" ) ,但此时 3 号节点还是不会再接管它的提议了,因为咫尺对它而言,1.2 是更新的提议。只消当 2 号节点的 PROPOSE 音信发过来时它才会接管。

再推敲另一种情况,假设李四的操作比张三慢了那么一丝点,当 2 号节点成为提议者,而况发送 PREPARE ( 1.2 ) 的时候,3 号节点还是接管 1 号节点的提议了(提议号为 1.1),即 ACCEPTED 音信还是发送。而这时 2 号节点因为各式原因还莫得收到 1 号节点的 PREPARE 音信,浑然不知 1 号和 3 号已达成共鸣(票卖给张三)。那么字据 Paxos 算法,当 3 号节点收到来自 2 号的 PREPARE ( 1.2 ) 音信时,由于 1.2 是 3 号见过的最大的提议号,是以它的确会向 2 号复返一个 PROMISE 音信,然而因为 3 号又还是接管此前的提议 1.1 了,是以在它复返的 PROMISE 音信中,会附上之前所接管提议的序号以及值,即 PROMISE ( 1.1,"张三" ) ,即告诉 2 号:我收到你的提议号了,它的确是最新的提议,然而我此前还是接管过序号为 1.1 的提议了,它的内容是"张三"。2 号收到该音信,了解到票还是卖出,此时字据 Paxos 算法,2 号必须将我方要 propose 的值改造为"张三",然后无间发送 PROPOSE 音信,于是统共的节点依然是达成了共鸣。

最终客户端的李四看到的后果即是:票已售罄。事实上,提议者可能会收到多个带此前接管值的 PROMISE 音信,它将会考中这些统共 PROMISE 内部提议序号最大的阿谁对应的值,当作我方要 propose 的值,若是莫得任何 PROMISE 音信里带有此前接管的提议信息,提议者则无间用我朴直本想 propose 的值。更新后的接管者和提议者的无缺逻辑分别如下图所示。

PREPARE-PROMISE 经由。图片起首:https://people.cs.rutgers.edu/~pxk/417/notes/paxos.html

这即是无缺的 Paxos 算法。终末咱们再来通俗推敲下断网或者节点宕机的情况,望望 Paxos 如安在故障情况下依然能正确运行。

收罗或节点失效下的 Paxos

不论是提议者照旧接管者都有宕机的可能性。当招揽者宕机时,实践上对系统运行影响不大,这恰是分散式系统的上风:哪怕有一些节点分歧 PREPARE 音信或者 PROPOSE 音信作念任何反应,只消有无数的节点依然在线,系统依然能作念出反应,提议者依然能得到无数东说念主的回复,于是算法运行。而当宕机的节点死而复生后,他们终究也和会过其他节点发来的带有此前还是受提议信息的 PROMISE 音信来了解到我方错过的共鸣,在我方土产货也进行更新。

那若是提议者(比喻 1 号节点)宕机呢?分为三种情况:

1. 假如它在发送 PREPARE 音信之前宕机,那十分于系统内部什么也莫得发生。其他节点接登科户的需求时会变为新的提议者;

2. 若是提议者在发送 PREPARE 音信之后宕机,还没来得及发送 PROPOSE,如咱们刚所说,它的提议会被之后更新的 PREPARE 所取代(由新的提议者所发出);

3. 若是提议者还是完成了第一步 PREPARE-PROMISE,参加了第二步,然而在给部分节点发送 PROPOSE 音信后宕机,比喻 1 号在给 3 号发送完 PROPOSE 之后宕机,没来得及发给 2 号;那它的提议将会被 3 号接管,而 2 号最终照旧会了解到 1 号和 3 号达成的共鸣。因为 2 号在某时会成为提议者,它终究会收到 3 号复返的带有此前还是受提议信息的 PROMISE 音信,并据此来更新我方土产货的信息,于是与 1 号、3 号保执了一致。

是以终末回到抢票上,当咱们从客户端发出买票央求以后,它会和背后复杂的分散式系统进行交互,大家若是抢不到票并不一定因为我方手速不够快,还有可能是收罗蔓延、联络的行状器宕机,或者和系统算法自身的运作联系。

结语

分散式系统当作当代磋议机系统的基石,粗略复旧 12306 购票这样的高负载、高并发场景。本文盘考了分散式系统中对于一致性与容错性的一些基本主见与本事竣事。

事实上,分散式系统的期骗不单是线上网购,在加密领域,分散式系统为区块链本事提供了基础复旧,确保数据的安全性和一致性;在科学磋议领域,分散式系统也被用来贬责更大界限的问题。这些领域都展示了分散式系统在咱们日常糊口和本事发展中阐发着不成或缺的作用。

终末,春节立地到了体育游戏app平台,祝大家:春节快乐,阖家幸福!