从 0 开始学微服务
胡忠想
微博技术专家
64643 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 43 讲
开篇词 (1讲)
结束语 (1讲)
从 0 开始学微服务
15
15
1.0x
00:00/00:00
登录|注册

17 | 如何识别服务节点是否存活?

防止大量可用服务节点被摘除
设定阈值比例
延迟服务消费者感知最新的服务节点信息
减少注册中心的请求量
服务节点摘除保护机制
心跳开关保护机制
不受影响于注册中心或网络问题
基于服务消费者本身调用来判断服务节点是否可用
服务节点摘除保护机制
心跳开关保护机制
服务消费者没有足够的节点可以调用
注册中心带宽被打满
退化到配置中心的意思
需要修改注册中心中的服务节点信息
注册中心中的服务节点信息不会动态变化
不需要向注册中心汇报心跳信息
根据调用服务提供者是否成功来判定服务提供者是否可用
服务消费者没有足够的节点可以调用
注册中心带宽被打满
处理网络频繁抖动时的问题
变更通知给服务消费者
服务消费者以注册中心中的数据为准
静态注册中心的思路
解决方案
动态注册中心的问题
静态注册中心的情况
优势
服务消费者端的保活机制
动态注册中心的问题
注册中心摘除机制
总结
静态注册中心
动态注册中心
如何识别服务节点是否存活?

该思维导图由 AI 生成,仅供参考

今天我要与你分享如何识别服务节点是否存活,这在服务治理中是十分重要的。在进入正题之前,你可以先复习一下专栏第 5 期,我在讲解注册中心原理的时候,以开源注册中心 ZooKeeper 为例,描述了它是如何管理注册到注册中心的节点的存活的。
其实 ZooKeeper 判断注册中心节点存活的机制其实就是注册中心摘除机制,服务消费者以注册中心中的数据为准,当服务端节点有变更时,注册中心就会把变更通知给服务消费者,服务消费者就会调用注册中心来拉取最新的节点信息。
这种机制在大部分情况下都可以工作得很好,但是在网络频繁抖动时,服务提供者向注册中心汇报心跳信息可能会失败,如果在规定的时间内,注册中心都没有收到服务提供者的心跳信息,就会把这个节点从可用节点列表中移除。更糟糕的是,在服务池拥有上百个节点的的时候,每个节点都可能会被移除,导致注册中心可用节点的状态一直在变化,这个时候应该如何处理呢?
下面就结合我在实践中的经验,给你讲解几种解决方案。

心跳开关保护机制

