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

destoon 网站搬家h5开发公司

destoon 网站搬家,h5开发公司,深圳百度快速排名优化,旅游的网页设计模板在分布式系统中#xff0c;etcd 的一致性与高效性得益于其强大的 Raft 协议模块。而 processInternalRaftRequestOnce 是 etcd 服务器处理内部 Raft 请求的核心方法之一。本文将从源码角度解析这个方法的逻辑流程#xff0c;帮助读者更好地理解 etcd 的内部实现。 方法源码 …在分布式系统中etcd 的一致性与高效性得益于其强大的 Raft 协议模块。而 processInternalRaftRequestOnce 是 etcd 服务器处理内部 Raft 请求的核心方法之一。本文将从源码角度解析这个方法的逻辑流程帮助读者更好地理解 etcd 的内部实现。 方法源码 func (s *EtcdServer) processInternalRaftRequestOnce(ctx context.Context, r pb.InternalRaftRequest) (*applyResult, error) {ai : s.getAppliedIndex()ci : s.getCommittedIndex()if ci aimaxGapBetweenApplyAndCommitIndex {return nil, ErrTooManyRequests}r.Header pb.RequestHeader{ID: s.reqIDGen.Next(),}// check authinfo if it is not InternalAuthenticateRequestif r.Authenticate nil {authInfo, err : s.AuthInfoFromCtx(ctx)if err ! nil {return nil, err}if authInfo ! nil {r.Header.Username authInfo.Usernamer.Header.AuthRevision authInfo.Revision}}data, err : r.Marshal()if err ! nil {return nil, err}if len(data) int(s.Cfg.MaxRequestBytes) {return nil, ErrRequestTooLarge}id : r.IDif id 0 {id r.Header.ID}ch : s.w.Register(id)cctx, cancel : context.WithTimeout(ctx, s.Cfg.ReqTimeout())defer cancel()start : time.Now()err s.r.Propose(cctx, data)if err ! nil {proposalsFailed.Inc()s.w.Trigger(id, nil) // GC waitreturn nil, err}proposalsPending.Inc()defer proposalsPending.Dec()select {case x : -ch:return x.(*applyResult), nilcase -cctx.Done():proposalsFailed.Inc()s.w.Trigger(id, nil) // GC waitreturn nil, s.parseProposeCtxErr(cctx.Err(), start)case -s.done:return nil, ErrStopped} }方法解析 1. 校验状态与索引 ai : s.getAppliedIndex() ci : s.getCommittedIndex() if ci aimaxGapBetweenApplyAndCommitIndex {return nil, ErrTooManyRequests }getAppliedIndex 和 getCommittedIndex 分别获取当前节点的已应用索引和已提交索引。如果两者的差值过大说明节点存在过多未应用的日志条目可能导致性能问题因此直接返回错误。 maxGapBetweenApplyAndCommitIndex定义了允许的最大索引差距。防止机制避免提交速度过快导致内存积压。 2. 生成请求头 r.Header pb.RequestHeader{ID: s.reqIDGen.Next(), }每个请求分配一个唯一的 ID以便后续跟踪和处理。 3. 身份验证检查 if r.Authenticate nil {authInfo, err : s.AuthInfoFromCtx(ctx)if err ! nil {return nil, err}if authInfo ! nil {r.Header.Username authInfo.Usernamer.Header.AuthRevision authInfo.Revision} }目的除认证请求外其他请求需要验证用户身份。逻辑 调用 AuthInfoFromCtx 从上下文中提取用户身份。将身份信息写入请求头供后续处理。 4. 请求大小检查 if len(data) int(s.Cfg.MaxRequestBytes) {return nil, ErrRequestTooLarge }目的防止超大请求导致内存或网络问题。机制检查请求序列化后的大小是否超过配置的最大限制。 5. 注册请求等待通道 id : r.ID if id 0 {id r.Header.ID } ch : s.w.Register(id)注册通道使用请求 ID 在 s.wwait 组件中注册一个等待通道用于异步获取结果。 6. 发起 Raft 提案 cctx, cancel : context.WithTimeout(ctx, s.Cfg.ReqTimeout()) defer cancel()start : time.Now() err s.r.Propose(cctx, data)发起提案调用 s.r.Propose 将请求数据交给 Raft 模块进行分布式一致性处理。超时控制通过 Context.WithTimeout 设置提案的最大执行时间避免长期阻塞。错误处理如果提案失败增加失败计数并触发通道清理。 7. 等待提案结果 select { case x : -ch:return x.(*applyResult), nil case -cctx.Done():proposalsFailed.Inc()s.w.Trigger(id, nil) // GC waitreturn nil, s.parseProposeCtxErr(cctx.Err(), start) case -s.done:return nil, ErrStopped }等待逻辑 通道 ch正常返回应用结果。上下文超时处理超时错误并清理等待通道。服务关闭直接返回停止错误。 触发机制使用 Trigger 清理通道避免资源泄露。 8. 性能指标统计 proposalsPending.Inc()增加当前挂起的提案计数。proposalsFailed.Inc()统计失败提案次数。 关键逻辑总结 processInternalRaftRequestOnce 方法的核心逻辑可分为以下几个阶段 预检查检查索引状态、请求大小和用户认证。请求处理序列化请求并将其提交到 Raft 模块。结果等待通过通道或超时控制获取提案的处理结果。 流程图 #mermaid-svg-6CCZUXMS3ueHkR48 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-6CCZUXMS3ueHkR48 .error-icon{fill:#552222;}#mermaid-svg-6CCZUXMS3ueHkR48 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-6CCZUXMS3ueHkR48 .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-6CCZUXMS3ueHkR48 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-6CCZUXMS3ueHkR48 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-6CCZUXMS3ueHkR48 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-6CCZUXMS3ueHkR48 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-6CCZUXMS3ueHkR48 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-6CCZUXMS3ueHkR48 .marker.cross{stroke:#333333;}#mermaid-svg-6CCZUXMS3ueHkR48 svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-6CCZUXMS3ueHkR48 .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-6CCZUXMS3ueHkR48 .cluster-label text{fill:#333;}#mermaid-svg-6CCZUXMS3ueHkR48 .cluster-label span{color:#333;}#mermaid-svg-6CCZUXMS3ueHkR48 .label text,#mermaid-svg-6CCZUXMS3ueHkR48 span{fill:#333;color:#333;}#mermaid-svg-6CCZUXMS3ueHkR48 .node rect,#mermaid-svg-6CCZUXMS3ueHkR48 .node circle,#mermaid-svg-6CCZUXMS3ueHkR48 .node ellipse,#mermaid-svg-6CCZUXMS3ueHkR48 .node polygon,#mermaid-svg-6CCZUXMS3ueHkR48 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-6CCZUXMS3ueHkR48 .node .label{text-align:center;}#mermaid-svg-6CCZUXMS3ueHkR48 .node.clickable{cursor:pointer;}#mermaid-svg-6CCZUXMS3ueHkR48 .arrowheadPath{fill:#333333;}#mermaid-svg-6CCZUXMS3ueHkR48 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-6CCZUXMS3ueHkR48 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-6CCZUXMS3ueHkR48 .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-6CCZUXMS3ueHkR48 .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-6CCZUXMS3ueHkR48 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-6CCZUXMS3ueHkR48 .cluster text{fill:#333;}#mermaid-svg-6CCZUXMS3ueHkR48 .cluster span{color:#333;}#mermaid-svg-6CCZUXMS3ueHkR48 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-6CCZUXMS3ueHkR48 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 超出限制 正常 超出限制 正常 正常 超时 服务关闭 收到内部请求 检查已应用索引与已提交索引 返回 ErrTooManyRequests 生成请求头并检查认证信息 检查请求大小 返回 ErrRequestTooLarge 注册等待通道 调用 Raft 提案 等待结果 返回提案结果 返回超时错误 返回 ErrStopped zz总结 processInternalRaftRequestOnce 是 etcd 服务端处理内部 Raft 请求的重要方法它结合了请求校验、身份认证、Raft 提案以及结果返回的完整逻辑链条。理解其实现可以帮助我们深入掌握 etcd 的核心一致性协议和服务端处理流程。
http://www.dnsts.com.cn/news/268465.html

