Ribbon架构图

springboot nacos负载均衡示例 spring 负载均衡框架_负载均衡

一、Ribbon简介

1、Ribbon是客户端负载均衡器

2、Ribbon核心功能:服务发现、服务选择规则、服务监听

3、Ribbon和注册中心结合使用:去注册中心将所有的serverList取出来,动态更新serverList

二、Ribbon核心点

服务消费者通过RestTeamlate(可以自由配置IRule和IPing)调用注册中心里的服务(被调用方提供多个端口部署在不同服务器上)实现负载均衡

1、IRule

1)IRule通过特定算法选取要访问的服务(粒度细:单个算法针对单个服务配置不同的请求)

2)常用算法

springboot nacos负载均衡示例 spring 负载均衡框架_ribbon_02

/**
 * @author : zhenghaorui
 * @description : 配置文件
 **/
@Configuration
public class RestConfig {
    @Bean
    @LoadBalanced
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }

    /**
    * @Description: 负载均衡规则
    * @Param: []
    * @return: com.netflix.loadbalancer.IRule
    * @Author: zhenghaorui
    */
    @Bean
    public IRule iRule(){
        return new RoundRobinRule();
        
        //自定义算法规则
        //return new MyRule();
    }
}

3)自定义算法规则

 继承AbstractLoadBalancerRule,重写choose方法

/**
 * @author : zhenghaorui
 * @description : 自定义算法规则
 **/
public class MyRule extends AbstractLoadBalancerRule {
    public MyRule(){}

    @Override
    public Server choose(Object o) {
        // 灰度发布 10%的流量在新的功能 ~ 90%的流量在旧的功能
        // 对10%有没有限制,已经访问过新功能的流量不能再访问旧的功能

        // 定义一个新功能的ServerList
        // up all

        // 每次请求进入,判断对应的客户端是不是已经访问过新的ServerList
            // 如果是, 则直接访问新的ServerList
            // 如果不是, 则继续后续判断

        // 引入缓存, 十个请求里随机取2~3个请求进入新功能的ServerList 【Redis】
	
        // 无论传入什么,都返回null
        return null;
    }

    @Override
    public void initWithNiwsConfig(IClientConfig iClientConfig) {

    }
}

2、IPing

1)IPing是Ribbon保护服务可用的基石

2)常见实现

springboot nacos负载均衡示例 spring 负载均衡框架_ribbon_03

/**
 * @author : zhenghaorui
 * @description : 配置文件
 **/
@Configuration
public class RestConfig {
    @Bean
    @LoadBalanced
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }

    @Bean
    public IPing iPing(){
        //访问任何服务的/abc的url
        //如果url是存活状态,那就认为该服务是存活着的;否则认为该服务已经挂掉
        //return new PingUrl(false,"/abc");

        return new NIWSDiscoveryPing();
    }
}

3、ServerList

1)ServerList是Ribbon存储的可用服务列表

2)ServerList可以手动设置

3)ServerList常见应用是从Eureka中自动获取

三、Ribbon与Eureka整合

1、Ribbon天然与Eureka无缝整合

2、通过@LoadBalanced提供负载均衡支持

3、通过ribbon.eureka.enabled = false禁用Eureka

四、Ribbon参数配置

springboot nacos负载均衡示例 spring 负载均衡框架_ribbon_04

1、默认参数配置:查看DefaultClientConfigImpl

2、Ribbon Key定义:查看CommonClientConfigKey

3、Ribbon参数分为全局配置和指定客户端配置

#全局配置
ribbon:
  eureka:
    enabled: true
  ReadTimeout: 60000
  ConnectTimeout: 60000
  MaxAutoRetries: 0
  MaxAutoRetriesNextServer: 1
  OkToRetryOnAllOperations: false

4、指定客户端参数配置格式:<client>.ribbon.<key> = <value>

哪些可被负载均衡?怎么负载均衡?

serverList可被负载均衡;利用负载均衡算法进行负载均衡。