Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >注意了,ribbon负载均衡器将被替换

注意了,ribbon负载均衡器将被替换

作者头像
程序猿Damon
发布于 2021-11-19 07:13:09
发布于 2021-11-19 07:13:09
1.6K00
代码可运行
举报
运行总次数:0
代码可运行

区别

- Ribbon

Ribbon 是由 Netflix 发布的负载均衡器,它有助于控制 HTTP 和 TCP 的客户端的行为。Ribbon 属于客户端负载均衡。大家都知道,在我们最早使用 Springcloud 微服务架构时,就是使用 Netflix 公司的荣誉出品:https://docs.spring.io/spring-cloud-netflix/docs/2.2.9.RELEASE/reference/html/。但可惜的是,Eureka 早就正式被官方废弃,不再更新了。这也许是为了更好的统一架构。

- Spring-cloud-loadbalancer

Spring-cloud-loadbalancer,是官方正式推出的一款新负载均衡利器。早在 2017 年 spring 开始尝试开发spring-cloud-loadbalancer 替代 ribbon,项目托管在 spring-cloud-incubator 孵化器,而后,经过一段时间,突然把此项目标记成归档迁移到spring-cloud-commons,说明官方在做统一公共基础架构的决心在一步步前进。

早在 Spring Cloud Hoxton.M2,第一个整合spring-cloud-loadbalancer来替换老的 ribbon:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Spring Cloud Hoxton.M2 is the first release containing both blocking and non-blocking load balancer client implementations as an alternative to Netflix Ribbon which has entered maintenance mode.