相关文章:

  • 北京网站优化外包公司优化外包服务公司
  • 腾讯视频网站建设维护免费建网站入驻
  • 广州响应式网站制作免费招收手游代理
  • cms 美容网站 模版网站开发经验简历
  • 福建省工程建设信息官方网站深圳市网站备案需求
  • 微网站价格湖南省建设厅气源适配性目录2022
  • 大专网站建设论文网站建设款分录
  • 中国建设银行官方网站网络舆情监测系统软件
  • html5网站开发开题报告wordpress 打印sql
  • 百度网站诚信认证亚马逊开店流程及费用
  • 双语外贸网站源码网站建设租用服务器
  • 美工做网站怎么收费wordpress动态特效
  • 做网站开发的想接私活网站开发制作云盘
  • 网站推广优化外包公司wordpress主题开发 书
  • 国外网站做freelancer图书馆网站建设研究
  • 永康做网站的公司wordpress如何换内页模板
  • 网站到期了seo外链工具软件
  • 食品网站网页设计宁波广告公司网站建设
  • wordpress如何导航网站青岛专业网络推广定制
  • t恤在线设计网站合肥网站建设兼职
  • 网站app封装怎么做国内近期新闻热点大事件
  • 广东贸易网站开发网站图片特效代码
  • 手机单页面网站模板全国事业单位招聘网
  • 网站根目录在哪儿学网站开发难吗
  • 广东专业企业网站建设定制网站建设公司费用
  • 专做母婴的网站四川省建设厅官方网站三内人员
  • 电子书网站开发wordpress标签调用代码
  • 长沙网站建设商城黑龙江做网站找谁
  • 淘宝联盟怎么做网站沈阳专门代做网站的
  • 做网站怎么找客户联系方式租用服务器一般是谁帮助维护网站安全