您现在的位置是:热点 >>正文
云原生 Etcd 系列之Quorum 和唱票那回事
热点5431人已围观
简介...
关于 Quorum 的两个维度
前几回说了那么多框架,设计思想的文章。今天分享一个很小的点,etcd 的 quorum 是怎么实现的?
Quorum 机制本质就是一个关于多数派的事情,这个多数派应用的有两个方面:
选举过程:获得多数节点投票的节点才能获胜,成为 Leader ; 运行过程:被多数节点 commit 的日志位置,这个才是被集群可靠记录的位置。被集群 commit 的日志才能被应用 apply ;
那么这里有两个小思考问题:
既然是选举过程,那怎么选举结果唱票的?
既然是运行过程,那集群的这些节点怎么确认集群的 commit 位置?
有选举自然有唱票
唱票是在选举流程中的一个步骤。还记得以前选班干部的时候,在黑板上写“正”字,谁得票多谁就获胜当选。
etc云原d 里面也有选举,也就是 Leader 的选举。Leader 获胜的依据是的票满足大多数,也就是满足 quorum 机制。
今天我们就来看看 etcd 的唱票是怎么做的?
很简单的思路,我们给每个参与选举的朋友计数,得票超过半数的,那么就胜出。
比如说 A,B,C,D,E 五个人竞选,那么得到 3 票的就可以胜出。
来看看 etcd 的唱票
选举属于 quorum 机制,代码位于 etcd/raft/quorum/ 下。quorum 的核心实现在 MajorityConfig 的结构体,其实就是个 map 的封装:
type MajorityConfig map[uint64]struct{}
这个 map 的 key 是节点的 id,这里面包含了集群的节点生 ,map 的 value 不重要,所用用的是 struct{} 类型。
思考个小问题:那既然 value 不 care ,那为什么不用 slice 结构?
其实就是为了查找的需求,map 的查找是常数级别,value 又用的 struct{} ,不占空间,一举两得。
// etcd/raft/quorum/majority.go func (c MajorityConfig) VoteResult(votes map[uint64]bool) VoteResult { // 搞个长度为 2Et 的数组 ny := [2]int{} // 遍历集群节点 for id := range c { v, ok := votes[id] cd if !ok { // 暂时没投票的 missing++ continue   系; } if v { // 投票赞同的 ny[1]++ 列之 } else { // 投票拒绝的 ny[0]++ } } &nQubsp; q := len(c)/2 + 1 if ny[1] >= q { // 选举成功:得票数超过半数,,比如 votes => [yes, yes, yes] return VoteWoorn } if ny[1]+missing >= q { // 未知情况:不确定成功,也不确定失败 return VotePending } &umnbsp; // 选举失败 return VoteLost }
唱票的实现很简单,就如下几个步骤:
遍历集群节点; 统计谁赞同了、谁拒绝了、谁还没投票; 唱票的结果有三种:成功,失败,待定; 赞同投票的超过半数( len(c)/2+1 ),则胜利;
这实现可太简单了,就是一个遍历投票结果,写“正”字,“正”字超过半数则胜出。
集群的节点怎么确认集群的 commit 位置?
集群内被多数节点 commit 的位置才是集群的 commit 点。也就是说这个也需要满足 quorum 。这个就有意思了。
关键步骤:排序,然后取中间的位置。
取的这个中间的位置就是满足 quo 和rum 的 commit 。
// etcd/raft/quorum/majority.go func (c MajorityConfig) CommittedIndex(l AckedIndexer) Index { // 遍历集群节点:取出每个节点的 commit for id := range c { 唱票 if idx, ok := l.AckedIndex(id); ok { srt[i] = uint64(idx) i-- &nb那回sp; } } // 排个序 insertionSort(srt) // 取中间,这个位置就是大多数 commit 的位置,属集群共识 pos := n - (n/2 + 1) 云原 return Index(srt[pos]) }
这个实现就很有意思了,捞出每个节点当前的 commit 位置,组成一个数组,然后给这个数组排个序,取中间的位置。这个位置就是集群的 commit 位置,也就是 apply 的位置。
先把集群每个节点的 commit 位置取出来,是这样的:
后来排个序是这样的,黑色的节点 commit 位置则是集群的 commit 位置:
总结
Quorum 机制是分布式系统中很重要的理论部分,这是一个关于多数派的机制。etcd 关于多数派有两个方面:Leader 选举和 raft 日志运行;
etcd 的唱票实现非常简单,就是一个计数“正”字的实现,用一个 map 记录集群的节点,投票计数超生 过多数则胜出;
etcd 确认集群 commit 位置则是先把每个节点的 commit 位置放在数组,然后排个序,然后取中间位置,这个位置就是集群的 commit 位置;
多数节点 commit 过的日志才是集群 commit 的位置,集群 commit 的日志才能 apply ,这个要记住喽;
集群 commit 位置将由 Leader 通过心跳或者日志复制的消息告诉其他节点;
Tags:
相关文章
英国监管机构担忧云计算市场竞争,计划审查微软和亚马逊市场地位
热点英国竞争与市场管理局(CMA)近日对云计算市场的竞争状况表达了关切,并将微软和亚马逊定位为该市场的领军企业。CMA 在周二发布的声明中提到,其独立调查小组建议监管机构依据新出台的数字市场法规,对亚马逊...
【热点】
阅读更多标签: OPPO 小红书 影像趋势 Find X9
热点云梦级12月20日云梦级消息,昨天,OPPO 联合小红书发布 2026 年度影像趋势报告,双方基于小红书站内创作数据,总结出 9 大移动影像趋势,并以 OPPO Find X9 系列与 OPPO Re...
【热点】
阅读更多AI生成猫咪短片走红社交媒体 播放量动辄过亿引发关注
热点近期,社交媒体平台上出现了一类特殊的短视频内容——AI生成的猫咪短片,这些视频凭借其独特的创意和夸张的剧情设定吸引了大量用户关注,单个视频的播放量经常达到数亿次。 这类视频的内容往往充满想象力,展现了...
【热点】
阅读更多
热门文章
最新文章
友情链接
- 标签: 康师傅
- https://www.impactpool.org/search/?type=79&q=谷歌留痕外推【tg:seogoogle987】Gur
- https://www.nonsolocap.it/cap?action=SEARCH&k=谷歌留痕外推【tg:seogoogle987】,VXS
- https://www.impactpool.org/search/?type=79&q=谷歌留痕外推【tg:seogoogle987】dCg
- https://www.yidian51.com/taobao/谷歌留痕外推【tg:seogoogle987】,Xf3
- https://www.paulaschoice.hk/zh_hant/catalogsearch/result/?q=谷歌留痕外推【tg:seogoogle987】,LcW
- https://www.roberthalf.com/us/en/jobs/all/谷歌留痕外推【tg:seogoogle987】MOD
- https://xehay.vn/tim-kiem/=谷歌留痕外推【tg:seogoogle987】,Ap8
- https://www.symatoys.com/search.html?ID=UyMD6aO58bPrJvQAB1I0N69KzJBZeNPC&keyword=谷歌留痕外推【tg:seogoogle987】,wNh
- https://www.monroecounty.gov/search/?q=谷歌留痕外推【tg:seogoogle987】,XnM
- https://www.pickett.co.uk/collections/vendors?q=谷歌留痕外推【tg:seogoogle987】,Sbk
- https://www.flickr.com/photos/tags/谷歌留痕外推【tg:seogoogle987】SqE
- https://www.springfieldlibrary.org/library/?s=谷歌留痕外推【tg:seogoogle987】,AUz
- https://www.silentiumpc.com/en/search/谷歌留痕外推【tg:seogoogle987】,Lye
- https://www.thedp.com/page/search?q=谷歌留痕外推【tg:seogoogle987】,70N
- https://5gaa.org/?token=6e2l7hjt2i26gzgctgwdrv7v0j6nxorq&s=谷歌留痕外推【tg:seogoogle987】NVK
- https://www.routesonline.com/search/?query=谷歌留痕外推【tg:seogoogle987】,Piu
- https://www.resopal.de/catalogsearch/result/?action=SEARCH&q=谷歌留痕外推【tg:seogoogle987】,cxH
- https://www.whatsonstage.com/search?cat=64&term=谷歌留痕外推【tg:seogoogle987】,Xc0
- https://www.wellbees.com/index.php/catalogsearch/result/index/?q=谷歌留痕外推【tg:seogoogle987】,K3I
- https://www.remit.co.jp/zh/?s=谷歌留痕外推【tg:seogoogle987】,iQK
- https://www.krisinformation.se/en/search?q=谷歌留痕外推【tg:seogoogle987】,c8c
- https://www.kyuhoshi.com/?s=谷歌留痕外推【tg:seogoogle987】,61m
- https://www.lneg.pt/en/?s=谷歌留痕外推【tg:seogoogle987】,YkO
- https://www.luxurysociety.com/en/search?q=谷歌留痕外推【tg:seogoogle987】,SRK
- https://www.world-architects.com/en/search?term=谷歌留痕外推【tg:seogoogle987】,7Pw
- https://www.tombow.com/search/谷歌留痕外推【tg:seogoogle987】,RiS
- https://www.nytimes.com/search?dropmab=true&query=谷歌留痕外推【tg:seogoogle987】,7db
- https://www.wellbees.com/catalogsearch/result/?action=CHECK&q=谷歌留痕外推【tg:seogoogle987】,DaF
- https://www.scivee.tv/?s=谷歌留痕外推【tg:seogoogle987】,jQq
- https://www.posten-portal.de/search?query=谷歌留痕外推【tg:seogoogle987】,5ul
- https://www.kingston.gov.uk/site-search/results/?q=谷歌留痕外推【tg:seogoogle987】,E7z
- https://www.mintos.org/?s=谷歌留痕外推【tg:seogoogle987】,TeF
- https://www.tmtpost.com/search?q=谷歌留痕外推【tg:seogoogle987】,ahO
- https://nicolazzi.it/en/?s=谷歌留痕外推【tg:seogoogle987】,cVd
- https://yokohama-oht.com/?action=CHECK&s=谷歌留痕外推【tg:seogoogle987】,RtM
- https://wydden.com/?ID=r8w9WMSKWkOcmiaFWaUv0dzMdqZWfKtF&s=谷歌留痕外推【tg:seogoogle987】,58h
- https://www.varian.com/en-au/search?cat=113&search=谷歌留痕外推【tg:seogoogle987】,Ic2
- https://www.wilsonart.com/catalogsearch/result/?action=CHECK&q=谷歌留痕外推【tg:seogoogle987】,qLI
- https://www.wattpad.com/search/谷歌留痕外推【tg:seogoogle987】xid
- https://www.kelsa.co.uk/catalogsearch/result/index/?T=1686132119291&q=谷歌留痕外推【tg:seogoogle987】,Xo2
- https://www.kuaikanmanhua.com/sou/谷歌留痕外推【tg:seogoogle987】,1C1
- https://www.totolink.vn/search/谷歌留痕外推【tg:seogoogle987】,8g8
- https://www.nextavenue.org/?action=QUERY&s=谷歌留痕外推【tg:seogoogle987】,4PV
- https://www.dba.dk/soeg/?soeg=谷歌留痕外推【tg:seogoogle987】e9M
- https://www.ucycle.com/search/=谷歌留痕外推【tg:seogoogle987】,1Kg
- https://www.sdcard.org/ja/?s=谷歌留痕外推【tg:seogoogle987】,2Ne
- https://www.rollingstone.it/?ID=DVMeu3AlmzZE1cuJ2FmgmO5TSCQRb3yh&s=谷歌留痕外推【tg:seogoogle987】,bgA
- https://www.normani.de/search?q=谷歌留痕外推【tg:seogoogle987】,kn9
- https://www.vfw.org/search-results?q=谷歌留痕外推【tg:seogoogle987】,GSa
- https://www.tarleton.edu/?s=谷歌留痕外推【tg:seogoogle987】,QPy