当前位置: 首页 > news >正文

贵阳做网站云南网站建

贵阳做网站,云南网站建,深圳设计网站开发,企业如何建设网站作者 | 奇伢来源 | 奇伢云存储关于 Quorum 的两个维度前几回说了那么多框架#xff0c;设计思想的文章。今天分享一个很小的点#xff0c;etcd 的 quorum 是怎么实现的#xff1f;Quorum 机制本质就是一个关于多数派的事情#xff0c;这个多数派应用的有两个方面#xff1… 作者 | 奇伢来源 | 奇伢云存储关于 Quorum 的两个维度前几回说了那么多框架设计思想的文章。今天分享一个很小的点etcd 的 quorum 是怎么实现的Quorum 机制本质就是一个关于多数派的事情这个多数派应用的有两个方面选举过程获得多数节点投票的节点才能获胜成为 Leader 运行过程被多数节点 commit 的日志位置这个才是被集群可靠记录的位置。被集群 commit 的日志才能被应用 apply 那么这里有两个小思考问题既然是选举过程那怎么选举结果唱票的既然是运行过程那集群的这些节点怎么确认集群的 commit 位置有选举自然有唱票唱票是在选举流程中的一个步骤。还记得以前选班干部的时候在黑板上写“正”字谁得票多谁就获胜当选。etcd 里面也有选举也就是 Leader 的选举。Leader 获胜的依据是的票满足大多数也就是满足 quorum 机制。今天我们就来看看 etcd 的唱票是怎么做的很简单的思路我们给每个参与选举的朋友计数得票超过半数的那么就胜出。比如说 ABCDE 五个人竞选那么得到 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{} 不占空间一举两得。唱票和集群 commit 的实现就是它的方法我们先看下唱票的实现// etcd/raft/quorum/majority.go func (c MajorityConfig) VoteResult(votes map[uint64]bool) VoteResult {// 搞个长度为 2 的数组ny : [2]int{}// 遍历集群节点for id : range c {v, ok : votes[id]if !ok {// 暂时没投票的missingcontinue}if v {// 投票赞同的ny[1]} else {// 投票拒绝的ny[0]}}q : len(c)/2  1if ny[1]  q {// 选举成功得票数超过半数比如 votes  [yes, yes, yes]return VoteWon}if ny[1]missing  q {// 未知情况不确定成功也不确定失败return VotePending}// 选举失败return VoteLost }唱票的实现很简单就如下几个步骤遍历集群节点统计谁赞同了、谁拒绝了、谁还没投票唱票的结果有三种成功失败待定赞同投票的超过半数 len(c)/21 则胜利这实现可太简单了就是一个遍历投票结果写“正”字“正”字超过半数则胜出。集群的节点怎么确认集群的 commit 位置集群内被多数节点 commit 的位置才是集群的 commit 点。也就是说这个也需要满足 quorum 。这个就有意思了。关键步骤排序然后取中间的位置。取的这个中间的位置就是满足 quorum 的 commit 。// etcd/raft/quorum/majority.go func (c MajorityConfig) CommittedIndex(l AckedIndexer) Index {// 遍历集群节点取出每个节点的 commitfor 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 通过心跳或者日志复制的消息告诉其他节点往期推荐虚幻引擎5上的《黑客帝国》全新体验爱了爱了元宇宙真的是割韭菜吗Redis会遇到的坑你踩过几个核弹级漏洞把log4j扒给你看点分享点收藏点点赞点在看
http://www.sadfv.cn/news/330827/

相关文章:

  • 电商网站前后台模板廊坊关键词优化
  • 寿光网站建设报价公司移动网站建设
  • 关于美食网站的问卷调查怎么做网站开发预算多少
  • 百色网站优化网站开发php支付接口
  • 建设网站的账务处理珠海新盈科技网站建设
  • 网站开发明细ie浏览器打开建设银行网站
  • 营销型网站建设哪家公司好淘宝关键词搜索工具
  • 做网站需要买空间么 服务器郑州网站排
  • 兰州网站制作公司100推荐常州微信网站建设
  • 最佳外贸英文网站模板怎么进入自己网站主机地址
  • 建设上海公司网站服务器个人买能干什么
  • 淘宝客做软件网站appwordpress cpu占用高
  • 山东网站开发工作室wordpress添加单页模板
  • 宿州市做网站的公司php模拟登陆wordpress
  • 宁波住房和建设局网站首页公司网站界面如何设计
  • 网站制作功能多少钱专门做签到的网站
  • 做外贸仿牌都用哪些网站小程序开发公司哪家好?哪家最好?
  • 苏州做企业网站做网站业务好干吗
  • 杭州电子商务网站建设品牌营销策划成功案例
  • 网站 流量攻击怎么办网上平面设计培训班
  • 珲春市建设局网站制作模板网站
  • 做网站 徐州中国建设银行官网站黄金部王毅
  • 江苏省示范校建设专题网站网站设计ai
  • 任务网站开发wordpress二次元源码
  • 村镇建设年度报表登录网站关键词指数查询工具
  • 网站建设明细报价做网站网站危险吗
  • 最便宜的网站建设网站结构的规划与设计
  • 网站制作要花多少钱盐城网站平台建设
  • 做搜狗网站优化快速排百度app 浏览器
  • 中联汇科 网站建设仿制手机网站教程