您可以捐助,支持我们的公益事业。

1元 10元 50元





认证码:  验证码,看不清楚?请点击刷新验证码 必填



  求知 文章 文库 Lib 视频 iPerson 课程 认证 咨询 工具 讲座 Model Center 汽车系统工程   模型库  
会员   
   
OCSMP认证课程:OCSMP-MU
4月9-10日 线上
基于模型的数据治理与数据中台
5月19-20日 北京+线上
网络安全原理与实践
5月21-22日 北京+线上
     
   
 订阅
  捐助
springcloud-consul-ribbon详解
 
  2079  次浏览      32
 2020-8-5
   
 
编辑推荐:
本文首先介绍ribbon的几个核心类,并通过图示介绍了负载均衡器的启动,希望对您的学习有所帮助。
本文来自于程序员大本营,由火龙果软件Alice编辑、推荐。

Ribbon是一个客户端负载均衡器,它可以很好地控制HTTP和TCP客户端的行为。Feign已经默认使用了Ribbon(参考文章)

一、先来看看ribbon的几个核心类

1、IClientConfig 默认实现类DefaultClientConfigImpl,主要用来配置ribbon客户端的相关属性配置

2、ServerListUpdater默认实现类PollingServerListUpdater,主要负责动态更新服务器列表

start方法调用后会启动一个定时任务,延时1s开始执行,以每30s的时间间隔周期执行

周期时间间隔可以通过ribbon.ServerListRefreshInterval=1000或者ribbonClientName.ribbon.ServerListRefreshInterval=1000来设置

start方法的启动由DynamicServerListLoadBalancer初始化的时候执行调用

3、ServerList获取服务器列表

默认实现类ConfigurationBasedServerList,默认是从配置文件取服务器列表,这样配置[ribbonClinetName].ribbon.listOfServers=xxx,xxx

ConsulServerList引入consul作服务发现的实现类,主要负责获取注册中心的服务器列表

备注:可以通过配置来扩展自己的ServerList实现,像这样:[ribbonClient].ribbon.NIWSServerListClassName=类名

4、ServerListFilter服务器列表过滤器

默认实现类ZonePreferenceServerListFilter主要根据分区来过滤服务器列表

HealthServiceServerListFilter引入consul服务发现的实现类,主要负责过滤consul健康检查通过的服务器列表(在ConsulServerList中会获取所有的服务器列表,包括健康检查没有通过的服务器)

备注:可以通过配置来扩展自己的ServerList实现,像这样[ribbonClient].ribbon.NIWSServerListFilterClassName=类名

5、IPing检查服务器是否或者

默认实现DummyPing,这是一个假的检测着,永远返回是true

ConsulPing,引入consul服务发现的实现类,主要根据consul返回的checks参数来判断服务器是否活着,跟HealthServiceServerListFilter的过滤判断一样

备注:可以通过配置来扩展自己的ServerList实现,像这样:[ribbonClient].ribbon.NFLoadBalancerPingClassName=类名

6、IRule负载均衡选择器

默认实现ZoneAvoidanceRule,复合判断server所在区域的性能和server的可用性选择server

RandomRule:随机选择一个server

RoundRobinRule:roundRobin方式轮询选择server

RetryRule:对选定的负载均衡策略机上重试机制。

WeightedResponseTimeRule:根据响应时间分配一个weight,响应时间越长,weight越小,被选中的可能性越低。

AvailabilityFilteringRule:过滤掉那些因为一直连接失败的被标记为circuit tripped的后端server,并过滤掉那些高并发的的后端server(active connections 超过配置的阈值)

BestAvailableRule:选择一个最小的并发请求的server

7、ILoadBalancer负载均衡总控制器,默认实现类ZoneAwareLoadBalancer,其启动了整个负载均衡客户端

可以通过配置来扩展自己的ServerList实现,像这样:[ribbonClient].ribbon.NFLoadBalancerClassName=类名

负载均衡器启动时序图:

初始化时首先会初始化一个定时任务,每隔30s执行一次,缓存里面会保存所有从注册中心获取实例列表allServerList和经过ping成功的实例列表upServerList,但是负载均衡的时候拿到的列表是allServerList而非upServerList,不明白这个ping的意义在哪里

启动一个定时任务,定时从注册中心拉取服务列表,每个30s执行一次

初始化获取服务列表,拉取到的服务列表经过ServiceFilter过滤后保存在缓存里面

当客户端发起调用的时候会调用ILoadBalancer的chooseServer方法,根据IRule的负载均衡算法选择一个实例返回给调用者.

 
   
2079 次浏览       32
相关文章

企业架构、TOGAF与ArchiMate概览
架构师之路-如何做好业务建模?
大型网站电商网站架构案例和技术架构的示例
完整的Archimate视点指南(包括示例)
相关文档

数据中台技术架构方法论与实践
适用ArchiMate、EA 和 iSpace进行企业架构建模
Zachman企业架构框架简介
企业架构让SOA落地
相关课程

云平台与微服务架构设计
中台战略、中台建设与数字商业
亿级用户高并发、高可用系统架构
高可用分布式架构设计与实践
最新活动计划
嵌入式软件架构设计 12-11[北京]
LLM大模型与智能体开发实战 12-18[北京]
嵌入式软件测试 12-25[北京]
AI原生应用的微服务架构 1-9[北京]
AI大模型编写高质量代码 1-14[北京]
需求分析与管理 1-22[北京]
 
最新文章
大数据平台下的数据治理
如何设计实时数据平台(技术篇)
大数据资产管理总体框架概述
Kafka架构和原理
ELK多种架构及优劣
最新课程
大数据平台搭建与高性能计算
大数据平台架构与应用实战
大数据系统运维
大数据分析与管理
Python及数据分析
更多...   
成功案例
某通信设备企业 Python数据分析与挖掘
某银行 人工智能+Python+大数据
北京 Python及数据分析
神龙汽车 大数据技术平台-Hadoop
中国电信 大数据时代与现代企业的数据化运营实践
更多...