Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Spring Cloud Alibaba - 07 Ribbon 应用篇及内置的负载均衡算法

Spring Cloud Alibaba - 07 Ribbon 应用篇及内置的负载均衡算法

作者头像
小小工匠
发布于 2022-02-03 08:02:05
发布于 2022-02-03 08:02:05
57000
代码可运行
举报
文章被收录于专栏:小工匠聊架构小工匠聊架构
运行总次数:0
代码可运行

文章目录

Ribbon整合三部曲

我们这里通过Ribbon组件来实习负载均衡 【默认的负载均衡算法是 轮询】

artisan-cloud-ribbon-order

step1 搞依赖

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
        <dependency>
            <groupId>com.alibaba.cloudgroupId>
            <artifactId>spring-cloud-alibaba-nacos-discoveryartifactId>
        dependency>

        
        <dependency>
            <groupId>org.springframework.cloudgroupId>
            <artifactId>spring-cloud-starter-netflix-ribbonartifactId>
        dependency>

step2 搞注解 (在RestTemplate上加入@LoadBalanced注解)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Configuration
public class WebConfig {


    @Bean
    @LoadBalanced
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }
}
Step3 搞配置文件

这里是写Nacos 的配置文件,暂时没有配置Ribbon的配置

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
spring:
  cloud:
    nacos:
      discovery:
        server-addr: 1.117.97.88:8848
        
  application:
    name: artisan-order-center

artisan-cloud-ribbon-product

作为服务提供方,仅需要注册到Nacos , 无需集成Ribbon, 启动多个测试Ribbon的负载策略即可。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@RestController
@Slf4j
public class ProductInfoController {

    @Value("${server.port}")
    private Integer port;

    @Autowired
    private ProductInfoMapper productInfoMapper;

    @RequestMapping("/selectProductInfoById/{productNo}")
    public Object selectProductInfoById(@PathVariable("productNo") String productNo) {
        log.info("{} 被请求了",port);
        ProductInfo productInfo = productInfoMapper.selectProductInfoById(productNo);
        return productInfo;
    }

}

验证

分别请求三次

日志如下

可以猜测,默认策略为轮询算法

修改Ribbon默认的负载策略

请求三次

Ribbon的内置的负载均衡算法

类关系 (IRule接口 AbstractLoadBalancerRule抽象类)

可以看到是采用的策略设计模式,公共的都写到了抽象类中

负载均衡算法

RandomRule

随机选择一个Server

RetryRule

对选定的负载均衡策略机上重试机制,在一个配置时间段内当选择Server不成功,则一直尝试使用subRule的方式选择一个可用的server.

RoundRobinRule

轮询选择, 轮询index,选择index对应位置的Server

AvailabilityFilteringRule

过滤掉一直连接失败的被标记为circuit tripped的后端Server,并过滤掉那些高并发的后端Server或者使用一个AvailabilityPredicate来包含过滤server的逻辑,其实就就是检查status里记录的各个Server的运行状态

BestAvailableRule

选择一个最小的并发请求的Server,逐个考察Server,如果Server被tripped了,则跳过。

WeightedResponseTimeRule

根据响应时间加权,响应时间越长,权重越小,被选中的可能性越低;

ZoneAvoidanceRule(默认)

复合判断Server所在Zone的性能和Server的可用性选择Server,在没有Zone的情况下类是轮询。

源码

https://github.com/yangshangwei/SpringCloudAlibabMaster

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022/02/02 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
ribbon的负载均衡策略_f5负载均衡配置
在这里吐槽一句:网上很多文章真是神坑,你不看还好,看了只会问题越来越多,就连之前的问题都没有解决!!!
全栈程序员站长
2022/11/04
4210
Spring Boot + Spring Cloud 构建微服务系统(二):服务消费和负载(Ribbon)
在上一篇教程中,我们是这样调用服务的,先通过 LoadBalancerClient 选取出对应的服务,然后使用 RestTemplate 进行远程调用。
朝雨忆轻尘
2019/06/19
6560
Spring Boot + Spring Cloud 构建微服务系统(二):服务消费和负载(Ribbon)
spring cloud 配置使用ribbon负载均衡
启用负载均衡 // 在RestTemplate上增加注解启用负载均衡 @LoadBalanced @Bean public RestTemplate restTemplate(){...} 以负载均衡方式调用服务 // 使用服务ID调用服务 restTemplate.getForObject("http://serviceId/api"); 配置负载均衡策略 配置文件 serviceid: ribbon: NFLoadBalancerRuleClassName: com.netflix.load
路过君
2020/06/19
3700
Spring Cloud 系列之负载均衡 Ribbon
  Ribbon 是 Netflix 发布的负载均衡器,它有助于控制 HTTP 和 TCP 客户端的行为。为 Ribbon 配置服务提供者地址列表后,Ribbon 就可基于某种负载均衡算法,自动地帮助服务消费者去请求。Ribbon 默认为我们提供了很多的负载均衡算法,例如轮询、随机等。当然,我们也可为 Ribbon 实现自定义的负载均衡算法。Ribbon 现在已经进入维护状态,但目前仍在大规模使用,Spring Cloud 准备使用 LoadBalancer 作为 Ribbon 的替换方案。
