快速理解微服务中Ribbon的概念

一.基本概念

1.在微服务架构中,Ribbon 是一个客户端负载均衡器,用于控制服务间的通信方式。

2.Ribbon 是一个开源的库,最早由 Netflix 开发,用于实现客户端负载均衡。

3.Ribbon 主要解决的是在微服务架构中,多个服务实例之间进行通信时如何选择合适的服务实例的问题。

但是 Ribbon 已经停止了主动维护。

Netflix 于 2018 年宣布 Ribbon 将不再作为新功能的开发重点,并在后续的版本中减少了对 Ribbon 的支持,官方表示,Ribbon 已经进入维护模式,意味着不会有新的功能更新和重大改动,但会继续提供 bug 修复和安全更新。

二.Ribbon的原理

使用方法:

就是在RestTemplate上添加@LoadBalanced注解,Ribbon就生效了,当在使用RestTemplate进行远程请求的时候,就会使用负载均衡策略。

基本原理:

1.通过拦截器对被注解@LoadBalanced修饰的RestTemplate进行拦截(通过AOP扫描到这个注解注释的RestTemplate,然后获取到这个方法的参数,根据获取到的参数就可以做2、3步的操作);

2.将RestTemplate中调用的服务名,解析成具体的IP地址(这一步需要去注册表查询),由于一个服务名会对应多个地址,那么在选择具体服务地址的时候,需要做负载均衡(比如一个Server有IP1和IP2地址的时候,Ribbon会根据不同的负载均衡算法选出合适的IP地址来进行调用)。

3.确定目标服务的IP和PORT后,通过Httpclient进行http的调用。

三.Ribbon的负载均衡算法

Ribbon的核心组件IRule自带的七种负载均衡算法:

1.轮询:RoundRobinRule;

2.随机:RandomRule;

3.重试:RetryRule(先按照RoundRobinRule的策略获取服务,如果获取服务失败则在指定时间内进行重试,获取可用的服务);

4.RoundRobinRule的扩展:WeightedResponseTimeRule(响应速度越快的实例选择权重越多大,越容易被选择);

5.会先过滤掉由于多次访问故障而处于断路器跳闸状态的服务,然后选择一个并发量最小的服务: BestAvailableRule

6.先过滤掉故障实例,再选择并发较小的实例:AvailabilityFilteringRule;

7.复合判断Server所在区域的性能和Server的可用性选择服务器:ZoneAvoidanceRule(默认规则)。

自定义算法步骤(以随机算法):

1.定义配置类:

java 复制代码
@Configuration
public class MyRibbonRuleConfig {

    @Bean
    @LoadBalanced
    RestTemplate restTemplate() {
        return new RestTemplate();
    }
    @Bean
    public IRule MyRibbonRuleConfig (){
        // 定义随机负载均衡算法
        return new RandomRule();
    }
}

2.主启动类上加上@RibbonClient()注解

java 复制代码
@SpringBootApplication
@RibbonClient(name = "ORDER-SERVICE",configuration = MyRibbonRuleConfig.class)
public class OrderMain {
    public static void main(String[] args) {
        SpringApplication.run(OrderMain80.class, args);
    }
}

四.推荐的替代方案

对于新的微服务项目,Spring Cloud 团队推荐使用 Spring Cloud LoadBalancer 来替代 Ribbon,Spring Cloud LoadBalancer 提供了比 Ribbon 更加现代化的负载均衡支持,并与 Spring Cloud 生态系统更紧密集成,如果项目中仍然使用 Ribbon,并且无法立即迁移,可以继续使用,但要注意它不再接收新的功能和改进,且可能会逐步淘汰。

1.Spring Cloud LoadBalancer 提供了不同的负载均衡策略,例如:

(1)RoundRobinLoadBalancer:轮询负载均衡;

(2)RandomLoadBalancer:随机负载均衡;

(3)WeightedResponseTimeLoadBalancer:基于响应时间加权的负载均衡策略。

2.配置负载均衡策略:

java 复制代码
@Configuration
public class LoadBalancerConfig {

    @Bean
    public LoadBalancer loadBalancer() {
        // 可以根据需要选择不同的负载均衡策略
        return new RoundRobinLoadBalancer(); // 默认使用 RoundRobin 策略
    }
}

也可以通过 Spring 配置文件来选择不同的负载均衡策略:

java 复制代码
spring:
  cloud:
    loadbalancer:
      ribbon:
        enabled: false  # 禁用 Ribbon(如果你之前在使用 Ribbon)

启用轮训策略:

java 复制代码
spring:
  cloud:
    loadbalancer:
      round-robin:
        enabled: true  # 启用轮询策略

总结:

1.SpringCloud LoadBalancer 是 Spring Cloud 推荐的负载均衡解决方案,逐渐替代了 Ribbon;

2.它更轻量并且与现代的服务发现和微服务架构更加兼容;

3.配置 RestTemplate 或直接使用 LoadBalancerClient,你可以在代码中实现服务调用时的负载均衡。

相关推荐
落落落sss2 小时前
MongoDB
数据库·windows·redis·mongodb·微服务·wpf
黄名富4 小时前
Spring Cloud — 深入了解Eureka、Ribbon及Feign
分布式·spring·spring cloud·微服务·eureka·ribbon
LUCIAZZZ5 小时前
SkyWalking快速入门
java·后端·spring·spring cloud·微服务·springboot·skywalking
黄名富7 小时前
Spring Cloud — Hystrix 服务隔离、请求缓存及合并
java·分布式·spring·spring cloud·hystrix·微服务
yinbp14 小时前
bboss v7.3.5来袭!新增异地灾备机制和Kerberos认证机制,助力企业数据安全
大数据·elasticsearch·微服务·etl·restclient·bboss
一位卑微的码农20 小时前
深入解析Spring Cloud Config:构建高可用分布式配置中心
分布式·spring cloud·微服务·架构
Urf_read1 天前
微服务入门-笔记
redis·笔记·微服务
卷心菜不卷Iris2 天前
第1章大型互联网公司的基础架构——1.6 RPC服务
网络·网络协议·微服务·rpc·http协议·rpc协议
呱牛do it2 天前
【系列专栏】银行IT的云原生架构-混合云弹性架构 13
微服务·云原生·金融·架构
拾忆,想起2 天前
Spring 和 Spring MVC 的关系是什么?
java·spring boot·spring·spring cloud·微服务