To use the new `BlockingLoadBalancerClient` with a `RestTemplate` you will need to include `org.springframework.cloud:spring-cloud-loadbalancer` on your application’s classpath. The same dependency can be used in a reactive application when using `@LoadBalanced WebClient.Builder` - the only difference is that Spring Cloud will auto-configure a `ReactorLoadBalancerExchangeFilterFunction` instance. See the [documentation](https://cloud.spring.io/spring-cloud-static/spring-cloud-commons/2.2.0.M2/reference/html/#_spring_resttemplate_as_a_load_balancer_client) for additional information. The new `ReactorLoadBalancerExchangeFilterFunction` can also be autowired and passed directly to `WebClient.Builder` (see the [documentation](https://cloud.spring.io/spring-cloud-commons/reference/html/#webflux-with-reactive-loadbalancer)). For all these features, [Project Reactor](https://projectreactor.io/)-based `RoundRobinLoadBalancer` is used underneath.

从这段原文可以看到,目前只支持BlockingLoadBalancerClient,同样是基于 RestTemplate。我们知道 ribbon 也是基于RestTemplate

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@LoadBalanced
@Bean
public RestTemplate restTemplate() {
        SimpleClientHttpRequestFactory requestFactory = new SimpleClientHttpRequestFactory();
        requestFactory.setReadTimeout(env.getProperty("client.http.request.readTimeout", Integer.class, 15000));
        requestFactory.setConnectTimeout(env.getProperty("client.http.request.connectTimeout", Integer.class, 3000));
        RestTemplate rt = new RestTemplate(requestFactory);
        return rt;
}

但对于配置,ribbon 显然还是较老练:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
backend:
  ribbon:
    client:
      enabled: true
    ServerListRefreshInterval: 5000

ribbon:
  ConnectTimeout: 3000
  ReadTimeout: 1000
  eager-load:
    enabled: true
    clients: cas-server,customer-server
  MaxAutoRetries: 2
  MaxAutoRetriesNextServer: 3
  OkToRetryOnAllOperations: true
  NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RoundRobinRule

可以多维度配置:超时、刷新服务列表、重试机制等。

但对于spring-cloud-loadbalancer,可以没有那么好,毕竟是刚养大的崽。但 Spring Cloud Hoxton 版本中第一次引入同时支持阻塞式与非阻塞式的负载均衡器spring-cloud-loadbalancer来作为已经进入维护状态的 Netflix Ribbon。接下来,我们实战看看如何使用。

实战spring-cloud-loadbalancer

在使用时,我们从原文中了解到,只需要引入org.springframework.cloud:spring-cloud-loadbalancer依赖,就可以将新的BlockingLoadBalancerClientRestTemplate一起使用了。同时,该依赖的引入也将支持 Reactive 应用,跟其他使用一样,只需要使用@LoadBalanced来修饰WebClient.Builder即可。

我们先来引入依赖,这里用的是基于 Nacos 的服务注册与发现,我们先来注入依赖:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    <exclusions>
        <exclusion>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-loadbalancer</artifactId>
</dependency>

在这里,我们使用到新的负载均衡器,需要排除 ribbon 依赖,不然 loadbalancer 无效。同时,我们需要禁用 ribbon 的负载均衡能力:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
spring:
  cloud:
    loadbalancer:
      ribbon:
        enabled: false

禁用之后,我们在结合RestTemplate使用,并使用@LoadBalanced来修饰WebClient.Builder

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@LoadBalanced//就不能用ip等形式来请求其他服务
@Bean
public RestTemplate restTemplate() {
        SimpleClientHttpRequestFactory requestFactory = new SimpleClientHttpRequestFactory();
        requestFactory.setReadTimeout(env.getProperty("client.http.request.readTimeout", Integer.class, 15000));
        requestFactory.setConnectTimeout(env.getProperty("client.http.request.connectTimeout", Integer.class, 3000));
        RestTemplate rt = new RestTemplate(requestFactory);
        return rt;
}

这个细心的同学可以开始看到:这个和 Ribbon 的配置是一样样的。此时,我们启动服务提供者、消费者即可测试。这里就不再展示了。

总结

按照官方的孵化,新的负载均衡器将会取代老的 ribbon,毕竟引入了新的功能:Reactive,加入了对其的大力支持。这在性能方面有所提升。

同时,现在spring-cloud-loadbalancer还是存在一定局限的,比如:

  • ribbon 提供几种默认的负载均衡策略
  • 目前spring-cloud-loadbalancer 仅支持重试操作的配置
  • ribbon 支持超时、懒加载处理、重试及其和 hystrix 整合高级属性等

在 Spring-cloud 体系中,大部分范围还是老实使用 Ribbon,但基于 spring-cloud-k8s,可能需要使用基于spring-cloud-starter-kubernetes-loadbalancer。因为在前面实践过,基于 Ribbon 的 LB,无法跨命名空间来实现服务间的相互访问。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-11-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 交个朋友之猿天地 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【spring cloud hoxton】Ribbon 真的能被 spring-cloud-loadbalancer 替代吗
背景 早上刷圈看到 Spring Cloud Hoxton.M2 Released 的消息,随手发布到了我的知识星球,过了会有个朋友过来如下问题。 抽取半天时间学习spring-cloud-load
冷冷
2019/08/21
6020
【spring cloud hoxton】Ribbon 真的能被 spring-cloud-loadbalancer 替代吗
【spring cloud hoxton】Ribbon 真的能被 spring-cloud-loadbalancer 替代吗
背景 早上刷圈看到 Spring Cloud Hoxton.M2 Released 的消息,随手发布到了我的知识星球,过了会有个朋友过来如下问题。 抽取半天时间学习spring-cloud-loadbalancer 的源码,整理出此文总结 [20190820153213_9mbpr4_Screenshot.jpeg] Spring Cloud Hoxton.M2 是第一个整合新的loadbalancer实现来替代Ribbon的版本 Spring Cloud Hoxton.M2 is the firs
冷冷
2019/08/21
3.3K0
基于 spring-cloud-k8s 跨NS坑续集
在前面文章 (spring-cloud-k8s 跨 NS 的坑 中,讲述了 spring-cloud-k8s 中,如何利用 k8s 基于 Ribbon 等负载均衡利器来实现 LB,但存在跨命名空间的问题。
程序猿Damon
2021/11/15
7850
基于 spring-cloud-k8s 跨NS坑续集
Ribbon(客户端负载均衡)
server: port: 8001 servlet: context-path: /eureka-provider # 访问的项目名称在配置“集群”的时候也是必须一样的,否则不好调用 eureka: client: serviceUrl: defaultZone: http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/,http://eureka7001.com:7001/eureka/ # eureka的暴露地址,直接注册,使用的是eureka的集群 instance: instance-id: eureka-provider:8001 ## instance-id区别服务 prefer-ip-address: true ## 访问路径可以显示服务主机的IP地址 spring: application: name: eureka-provider #微服务的名称,配置集群的时候必须相同
爱撒谎的男孩
2019/12/31
8650
Ribbon负载均衡
文章目录 1、Ribbon基础知识 2、Ribbon服务调用 2.1 项目中引入依赖 2.2 查看consul client中依赖的ribbon 2.3 启动consul服务注册中心 2.4 将订单服务进行注册 2.5 将RestTemplate交给Spring工厂去管理 2.6 使用RestTemplate+ribbon进行服务调用 2.6.1 使用discovery client形式调用 2.6.2 使用LoadBalancerClient形式调用 2.6.3 使用 @LoadBalanced注解
别团等shy哥发育
2023/02/25
3620
Ribbon负载均衡
[享学Netflix] 三十七、源生Ribbon介绍 --- 客户端负载均衡器
代码下载地址:https://github.com/f641385712/netflix-learning
YourBatman
2020/03/18
2.5K0
Spring Cloud 快速上手之 Ribbon 负载均衡
Spring Cloud Ribbon是基于HTTP和TCP的客户端负载工具,它是基于Netflix Ribbon实现的。通过Spring Cloud的封装,可以轻松地将面向服务的REST 模板请求,自动转换成客户端负载均衡服务调用。提供云端负载均衡,有多种负载均衡策略可供选择,可配合服务发现和断路器使用。
架构探险之道
2020/05/17
7650
Spring Cloud LoadBalancer 的核心组件Ribbon
Ribbon 是 Netflix 开发的一个客户端负载均衡器,它支持多种负载均衡算法,包括轮询、随机、加权轮询等。在 Spring Cloud LoadBalancer 中,Ribbon 被用作默认的负载均衡器。使用 Ribbon 可以很容易地实现服务实例的负载均衡。
堕落飞鸟
2023/04/15
4740
微服务负载均衡器Ribbon介绍、使用以及原理和源码理解
Ribbon是Netflix开源的客户端负载均衡器,它可以很好的控制HTTP和TCP客户端的行为。Ribbon支持配置客户端添加重试和超时等功能,旨在使客户端更加强健。Ribbon在分布式系统中提供一系列完整的服务,如:
青山师
2023/10/17
1.1K0
负载均衡---ribbon
Ribbon:提供云端负载均衡,有多种负载均衡策略可供选择,可配合服务发现和断路器使用。 上一篇简单讲解了eureka的使用,这一篇文章基于上一篇的基础上,讲一下springcloud的另一个重要的组件ribbon。 这篇文章需要新建三个工程,service(8762),service(8763),service-ribbon(8764),三个服务分别向eureka-server注册中心注册,本文的服务使用的注册中心都是本人创建的测试eureka–http://eureka.dalaoyang.cn。 首先
dalaoyang
2018/04/28
2.8K0
负载均衡---ribbon
微服务组件【负载均衡】Netflix Ribbon
Netflix Ribbon是一个客户端负载均衡组件,用于将用户请求根据负载均衡算法负载到后端不同的服务集群节点上,从而降低单点服务器压力。
默 语
2024/11/22
810
SpringCloud学习笔记(2):使用Ribbon负载均衡
Spring Cloud Ribbon是基于Netflix Ribbon实现的一套客户端负载均衡工具,在注册中心对Ribbon客户端进行注册后,Ribbon可以基于某种负载均衡算法,如轮询(默认)、随机、加权轮询、加权随机等自动帮助服务消费者调用接口。
布禾
2020/10/29
7030
SpringCloud学习笔记(2):使用Ribbon负载均衡
【Spring Cloud】005-Ribbon负载均衡
Spring Cloud Ribbon 是基于Netflix Ribbon 实现的一套客户端负载均衡的工具;
訾博ZiBo
2025/01/06
1310
【Spring Cloud】005-Ribbon负载均衡
SpringCloud @LoadBalanced 负载均衡原理
一个是spring-cloud-common里面的org.springframework.cloud.client.loadbalancer.LoadBalancerAutoConfiguration;另外一个是 spring-cloud-loadbalancer里面的org.springframework.cloud.loadbalancer.config.LoadBalancerAutoConfiguration。
用户3293499
2024/12/22
1090
Spring Boot 中实现负载均衡:概念、功能与实现
在分布式系统中,负载均衡(Load Balancing)是指将工作负载和流量分配到多个服务器或服务实例上,以提高系统可用性和响应速度。负载均衡器可以是硬件设备,也可以是软件解决方案。有两种主要类型的负载均衡:
小马哥学JAVA
2024/06/28
7200
使用 Ribbon 进行负载均衡时需要注意哪些问题
在使用 Ribbon 进行负载均衡时,需要首先进行服务发现,即获取服务实例的列表。可以使用 Eureka、Consul 等服务注册中心进行服务发现。也可以通过自定义 ServerList 实现进行服务发现,但这种方式比较麻烦,不太常用。
堕落飞鸟
2023/04/07
5690
Spring Cloud 系列之负载均衡 Ribbon
  Ribbon 是 Netflix 发布的负载均衡器,它有助于控制 HTTP 和 TCP 客户端的行为。为 Ribbon 配置服务提供者地址列表后,Ribbon 就可基于某种负载均衡算法,自动地帮助服务消费者去请求。Ribbon 默认为我们提供了很多的负载均衡算法,例如轮询、随机等。当然,我们也可为 Ribbon 实现自定义的负载均衡算法。Ribbon 现在已经进入维护状态,但目前仍在大规模使用,Spring Cloud 准备使用 LoadBalancer 作为 Ribbon 的替换方案。
Demo_Null
2020/11/11
9080
Spring Cloud 系列之负载均衡 Ribbon
Ribbon实现客户端负载均衡
https://www.cnblogs.com/noneplus/p/11374883.html
Noneplus
2019/09/24
3950
Ribbon实现客户端负载均衡
Spring Cloud 项目中集成 Spring Cloud LoadBalancer
Spring Cloud LoadBalancer 是 Spring Cloud 提供的负载均衡框架,它提供了多种负载均衡算法和支持动态服务发现。本文将介绍如何在 Spring Cloud 项目中集成 Spring Cloud LoadBalancer,并提供示例说明。
堕落飞鸟
2023/04/15
1.6K0
SpringCloud教程-03:负载均衡(Ribbon)
摘要:本文主要讲解,在SpringCloud体系的微服务架构中,如何使用Ribbon来实现客户端的负载均衡。
IT云清
2019/05/15
4720
SpringCloud教程-03:负载均衡(Ribbon)
推荐阅读
相关推荐
【spring cloud hoxton】Ribbon 真的能被 spring-cloud-loadbalancer 替代吗
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验