本文转载自微信公众号「KK架构师」,作者wangkai。转载本文请联系KK架构师公众号。
心跳是分布式技术中常用的技术手段。心跳,顾名思义,就是以固定的频率向其他节点汇报当前节点状态的方式。收到心跳,一般可以认为发送心跳的这个节点在当前的网络拓扑中是良好的。
当然,心跳汇报时,一般也会携带一些附加的状态、元数据信息、当前节点的信息,以便其他节点管理。
心跳有两种方式:
第一种方式下,target 进程需要定时给 detector 发送消息,告知自己的存活性。而 detector 无需给 target 回复任何消息,只是每隔一段时间去检测 target 进程有没有汇报。
第二种方式更为常见,比如我们的 redis 就是采用这种方式:
- detector -> target: Are you ok?
- target -> detector: Yeah, pretty good.
Detector 发起检测,如果 target 连续 N 次不回复消息,那么 detector 就认为其处于 non-active 状态。
那么常用的心跳检测机制有哪些:
(1)传统的周期检测心跳机制
其检测方法很粗暴:设定一个超时时间 T,只要在 T 之内没有收到对方的心跳包便可认为对方宕机,方法简单有效,使用比较广泛。
所以这个方法的重点就在于这个超时时间 T 的设置,设置的太短了,有可能会因为当前网络阻塞导致误判,让这个节点下线,产生其他不必要的后果;设置的太长,会导致判断“迟缓”,所以需要综合各种情况来权衡和设定。
HDFS 就是使用的这种心跳机制。
(2)累积失效检测机制
随着网路负载的加大,Server 心跳的接收时间可能会大于上限值 T;但当网络压力减少时,心跳接收时间又会小于 T ,如果用一成不变的T 来反映心跳状况,则会造成判断”迟缓“或误判。这个时候我们可以计算心跳延迟的概率,用这个概率来判断是否发生故障,提高准确性。
我们从 hadoop 源码看 DataNode 是如何发送心跳的
这个方法表面看起来是刷新 NameNode,实际上里面做了两件事情,把自己注册到 NameNode 上,另外一件事情是向 NameNode 定时发送心跳。
这里大致说明一下 offerServices 是个什么数据结构。
用一张图来表示吧
那个 offerServices 其实装的就是最左边的 BPOfferService。
每个 BPOfferService 里面有两个 BpServiceActor,每个 BpServiceActor 对应一个 NameNode。
如果是上图中的高可用,那么一主一备两个 NameNode,分别对应一个 BpServiceActor。
所以遍历 offerService 其实就是在遍历整个集群每个联邦的每个 NameNode 节点。
再点进去已经是 Thread 的方法了,可见它其实是个线程。
那我们应该看这个类的 run 方法。
run 方法的上半部分是往 NameNode 注册,下半部分是发送心跳
可以看到这是一个 while 循环,每隔一段时间(dnConf.heartBeatInterval = 3秒)就会执行一次
可以看到 DataNode 的心跳就是采用了周期性检测机制,每隔 3 s ,往所有的 NameNode 发送心跳。
因为它是靠 rpc 通信的,此时 DataNode 是客户端,NameNode 是服务端。
这个时候,我们应该看 NameNodeRpcServer 方法,具体的实现是在这个方法里的。
这个方法里的具体就不看了,(其实也很重要的的)。
大致就是把 DataNode 心跳包的基本信息(比如本节点的存储容量信息等)更新到 NameNode 对应的结构中。
并且更新上一次心跳时间,以便下次判断 DataNode 是否心跳超时。
其实心跳就是这么朴素了。
最后,NameNode 会在心跳的响应中,告诉 DataNode 应该做些什么事情,比如把本节点的 Block 备份到其他节点上去。
也就是说,NameNode 本身不会和 DataNode 通信,而是在心跳信息中告诉 DataNode 该做什么。
本次通过浏览 DataNode 代码了,知道了其实 DataNode 的心跳,就是DataNode 在后台启动了线程,定时向整个集群所有的 NameNode 发送心跳信息,NameNode 会在心跳响应信息中告诉 DataNode 本次该做些什么事情。
零基础如何快速学习Java编程?入行Java开发要有一定的逻辑思维能力,而逻辑思维能...
根据ntldstats.com最新数据显示,截至2016年8月4日, .top域名 已突破300万大关...
一、前言 最近在github上看了soul网关的设计,突然就来了兴趣准备自己从零开始写...
1.你在玩手机要怎样才能让同桌心服口服的帮你看着老师?玩同桌的手机呗! 2.关...
在许多方面,2020年感觉就像一个丢失的一年。远程工作,没有旅行造成了我们最好...
按需计费:按需计费是后付费模式,按弹性云服务器的实际使用时长计费,可以随时...
大家好,我是腾讯云防火墙的产品经理jojen,又见面了,今天在这里和大家聊一聊NA...
前言 本篇是SLS新版告警系列宣传与培训的第一篇 后续我们会推出20 系列直播与实...
C4D 学习笔记 1. 视图与物体控制基本操作 视图切换快捷键 : F1 ~ F5 切换视图 ...
TOP云 1月13日讯,不知是受股市影响还是怎么着,最近 域名 圈似乎达成了广泛的共...