以下是没有主动健康检查sequenceDiagram participant 客户端 participant 代理服务器 客户端->>代理服务器: 请求数据(0.5s) 代理服务器->>后端1: 连接并请求数据(5s)失败 Note right of 后端1: 机器宕机不可达 代理服务器-->>客户端: 返回失败0.5s(总耗时6s) 客户端->>代理服务器: 重新请求数据(0.5s) 代理服务器->>后端2: 请求数据成功(0.2s) 后端2-->>代理服务器: 返回数据成功(0.2s) 代理服务器-->> 客户端: 返回数据成功0.5s(总耗时1.4s)如果出错的时候,一个请求的平均时长可能会达到(1.4s + 5s) / 2 = (3.2s),比正常访问多了(3.2 - 1.4) = 1.8s,节点的宕机会对系统的稳定性产生较大的影响
以下是主动健康检查,它保证了访问后端服务器组均是正常的状态sequenceDiagram 客户端->>代理服务器: 请求数据(0.5s) loop 健康检查 代理服务器->>服务器组(只访问1): 定时请求,保证存活,1检查成功,2检查失败 end Note right of 服务器组(只访问1): 处理客户端数据 代理服务器 -->> 服务器组(只访问1): 请求数据(0.2s) 服务器组(只访问1) -->> 代理服务器: 返回数据成功(0.2s) 代理服务器-->>客户端: 返回数据成功(0.5s)(总耗时1.4s)服务器2出错的时候,主动检查已经检查出服务器2不可用,负载均衡的时候选择已经把服务器2摘除,所以系统的平均耗时1.4s,系统依然保持稳定
我们需要从配置中读出所有的需要健康检查的类型,即需要去重,把同一个指向的地址过滤掉
配置有可能被重新加载,所以我们需要预留发送配置的方式(或者后续类似nginx用新开进程的方式则不需要),此处做一个预留。
欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) | Powered by Discuz! X3.4 |