Ribbon

博客引用处(以下内容在原有博客基础上进行补充或更改,谢谢这些大牛的博客指导):
深入理解Ribbon之源码解析

概念:
Loadbalanceclient 初始化的时候,向eureka获取注册列表
并且向通过10s一次向EurekaClient发送“ping”,来判断服务的可用性,如果服务的可用性发生了改变或者服务数量和之前的不一致,则更新或者重新拉取。
LoadBalancerClient有了这些服务注册列表,就可以根据具体的IRule来进行负载均衡。 (IRule 负载均衡的策略)

结构:

Netflix
|
Riibon 负载均衡器
|
LoadBalancerClient 负载均衡的客户端(接口)-继承于ServiceInstanceChooser
-它的实现类RibbonLoadBalancerClient
{
LoadBalancerClient 3个方法
执行请求excute()
重构URL reconstructURI()

ServiceInstanceChooser的方法(
choose(String serviceId);
用来根据serviceId来获取ServiceInstance

RibbonLoadBalancerClient 负载最终的负载均衡的请求处理

RibbonLoadBalancerClient的源码中
,其中choose()方法是选择具体服务实例的一个方法。该方法通过getServer()方法去获取实例,经过源码跟踪,最终交给了ILoadBalancer类去选择服务实例。
前提需求:
1,它需要一组可供选择的服务注册列表信息。
2,根据特定方法去选择服务。
ILoadBalancer

实现类为DynamicServerListLoadBalancer
类中配置以下信息,IClientConfig、IRule、IPing、ServerList、ServerListFilter和ILoadBalancer
解释:
IClientConfig 用于对客户端或者负载均衡的配置
IRule用于复杂均衡的策略,它有三个方法,其中choose()是根据key 来获取server,setLoadBalancer()和getLoadBalancer()是用来设置和获取ILoadBalancer的
IRule有很多默认的实现类,这些实现类根据不同的算法和逻辑来处理负载均衡
IPing来判断该server是否有响应,从而判断该server是否可用。它有一个isAlive()方法
ServerList是定义获取所有的server的注册列表信息的接口
erverListFilter接口,定于了可根据配置去过滤或者根据特性动态获取符合条件的server列表的方法

DynamicServerListLoadBalancer最终执行了restOfInit()方法

在restOfInit()方法上,有一个 updateListOfServers()的方法,该方法是用来获取所有的ServerList的。
进一步跟踪updateListOfServers()方法的源码,最终由serverListImpl.getUpdatedListOfServers()获取所有的服务列表的
最终:eurekaClientProvider.get()来获取EurekaClient (他的实现类通过静态方法获取EurekaClient对象)

EurekaClient的实现类为DiscoveryClient(发现),分析了它具有服务注册、获取服务注册列表等的全部功能。



负载均衡器多久一次去获取一次从Eureka Client获取注册信息

BaseLoadBalancer的构造函数中通过setupPingTask()
1,开启(创建)了ShutdownEnabledTimer执行PingTask任务
2,默认情况下pingIntervalSeconds为10,即每10秒钟,想EurekaClient发送一次”ping”

PingTask源码,即new一个Pinger对象,并执行runPinger()方法
再通过底层的一个方法获取现有服务的可用性以及总数量是否一致,如果和之前不同,那么会EurekaClient获取注册列表,然后进行服务列表的更新或者重新拉取

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值