您现在的位置是:热点 >>正文
云原生 Etcd 系列之Quorum 和唱票那回事
热点5659人已围观
简介...
关于 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 { // 搞个长度为&nbsEtp;2 的数组 ny := [2]int{} // 遍历集群节点 for id := range c { v, ok := votes[id] &cdnbsp; if !ok { // 暂时没投票的 missing++ continue &n 系bsp; } if v { // 投票赞同的 ny[1]++  列之; } else { // 投票拒绝的 ny[0]++ } }  Qu; q := len(c)/2 + 1 if ny[1] >= q { // 选举成功:得票数超过半数,,比如 votes => [yes, yes, yes] return&nborsp;VoteWon } if ny[1]+missing >= q { // 未知情况:不确定成功,也不确定失败 return VotePending } &numbsp; // 选举失败 return VoteLost }
唱票的实现很简单,就如下几个步骤:
遍历集群节点; 统计谁赞同了、谁拒绝了、谁还没投票; 唱票的结果有三种:成功,失败,待定; 赞同投票的超过半数( len(c)/2+1 ),则胜利;
这实现可太简单了,就是一个遍历投票结果,写“正”字,“正”字超过半数则胜出。
集群的节点怎么确认集群的 commit 位置?
集群内被多数节点 commit 的位置才是集群的 commit 点。也就是说这个也需要满足 quorum 。这个就有意思了。
关键步骤:排序,然后取中间的位置。
取的这个中间的位置就是满 和足 quorum 的 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-- 那回 } } // 排个序 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:
相关文章
标签: 阳光电源
热点撰文 | 张 宇 编辑 | 杨博丞 题图 | IC Photo 据悉,清洁能源科技企业阳光电源将于2025年11月20日正式启动香港上市NDR(非交易路演),这一动作标志着其港股IPO进程迎来关键里程...
【热点】
阅读更多微软将投资5亿美元在魁北克扩大超大规模云计算和AI基础设施
热点11月23日消息,据外媒报道,当地时间周三,微软宣布将在未来两年内投资5亿美元,扩大其在加拿大魁北克的超大规模云计算和人工智能(AI)基础设施,这项投资将使微软在加拿大的本地云基础设施规模增加750%...
【热点】
阅读更多标签: 标签 苹果 印度反垄断 CCI AppStore
热点云梦级4月21日云梦级消息,据 9to5mac 报道,苹果公司表示,在印度发生的一场反垄断纠纷中,由于其拒绝配合监管机构,可能面临高达 380 亿美元(现汇率约合 2594.45 亿元人民币)的巨额罚...
【热点】
阅读更多
热门文章
最新文章
友情链接
- 标签: 康师傅
- https://www.nbm.org/?action=QUERY&s=谷歌搜索留痕【tg:seogoogle987】,HQH
- https://www.vfw.org/search-results?q=谷歌搜索留痕【tg:seogoogle987】,Lbz
- https://www.metaltix.com/?view=tours&filter=search&q=谷歌搜索留痕【tg:seogoogle987】,HK7
- https://www.urmc.rochester.edu/news/search?q=谷歌搜索留痕【tg:seogoogle987】,GNt
- https://www.teamlab.art/it/?submit=谷歌搜索留痕【tg:seogoogle987】,feb
- https://www.wuv.edu/?s=谷歌搜索留痕【tg:seogoogle987】,1G5
- https://www.nss.nhs.scot/search?q=谷歌搜索留痕【tg:seogoogle987】,CEG
- https://wwwcp.umes.edu/search/谷歌搜索留痕【tg:seogoogle987】,ghj
- https://www.xvideos.com/tags/谷歌搜索留痕【tg:seogoogle987】,QMc
- https://www.zalora.sg/catalog/?cat=112&q=谷歌搜索留痕【tg:seogoogle987】,rGh
- https://www.kingston.gov.uk/site-search/results/?q=谷歌搜索留痕【tg:seogoogle987】,lub
- https://www.normani.de/search?q=谷歌搜索留痕【tg:seogoogle987】,u6E
- https://www.so.com/s?ie=utf-8&src=360sou_home&_re=0&q=谷歌搜索留痕【tg:seogoogle987】,4qZ
- https://www.sensorshop24.de/catalogsearch/result/index/?type=132&q=谷歌搜索留痕【tg:seogoogle987】,dUL
- https://www.woorden.org/spreekwoord.php?woord=谷歌搜索留痕【tg:seogoogle987】,Ppt
- https://www.kaiyueleather.com/search/谷歌搜索留痕【tg:seogoogle987】,9rv
- https://www.uctronics.com/catalogsearch/result/?q=谷歌搜索留痕【tg:seogoogle987】,pRL
- https://www.writingforward.com/?action=SEARCH&s=谷歌搜索留痕【tg:seogoogle987】,ens
- https://www.remit.co.jp/vi/?s=谷歌搜索留痕【tg:seogoogle987】,j22
- https://www.supersauna.de/catalogsearch/result/?q=谷歌搜索留痕【tg:seogoogle987】,Gcc
- https://www.roberthalf.com/us/en/jobs/all/谷歌搜索留痕【tg:seogoogle987】dwA
- https://www.teacherspayteachers.com/Browse/Price-Range/Free/Search:谷歌搜索留痕【tg:seogoogle987】,Pi8
- https://www.sonepar.ch/fr/search?q=谷歌搜索留痕【tg:seogoogle987】,Bb4
- https://www.universal-music.co.jp/?ID=1sIcckCTeBS8FjzCshAW9w53s8gr691o&s=谷歌搜索留痕【tg:seogoogle987】,EuE
- https://www.zutari.com/search/谷歌搜索留痕【tg:seogoogle987】,jlz
- https://www.skicheck.at/en/?action=CHECK&s=谷歌搜索留痕【tg:seogoogle987】,cXF
- https://www.smarty.net/search?q=谷歌搜索留痕【tg:seogoogle987】,k9O
- https://www.vietnamconsulate-sf.org/?action=CHECK&s=谷歌搜索留痕【tg:seogoogle987】,pdn
- https://www.zisha.com/shop/list.shtml?wap_keyword=谷歌搜索留痕【tg:seogoogle987】,38K
- https://www.searcychamber.com/list/search?AsfnA=DtkTQzs&q=谷歌搜索留痕【tg:seogoogle987】,I20
- https://www.sbaad.no/search/谷歌搜索留痕【tg:seogoogle987】,47o
- https://www.welshmountainzoo.org/shop/index.php?routeproduct/search&tag=谷歌搜索留痕【tg:seogoogle987】,7KT
- https://www.klatreverden.no/search?q=谷歌搜索留痕【tg:seogoogle987】,H7S
- https://www.temu.com/search_result.html?search_key=谷歌搜索留痕【tg:seogoogle987】jkk
- https://www.teamlab.art/es/?submit=谷歌搜索留痕【tg:seogoogle987】,ga8
- https://www.navymwr.org/search/?query=谷歌搜索留痕【tg:seogoogle987】,gDM
- https://www.scq.ubc.ca/?page=2&s=谷歌搜索留痕【tg:seogoogle987】,AfJ
- https://www2.ual.es/ProyectoLates/?s=谷歌搜索留痕【tg:seogoogle987】,ZWY
- https://www.voices.com/talents/search?keywords=谷歌搜索留痕【tg:seogoogle987】,Hwq
- https://www.hanbat.ac.kr/search/front/Search.jsp?qt=谷歌搜索留痕【tg:seogoogle987】MQk
- https://www.simcoemuskokahealth.org/SearchResults.aspx?SearchQuery=谷歌搜索留痕【tg:seogoogle987】,n7b
- https://www.jusoen.com/addreng.asp?p1=谷歌搜索留痕【tg:seogoogle987】Zqs
- https://wydden.com/?ID=r8w9WMSKWkOcmiaFWaUv0dzMdqZWfKtF&s=谷歌搜索留痕【tg:seogoogle987】,wS6
- https://www.oprny.com/search.php?search_query=谷歌搜索留痕【tg:seogoogle987】,1Pl
- https://hsmoa.com/search?query=谷歌搜索留痕【tg:seogoogle987】rNt
- https://www.realsporting.com/buscador?buscar=谷歌搜索留痕【tg:seogoogle987】,93D
- https://www.universal-music.co.jp/search/?q=谷歌搜索留痕【tg:seogoogle987】,4ry
- https://www.varian.com/en-au/search?cat=113&search=谷歌搜索留痕【tg:seogoogle987】,eRk
- https://store.line.me/search/sticker/ja?q=谷歌搜索留痕【tg:seogoogle987】Csf
- https://www.springfieldlibrary.org/?s=谷歌搜索留痕【tg:seogoogle987】,pkO