首页 > 其他分享 >《RPC实战与核心原理》学习笔记Day8

《RPC实战与核心原理》学习笔记Day8

时间:2023-01-25 22:33:42浏览次数:43  
标签:状态 调用 服务 Day8 接口 RPC 笔记 心跳 节点

09 | 健康检测:这个节点挂了,为啥还要疯狂发请求?

服务调用方在每次调用服务提供方的服务时,RPC框架会根据路由和负载均衡算法选择一个具体的IP地址,为了保证请求成功,我们需要确保每次选择出来的IP对应的连接是健康的。

调用方和集群节点之间的网络状况是瞬息万变的,两者之间可能会出现闪断或者网络设备损坏的情况,为了解决这个问题,我们的终极解决方案就是让调用方实时感知到节点的变化。

业内经常用来检测服务节点是否可用的方法是用心跳机制。心跳机制就是服务调用方每隔一段时间就问一下服务提供方,“兄弟,你还好吗?”,然后服务提供方诚实地告诉调用方它目前的状态。

服务提供方的状态一般会有三种情况:

  1. 健康状态:建立连接成功,并且心跳探活也一直成功。
  2. 亚健康状态:建立连接成功,但是心跳请求连续失败。
  3. 死亡状态:建立连接失败。

上述三种状态是可以变转变的。

一个节点从健康状态过渡到亚健康状态的前提是连续“心跳失次数必须达到某个阈值。

只关心服务节点网络稳定,会有2个问题:

  1. 调用方每个接口的调用频次不一样,有的接口可能1秒内调用上百次,有的接口可能半个小时才会被调用一次,所以我们不能简单的把失败总次数当做判断条件。
  2. 服务的借口响应时间也不一样,有的接口可能1ms,有的可能是10s,我们不能使用TPS来作为谈判条件。

我们可以使用”可用率“,它的计算方式是某一个时间窗口内接口调用的成功次数的百分比。当可用率低于某个比例就认为这个节点存在问题,需要把它转移到亚健康列表,这样既考虑了高低频的调用接口,也兼顾了接口响应时间不同的问题。

我们在部署时,需要注意将检测程序部署到多个机器里面,分布在不同的机架,甚至不同的机房。

标签:状态,调用,服务,Day8,接口,RPC,笔记,心跳,节点
From: https://www.cnblogs.com/wing011203/p/17067383.html

相关文章

  • 【笔记】gitlab+openldap使用memberof筛选登录用户
    这几天在搞kerberos+nfs4没搞成之前搞了个openldap实现了分散控制集中管理(不是DCS...)gitlab和nexus也支持ldap虽然都不咋好用但是在搞gitlab的时候发现memberOf这个玩......
  • JavaScript学习笔记—Map
    Map用来存储键值对结构的数据(key-value)Map中任何类型的值都可以成为数据的key1.创建:newMap()2.属性和方法:(1)map.size()获取map中键值对的数量(2)map.set(key,val......
  • JavaScript学习笔记—使用JSON进行深复制
    constobj={name:"孙悟空",friend:{name:"猪八戒"}};//对obj进行浅复制constobj2=Object.assign({},obj);//对obj进行深复制constobj3=s......
  • JavaScript学习笔记—对象的序列化
    JS中的对象使用时都是存在于计算机的内存中序列化指将对象转换为一个可以存储的格式,在JS中对象的序列化通常是将一个对象转换为字符串(JSON字符串)序列化的用途,对象转换为......
  • 9--Websoket学习 | 青训营笔记
    这是我参与「第五届青训营」伴学笔记创作活动的第9天简介WebSocket是基于TCP/IP协议,独立于HTTP协议的通信协议。双向通讯,有状态,客户端一(多)个与服务端一(多)双向实时响......
  • JavaScript学习笔记—对象的解构
    constobj={name:"孙悟空",age:18,gender:"男"};let{name,age,gender}=obj;//声明变量同时解构变量console.log(name,age,gender);//孙悟空18男let......
  • JavaScript学习笔记—数组的解构赋值
    constarr=["孙悟空","猪八戒","沙和尚"];let[a,b,c]=arr;//解构赋值console.log(a,b,c);//孙悟空猪八戒沙和尚let[d,e,f,g]=["唐僧","白骨精",......
  • 基环树学习笔记
    基环树以下内容参考:https://www.cnblogs.com/fusiwei/p/13815549.html概念基环树也叫环套树,标准定义是一个有\(n\)个节点\(n\)条边的联通图,如果不是联通的,则称其是......
  • 学习笔记——NoSQL数据库;Redis概述;redis中常用的数据类型(key、string)
    2023-01-24一、NoSQL数据库1、NoSQL数据库的简介NoSQL(NoSQL=NotOnlySQL),即“不仅仅是SQL”,泛指非关系型的数据库。NosQL不依赖业务逻辑方式存储,而以简单的key-value模......
  • JavaScript学习笔记—函数的bind
    bind():函数的方法,可以用来创建一个新的函数bind可以为新函数绑定thisbind可以为新函数绑定参数functionfn(a,b,c){console.log("fn执行了~~~",this);consol......