text: (window.webpackJsonp=window.webpackJsonp||[]).push([[69],{622:function(v,e,t){"use strict";t.r(e);var _=t(23),r=Object(_.a)({},(function(){var v=this,e=v.$createElement,t=v._self._c||e;return t("ContentSlotsDistributor",{attrs:{"slot-key":v.$parent.slotKey}},[t("p",[v._v("本文阐述了分布式系统中常见的设计策略。")]),v._v(" "),t("h1",{attrs:{id:"分布式系统设计策略"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#分布式系统设计策略"}},[v._v("#")]),v._v(" 分布式系统设计策略")]),v._v(" "),t("blockquote",[t("p",[v._v("2022/03/01 校对完成")]),v._v(" "),t("p",[v._v("文章更新历史")]),v._v(" "),t("p",[v._v("2022/03/01 初稿。")])]),v._v(" "),t("p",[v._v("分布式系统中需要解决的问题")]),v._v(" "),t("ol",[t("li",[v._v("如何检测当前节点是否存活？")]),v._v(" "),t("li",[v._v("如何保障高可用")]),v._v(" "),t("li",[v._v("容错处理")]),v._v(" "),t("li",[v._v("负载均衡")])]),v._v(" "),t("h3",{attrs:{id:"心跳检测"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#心跳检测"}},[v._v("#")]),v._v(" 心跳检测")]),v._v(" "),t("p",[v._v("检测节点故障的通用手段：心跳检测")]),v._v(" "),t("p",[v._v("心跳，就是以固定的频率向其他节点汇报当前节点状态的方式。收到心跳，一般可以认为一个节点和现在的网络是良好的。")]),v._v(" "),t("p",[v._v("心跳汇报时，一般会携带附加状态、元数据信息等，便于管理。")]),v._v(" "),t("p",[t("img",{attrs:{src:"https://cdn.jsdelivr.net/gh/terwer/upload/img/image-20220410224103189.png",alt:"image-20220410224103189"}})]),v._v(" "),t("p",[v._v("若Sever没有收到Node3的心跳时，Server认为Node3失联。")]),v._v(" "),t("p",[v._v("但是失联只是Node3失去联系，不代表Node3存在故障，有可能是Node3处于繁忙状态，导致调用检测超时，也有可能Server与Node3直接出现网络闪断或者链路故障。")]),v._v(" "),t("p",[v._v("因此，心跳不是万能的。收到心跳可以确认正常，但是收不到心跳，不能认定该节点已经死亡。这时候，可以通过一些方法帮助Server做决定：")]),v._v(" "),t("p",[v._v("周期性心跳检测机制、累计失效检测机制。")]),v._v(" "),t("ul",[t("li",[t("p",[v._v("周期性心跳检测机制")]),v._v(" "),t("p",[v._v("Server每隔t秒向Node集群发送检测请求，设定超时时间，如果超过超时时间，则判断死亡，可以把该节点踢出集群。")]),v._v(" "),t("p",[t("img",{attrs:{src:"https://cdn.jsdelivr.net/gh/terwer/upload/img/image-20220410230057024.png",alt:"image-20220410230057024"}})])]),v._v(" "),t("li",[t("p",[v._v("累计失效检测机制")]),v._v(" "),t("p",[v._v("在周期心跳检测机制的基础上，统计一定周期内节点的返回情况（包括超时和正确返回），用来计算此节点的死亡概率。")]),v._v(" "),t("p",[v._v("对于宣告濒临死亡的节点，可以发起有限次的重试，以做进一步判断，如果超过次数，可以把该节点踢出集群。")]),v._v(" "),t("p",[t("img",{attrs:{src:"https://cdn.jsdelivr.net/gh/terwer/upload/img/image-20220410230513249.png",alt:"image-20220410230513249"}})])])])])}),[],!1,null,null,null);e.default=r.exports}}]);