Demo_Null
2020/11/11
9170
Spring Cloud 系列之负载均衡 Ribbon
Spring Cloud Alibaba之负载均衡组件 - Ribbon详解(三)
Ribbon是Netflix公司开源的一个负载均衡的项目(https://github.com/Netflix/ribbon),它是一个基于HTTP、TCP的客户端负载均衡器。
用户1212940
2022/04/13
1.3K0
Spring Cloud Alibaba之负载均衡组件 - Ribbon详解(三)
SpringCloud 连载(四) : Ribbon负载均衡与自定义算法(附视频)
上期内容我们讲了Cloud中非常重要的一个知识点Eureka服务注册与发现服务以及Eureka集群,有兴趣的同学可以从公众号中看一下。
不安分的猿人
2020/03/02
7110
跟我学Spring Cloud(Finchley版)-08-Ribbon深入
如需自定义负载均衡规则,只需实现IRule 接口或继承AbstractLoadBalancerRule、PredicateBasedRule即可 ,读者可参考 RandomRule 、 RoundRobinRule、 ZoneAvoidanceRule 等内置Rule编写自己的负载均衡规则。
用户1516716
2019/07/10
4690
【Spring Cloud】005-Ribbon负载均衡
Spring Cloud Ribbon 是基于Netflix Ribbon 实现的一套客户端负载均衡的工具;
訾博ZiBo
2025/01/06
1590
【Spring Cloud】005-Ribbon负载均衡
Ribbon负载均衡
策略规则 Ribbon 提供 IRule 接口,该接口定义了如何访问服务的策略,以下是该接口的实现类:
崔笑颜
2020/06/08
3750
Ribbon负载均衡 (源码分析)
SpringCloud底层其实是利用了一个名为Ribbon的组件,来实现负载均衡功能的。
不吃紫菜
2023/02/13
4200
Ribbon负载均衡 (源码分析)
【云原生】SpringCloud系列之客户端负载均衡Ribbon
在微服务架构中,负载均衡是必须使用的技术,通过它来实现系统的高可用、集群扩容等功能。负载均衡可以分为两种:服务端负载均衡和客户端负载均衡。通常所说的负载均衡指服务器负载均衡,可通过硬件设备或软件来实现,硬件比如:F5、Array等,软件比如:LVS、Nginx等。 负载均衡按实现方式分类可区分为:服务端负载均衡(比如Nacos负载均衡)与客户端负载均衡。 SpringCloud Ribbon是基于客户端的负载均衡工具,它可以将面向服务的 REST 模板请求自动转换成客户端负载均衡的服务调用。执行过程如下图:
共饮一杯无
2022/11/28
5620
【云原生】SpringCloud系列之客户端负载均衡Ribbon
Spring Cloud Ribbon 中的 7 种负载均衡策略
负载均衡通器常有两种实现手段,一种是服务端负载均衡器,另一种是客户端负载均衡器,而我们今天的主角 Ribbon 就属于后者——客户端负载均衡器。
磊哥
2022/05/10
3.2K0
Spring Cloud Ribbon 中的 7 种负载均衡策略
Spring Cloud 系列-Ribbon
强推一波:https://segmentfault.com/ls/1650000011386794
3号攻城狮
2018/07/23
4890
Spring Cloud 系列-Ribbon
spring cloud 之 Ribbon
Spring Cloud Ribbon 是一套基于 Netflix Ribbon 实现的客户端负载均衡和服务调用工具。Netflix Ribbon 是 Netflix 公司发布的开源组件,其主要功能是提供客户端的负载均衡算法和服务调用。Spring Cloud 将其与 Netflix 中的其他开源服务组件(例如 Eureka、Feign 以及 Hystrix 等)一起整合进 Spring Cloud Netflix 模块中,整合后全称为 Spring Cloud Netflix Ribbon。Ribbon 是 Spring Cloud Netflix 模块的子模块,它是 Spring Cloud 对 Netflix Ribbon 的二次封装。通过它,我们可以将面向服务的 REST 模板(RestTemplate)请求转换为客户端负载均衡的服务调用。Ribbon 是 Spring Cloud 体系中最核心、最重要的组件之一。它虽然只是一个工具类型的框架,并不像 Eureka Server(服务注册中心)那样需要独立部署,但它几乎存在于每一个使用 Spring Cloud 构建的微服务中。Spring Cloud 微服务之间的调用,API 网关的请求转发等内容,实际上都是通过 Spring Cloud Ribbon 来实现的·
BUG弄潮儿
2022/12/05
3620
spring cloud 之 Ribbon
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
8700
Ribbon负载均衡策略
Ribbon 的核心组件是 IRule,IRule 是所有负载均衡策略的父接口,其子类有:
Li_XiaoJin
2022/06/10
4650
Ribbon负载均衡策略
Spring-Cloud-Netflix-Ribbon&Feigen
JokerDJ
2023/11/27
2130
Spring-Cloud-Netflix-Ribbon&Feigen
(4)什么是Ribbon负载均衡
上一节中,我们添加了@LoadBalanced注解,即可实现负载均衡功能,这是什么原理呢?
用户7630333
2023/12/07
2790
(4)什么是Ribbon负载均衡
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
3960
Ribbon负载均衡
java架构之路-(微服务专题)ribbon的基本使用和内部算法的自我实现
  上次我们主要说了,我们的注册中心nacos的使用,如我们的命名空间、分组、集群、版本等是如何使用的,如果是这样呢?我们现在有三个用户服务和三个订单服务,我们应该如何分发这些请求呢?都请求到一个服务?轮询?权重?这次我们就来看一下我们的如何解决这些问题的。
小菜的不能再菜
2020/02/25
6350
java架构之路-(微服务专题)ribbon的基本使用和内部算法的自我实现
相关推荐
ribbon的负载均衡策略_f5负载均衡配置
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档