Ribbon

1、负载均衡策略

  • 轮询策略(RoundRobinRule)
    这是默认的策略,按照顺序依次选择服务实例进行处理。例如,如果有三个服务实例,那么第N次请求将会被分配到序号为(N mod 3)的服务实例上。轮询策略简单且平等地分配请求,适用于服务器处理能力相近的场景。
  • 随机策略(RandomRule)
    这种策略从可用的服务实例列表中随机选择一个来处理请求。由于选择是随机的,因此每个服务实例都有可能被选中,这有助于在某些情况下避免过多请求集中到某一特定实例。
  • 响应速度加权策略(WeightedResponseTimeRule)
    该策略根据服务实例的响应时间动态计算权重,响应时间越短的实例权重越高,从而有更大几率被选中。这种策略适用于处理能力不同的服务实例集群,通过实时监控响应时间,自动调整负载分配,优化整体性能。
  • 最优可用策略(BestAvailableRule)
    此策略会选取当前连接数最少的服务实例。连接数较少意味着服务的负载较轻,这样的分配可以进一步均衡各个服务的负载,避免某些服务因连接过多而变得缓慢或不可用。
  • 可用性过滤策略(AvailabilityFilteringRule)
    首先会过滤掉不可用的服务实例,然后在剩余的服务中选择并发连接数最少的一个。这种策略结合了对服务可用性的考量和负载均衡的需求,提升了系统的健壮性和用户体验。
  • 区域内可用性能优先策略(ZoneAvoidanceRule)
    在考虑服务可用性的基础上,还会优先考虑特定区域(zone)内服务的可用性。这种策略适用于跨区域部署的服务集群,能够优先调用同一区域内的服务,降低延迟,提升效率。
  • 重试策略(RetryRule)
    当选定的服务实例无法处理请求时,会自动换一个新的服务实例重试。这种策略适用于需要高可靠性的系统中,即使某个服务暂时不可用,也能通过快速切换保障业务的持续运行。

2、修改默认负载均衡策略

1)第一种方式

新增config
PS:不能写在@SpringbootApplication注解的@CompentScan扫描得到的地方,否则会被所有的RibbonClients共享

java 复制代码
package com;

import com.alibaba.cloud.nacos.ribbon.NacosRule;
import com.netflix.loadbalancer.IRule;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class RibbonConfig {

    @Bean
    public IRule iRule() {
        return new NacosRule();
    }
}

启动类上新增注解,server-nacos是被调用方的名称

java 复制代码
@RibbonClients(value = {
        @RibbonClient( name = "server-nacos", configuration = RibbonConfig.class)
})
2)第二种方式

配置application.yml

yml 复制代码
# 被调用的服务名
server-nacos:
  ribbon:
    NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule

3、自定义策略

新增策略

java 复制代码
package com.zzuhai.client.ribbonrule;

import com.netflix.client.config.IClientConfig;
import com.netflix.loadbalancer.AbstractLoadBalancerRule;
import com.netflix.loadbalancer.ILoadBalancer;
import com.netflix.loadbalancer.Server;

import java.util.List;
import java.util.concurrent.ThreadLocalRandom;

public class NacosCustomRule extends AbstractLoadBalancerRule {

    @Override
    public void initWithNiwsConfig(IClientConfig iClientConfig) {

    }

    @Override
    public Server choose(Object o) {
        ILoadBalancer loadBalancer = this.getLoadBalancer();

        // 获取所有实例
        List<Server> reachableServers = loadBalancer.getReachableServers();

        // 获取随机数
        int random = ThreadLocalRandom.current().nextInt(reachableServers.size());

        return reachableServers.get(random);
    }
}

修改application.yml

yml 复制代码
# 被调用的服务名
server-nacos:
  ribbon:
    NFLoadBalancerRuleClassName: com.zzuhai.client.ribbonrule.NacosCustomRule

4、配置项目启动加载

默认是懒加载,调用的时候才加载,第一次调用的时候可能很慢

新增配置,修改成启动时候加载

yml 复制代码
ribbon:
	eager‐load:
 	# 开启ribbon饥饿加载
	enabled: true
 	# 使用ribbon饥饿加载,多个使用逗号分隔
	clients: server-nacos
相关推荐
白总Server2 天前
OpenHarmony
后端·spring cloud·华为·微服务·ribbon·架构·系统架构
wei_shuo2 天前
Spring Cloud OpenFeign:基于Ribbon和Hystrix的声明式服务调用
spring cloud·hystrix·ribbon
wei_shuo6 天前
Spring Cloud Ribbon:负载均衡的服务调用
spring cloud·ribbon·负载均衡
白总Server6 天前
Ribbon解说
后端·spring cloud·微服务·云原生·ribbon·架构·scala
白总Server6 天前
Ribbon的轮询策略实现方法
开发语言·后端·spring cloud·ribbon·架构·scala·1024程序员节
TOMORROW6COME13 天前
SpringCloud-负载均衡-ribbon
spring cloud·ribbon·负载均衡
爱码少年14 天前
Ribbon客户端负载均衡策略测试及其改进
ribbon·负载均衡
能摆一天是一天25 天前
ribbon和nginx负载均衡图解
java·nginx·ribbon·负载均衡
J老熊1 个月前
Spring Cloud Netflix Ribbon 负载均衡详解和案例示范
java·spring boot·后端·spring cloud·面试·ribbon·负载均衡
别挡1 个月前
SpringCloud简介 Ribbon Eureka 远程调用RestTemplate类 openfeign
spring cloud·eureka·ribbon