SpringCloud之Ribbon客户端负载原理分析(三)-ILoadBalancer原理分析

本文详细分析了SpringCloud Ribbon中的ILoadBalancer接口及其核心实现类DynamicServerListLoadBalancer的工作原理,包括IRule负载规则、IPing服务连通测试、ServerList更新和过滤等组件。同时,探讨了引入Eureka注册中心后DynamicServerListLoadBalancer的初始化变化。
摘要由CSDN通过智能技术生成

SpringCloud之Ribbon客户端负载应用及原理分析
SpringCloud之Ribbon客户端负载原理分析(一)-LoadBalancerInterceptor原理分析
SpringCloud之Ribbon客户端负载原理分析(二)-RibbonLoadBalancerClient原理分析
SpringCloud之Ribbon客户端负载原理分析(三)-ILoadBalancer原理分析

本文主要内容:

上一篇文章分析了RibbonLoadBalancerClient,其中它会通过ILoadBalancer去获取一个服务实例,而ILoadBalancer是实现客户端负载的核心类,下面就来分析ILoadBalancer的原理。
本文核心内容:

  1. ILoadBalancer负载均衡器基本介绍

  2. ILoadBalancer的实现类DynamicServerListLoadBalancer及核心组件功能介绍,包括:

    • 服务列表路由规则(IRule)

    • 服务状态处理(IPing)

    • 服务列表存储(ServerList)

    • 服务列表更新(SercerListUpdate)

    • 服务列表过滤(ServerListFilter)

  3. DynamicServerListLoadBalancer的初始化过程

  4. 当引入Eureka注册中心后,DynamicServerListLoadBalancer的初始化会产生什么变化?

ILoadBalancer原理分析

我们首先看一下ILoadBalancer的相关类图及源码。

1、ILoadBalancer相关类图:

在这里插入图片描述

2、ILoadBalancer接口源码

public interface ILoadBalancer {
   
    void addServers(List<Server> var1);  //新增服务
    Server chooseServer(Object var1); //选择一个服务实例
    void markServerDown(Server var1); //服务标记为不可用
    @Deprecated
    List<Server> getServerList(boolean var1); //获取服务列表
    List<Server> getReachableServers(); //可用服务
    List<Server> getAllServers(); //全部服务
}

DynamicServerListLoadBalancer是ILoadBalancer一个实现类,其内部实现了客户端负载的核心功能。我们通过分析它来了解客户端负载的实现原理

3、DynamicServerListLoadBalancer动态服务列表负载均衡器

首先,在DynamicServerListLoadBalance构造方法中,我们发现需要传入几个核心组件:

  • IClientConfig:客户端配置,存储配置项参数
  • IRule :负载均衡规则,Netflflix Ribbon实现了几个基本的负载实现,默认使用轮训规则,同时我们可以继承该接口,自定义实现负载规则
  • IPing :用于判断指定服务实例是否存活
  • ServerList:服务实例列表
  • ServerListFilter:服务实例列表过滤器
  • ServerListUpdater :服务实例列表更新器
    在这里插入图片描述
    DynamicServerListLoadBalancer部分源码: 在其构造方法中,还会调用一个restOfInit()去完成服务列表的获取和更新
// 构造方法
public DynamicServerListLoadBalancer(IClientConfig clientConfig, IRule rule, IPing ping,
                                         ServerList<T> serverList, ServerListFilter<T> filter,
                                         ServerListUpdater serverListUpdater) {
   
     super(clientConfig, rule, ping);
     this.serverListImpl = serverList
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值