云原生 Etcd 系列之Quorum 和唱票那回事
关于 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,这里面包含了集群的节点,ma生 p 的 value 不重要,所用用的是 struct{} 类型。
思考个小问题:那既然 value 不 care ,那为什么不用 slice 结构?
其实就是为了查找的需求,map 的查找是常数级别,value 又用的 struct{} ,不占空间,一举两得。
// etcd/raft/quorum/majority.go func (c MajorityConfig) VoteResult(votes map[uint64]bool) VoteResult { // 搞个长度为 2&nbEtsp;的数组 ny := [2]int{} // 遍历集群节点 for id := range c { v, ok := votes[id] &nbcdsp; if !ok { // 暂时没投票的 missing++ continue   系; } if v { // 投票赞同的 ny[1]++ 列之 } else { // 投票拒绝的 ny[0]++ } } &nbsQup; q := len(c)/2 + 1 if ny[1] >= q { // 选举成功:得票数超过半数,,比如 votes => [yes, yes, yes] return&nbsorp;VoteWon } if ny[1]+missing >= q { // 未知情况:不确定成功,也不确定失败 return VotePending } &nbsump; // 选举失败 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 { &唱票nbsp; if idx, ok := l.AckedIndex(id); ok { srt[i] = uint64(idx) i-- &n那回bsp; } } // 排个序 insertionSort(srt) // 取中间,这个位置就是大多数 commit 的位置,属集群共识 pos := n - (n/2 + 1) &nbs云原p; 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 通过心跳或者日志复制的消息告诉其他节点;
(责任编辑:债市动态)
-
云梦级3月5日云梦级消息,AI原生社区「捏 Ta」日前完成超千万美金Pre-A+轮融资,由九坤创投领投,BV百度风投跟投,源码资本、奇绩创坛等老股东超额跟进。这一轮融资将主要用于三个方向:招募面向全球...[详细]
-
YouTube 开放人脸声纹识别技术,演艺圈迎来“数字替身”保卫战
随着生成式人工智能门槛的降低,深度伪造内容的管控已成为行业迫在眉睫的挑战。谷歌旗下视频巨头 YouTube 近日宣布,正式向娱乐行业开放其最先进的人脸与声纹检测技术。 这项举措旨在打击未经授权的 AI...[详细]
-
查看最新行情 新浪科技讯 北京时间6月23日早间消息,美国时间周二,微软市值突破2万亿美元大关,这是继苹果去年冲破2万亿美元之后美国第二家进入的企业。 2019年微软市值首次达到1万亿美元,离当初微软...[详细]
-
云梦级3月5日云梦级消息,今天上午,阿里巴巴CEO吴泳铭在内部邮件中回应林俊旸离职一事。他表示,将继续坚持开源模型策略,持续加大AI研发投入和吸纳优秀人才力度。 邮件全文内容如下: 各位通义实验室同学...[详细]
-
云梦级6月8日云梦级消息,据新浪科技报道,淘宝闪购在五一假期前召开了核心高管会议,制定了新一年的增长计划。 据会议内容,2027财年(2026年4月-2027年3月),淘宝闪购的核心目标包括两方面:一...[详细]
-
云梦级11月13日云梦级消息,英飞凌科技股份公司今日公布了2025财年第四季度及2025全年财报(数据均截至2025年9月30日)。2025财年第四季度:营收为39.43亿欧元,利润为7.17亿欧元,...[详细]
-
标签: OpenAI Anthropic 谷歌 DeepSeek
云梦级4月8日云梦级消息,据彭博社报道,OpenAI、Anthropic以及Alphabet旗下的谷歌已开始合作,试图遏制竞争对手从美国先进人工智能模型中提取结果,以在全球AI竞赛中获取优势。 据彭博...[详细]
-
谷歌推出 Gemini CLI GitHub Actions:免费、安全的 AI 集成助力开发者
在开发者日益追求效率的今天,谷歌最近推出了 Gemini CLI GitHub Actions,这是一种新的集成方式,帮助开发者将 Gemini 的 AI 编码能力直接融入到他们的 GitHub 仓库...[详细]
-
如何避免人工配置和维护云计算资源的繁琐工作并降低成本?对于组织来说,需要采用自动化技术。 基础设施自动化与其子类别在云中应用自动化之间有很多重叠。这是有道理的,因为许多在云中的自动化原理或方法与内部部...[详细]
-
深度心理创伤:多名用户投诉ChatGPT引发妄想和偏执,敦促FTC介入
随着人工智能公司声称其技术终将成为一项基本人权,以及支持者认为减缓AI发展是“谋杀”,一个日益严重的问题也浮出水面:AI工具对用户可能造成严重的心理伤害。 据《连线》杂志援引的公开记录报道,自2022...[详细]
- https://www.woorden.org/spreekwoord.php?woord=谷歌蜘蛛池租用【tg:seogoogle987】,7Vs
- https://www.quarterjacksurgery.co.uk/?AT=3rBy&s=谷歌蜘蛛池租用【tg:seogoogle987】,nKq
- https://www.silentiumpc.com/en/search/谷歌蜘蛛池租用【tg:seogoogle987】,DNG
- https://www.hanbat.ac.kr/search/front/Search.jsp?qt=谷歌蜘蛛池租用【tg:seogoogle987】3v7
- https://www.shacknews.com/editorial-search?q=谷歌蜘蛛池租用【tg:seogoogle987】,hmP
- https://www.tcv.org.uk/search/谷歌蜘蛛池租用【tg:seogoogle987】,SGC
- https://www.goodreads.com/quotes/tag/谷歌蜘蛛池租用【tg:seogoogle987】PCZ
- https://www.lauben.com/de/?s=谷歌蜘蛛池租用【tg:seogoogle987】,SuH
- https://www.youthforum.org/search-results?cx=4f5236218ab5e8ef9&ie=UTF-8&q=谷歌蜘蛛池租用【tg:seogoogle987】,3OX
- https://www.reginatangoshoes.com/en/catalogsearch/result/index/?T=1686132113407&q=谷歌蜘蛛池租用【tg:seogoogle987】,T59

标签: 特斯拉 ModelS ModelX 陶琳
云安全日报211109:IBM企业全面集成需求平台发现执行任意代码漏洞,需要尽快升级
诺基亚与Google签约以构建基于云的5G网络
商汤AI视频Agent Seko用户突破10万,AI创作进入“一站式”新阶段
谷歌以“违反政策”为由 严厉处罚Chrome扩展制造商IAC