在网络频繁抖动的情况下,注册中心中可用的节点会不断变化,这时候服务消费者会频繁收到服务提供者节点变更的信息,于是就不断地请求注册中心来拉取最新的可用服务节点信息。当有成百上千个服务消费者,同时请求注册中心获取最新的服务提供者的节点信息时,可能会把注册中心的带宽给占满,尤其是注册中心是百兆网卡的情况下。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文介绍了如何识别服务节点是否存活的重要性以及在实践中的解决方案。首先,作者提到了心跳开关保护机制,通过设置开关来限制注册中心通知服务消费者的频率,以减轻注册中心的负载。其次,作者介绍了服务节点摘除保护机制,即设定一个阈值比例,防止因网络问题导致大量服务提供者节点被摘除而引发“雪崩”效应。最后,作者提出了静态注册中心的思路,即在服务消费者端根据调用服务提供者是否成功来判断服务提供者是否可用,从而避免动态注册中心的不足。作者总结了动态注册中心可能出现的问题,并提出了心跳开关保护机制、服务节点摘除保护机制和静态注册中心三种解决方案。这些解决方案在实践中被证明有效,能够应对网络频繁抖动等复杂场景。文章内容深入浅出,为读者提供了解决实际问题的技术思路和方法。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《从 0 开始学微服务》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(20)

  • 最新
  • 精选
  • pscj
    感觉静态注册中心就完全去中心化了,没有中心的概念了,每个peer自己判断节点的死活,自己维护一套状态表,是这个意思吧?

    作者回复: 对,这个时候注册中心类似一个配置中心了

    2018-11-16
    2
    7
  • 东风微鸣
    你好,我们目前在上的新系统,使用的spring cloud微服务架构,目前刚刚计划改为eureka主动探测机制,目前没听过有设置保护机制,那么如果网络真出问题了,是不是很有可能出现您说的那个注册中心网络占满的问题?

    作者回复: 是的,我记得spring cloud也是有类似的摘除保护机制的

    2018-11-17
    1
  • yan
    只通知10%的用户,那么另外的90%的用户是让他们失败吗?还是后续会再次通知,只是分批次,每次通知10%,知道全部通知完毕?

    作者回复: 因为客户端会隔一段时间来请求,这一次请求没有变化,下一次请求可能就有变化了

    2018-10-18
    2
  • oddrock
    应该以客服端为准,谁使用谁有发言权。 我觉得注册中心的主动心跳探测不应作为客户端摘除不可用服务端节点的依据,而是要作为参考值,比如将这种探测信息发给客户端,客户端在负载均衡时,将这种疑似问题节点降权重或作为备用节点,这样是不是比较好
    2018-09-29
    1
    36
  • xiaoxi666
    相对于动态注册,静态注册的方式把探测任务分散到了服务消费者,在增加服务消费者工作量的同时,再考虑一个问题:如果某个服务被多个消费者调用,那么该服务提供者会收到大量探测请求,但这是不必要的。所以我认为被大量业务依赖的公共的服务提供方应尽可能采用动态注册的方式。敬请指正。
    2018-09-29
    2
    18
  • feimeng0532
    开关或者保护,怎么检测到网络抖动?
    2018-09-29
    1
    10
  • 王鸿运
    对于注册中心网络抖动问题,能否通过下面两种方法解决: 1.服务提供方定时上报心跳,注册中心进行ack确认,并且在ack中告知下次上报的时间间隔(该时间间隔为注册中心剔除节点最大不活跃时间的一半),如果服务提供方在超时时间后未收到ack,采用指数补偿策略进行重试上报n次(比如n=3),这种重试的方式,有可能在网络抖动情况下,因此重试包网络风暴 2.双向探测,注册中心在节点达到剔除时间时,不直接剔除,而是进行主动探测n次(比如n等于3),探测几次还是失败,才剔除,然后通知订阅方更新
    2019-01-14
    1
    4
  • null
    动态注册中心: “心跳开关保护机制”这种机制为了保护注册中心不被挤爆,但对服务消费者不太友善,也有可能会发生大面积消费者请求服务提供者失败的情况。当有 session_timeout 服务提供者节点被摘除时,只通知 10% 的服务消费者。 问题一:是每次随机取 10%,还是之前已通知的服务消费者就不再通知了? 问题二:如何监控判断网络是否频繁抖动,并且如何打开这个开关? 静态注册中心: 控制权反转,由服务消费者维护服务提供者的存活状态,服务提供者节点不再向注册中心汇报心跳信息。 注册中心不再维护服务提供者节点的心跳信息,只有消费者节点首次启动时,从注册中心拉取服务提供者节点信息,而后续便不再获取注册中心的提供者节点信息。即使消费者节点定时获取提供者节点信息,因为注册中心不维护提供者的心路信息,所以这些数据也是不可用的。 问题三:当有新的节点加入注册中心,或者需要从注册中心下线部分节点,服务消费者如何感知? 谢谢古月老师!爱你么么哒~
    2018-09-29
    1
    2
  • 松花皮蛋me
    我们公司是考虑动静结合的,这样添加节点也能主动推送给客户端
    2019-02-17
    1
  • echo_陈
    如果使用静态注册中心,虽然很好的解决了网络波动问题,那新增服务节点……还需要人工更新配置,感觉不是很自动化啊。如果是动态注册中心,启动的节点会自动接入集群里,免配置,更方便……唉,要是动态配置中心能根据请求行为自动探测出网络问题做一些决策就好了哈哈,我想多了
    2018-09-29
    1
收起评论
显示
设置
留言
20
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部