返回顶部
首页 > 资讯 > 后端开发 > Python >Spring cloud alibaba之Ribbon负载均衡实现方案
  • 372
分享到

Spring cloud alibaba之Ribbon负载均衡实现方案

2024-04-02 19:04:59 372人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

目录1.什么是Ribbon1.1客户端的负载均衡1.2服务器端的负载均衡1.3常见负载均衡算法2.Nacos使用Ribbon3.Ribbon负载均衡策略3.1常用负载均衡描述3.3修

1.什么是Ribbon

目前主流的负载均衡方案分为以下两种:

(1)集中式负载均衡:在消费者和服务提供者中间使用独立的代理方式进行负载,有硬件的(F5),软件的Nginx

(2)客户端事先拿到提供者请求连接集合,根据自己的请求情况做负载均衡,Ribbon就属于客户端自己做负载均衡。

spring cloud Ribbon是基于Netflix Ribbon实现的一套客户端的负载均衡工具,Ribbon客户端提供一系列完善的配置,如超时、重试等。通过Load Balancer获取到服务器提供的所有机器实例,Ribbon会自动基于某种规则(轮询、随机)去调用这些服务。Ribbon也可以实现自己的负载均衡算法。

1.1客户端的负载均衡

例如spring cloud中的Ribbon,客户端会有一个服务器地址列表,在发送请求前通过负载均衡算法选择一个服务器,然后进行访问,这是客户端负载均衡,即在客户端进行负载均衡算法分配。

1.2服务器端的负载均衡

例如通过Nginx进行负载均衡,先发送请求,然后通过负载均衡算法,在多个服务器之间选择一个进行访问;即在服务器端进行负载均衡算法分配。

1.3常见负载均衡算法

(1)随机:通过随机选择服务进行执行,一般这种方法使用较少

(2)轮询:负载均衡默认实现方式,请求来之后排队处理

(3)加权轮询:通过对服务器性能的分型,给高配置、低负载的服务器分配更高的权重,均衡各个服务器的压力

(4)地址Hash,通过客户端地址请求地址的hash值取模映射进行调度,

(5)最小链接数:即使请求均衡了,压力不一定会均衡,最小链接数法就是根据服务器的情况,例如请求积压数的参数,将请求分配到当前压力最小的服务器上

2.Nacos使用Ribbon

(1)Nacos disconvery中默认已经引入了Ribbon,不需要单独引入

(2)添加@LoadBalanced注解

(3)调用的时候使用服务器名称替代ip+端口,即使用默认轮询的负载均衡方式

3.Ribbon负载均衡策略

3.1常用负载均衡描述

①RandomRule:随机选择一个服务实例

②RoundRobinRule:轮询负载均衡策略

③RetryTule:在轮询的基础上进行重试,一直重试的次数由服务连接的超时时间控制

④WeightedResponseTimeRule:一个服务的平均响应时间越短,则权重越大,那么改实例被选中执行任务的概率也越大

⑤BestAvaliableRule:过滤掉失效的服务实例,顺便找出并发最小的服务实例来使用

⑥ZoneAvoidanceRule:判断所在的区域,选择最近的服务调用

⑦NacosRule:按随机与配置的权重进行选择服务器

3.2修改默认的负载均衡策略--配置类的方式

①赋值一份消费端项目OrderNacos,重命名为OrderRibbon

删除OrderRibbon中原先的OrderNacos.iml文件

修改OrderRibbon的pom.xml的ArtifactId值

把新添加的OrderRibbon添加到父项目的pom.xml的module中

刷新Maven项目

②创建RibbonConfig配置类

使用@Configuration标识是配置类,使用@Bean注入到spring容器中,方法名必须叫iRule,否则无效。



@Configuration
public class RibbonConfig {
 
 
    //方法名一定要叫iRule
    @Bean
    public IRule iRule(){
        return new RandomRule();
    }
}

****注意此配置类不能放在@SpringBootApplication的注解@CompentScan扫描得到的地方,否则自定义的配置类就会被所有的RibbonClients共享,

springboot启动类,没有配置扫描范围的话,默认扫描到与启动类OrderApplication同目录级别的文件,此处为qingyun包下的文件都会被扫描到。

配置的目录如下:

③在启动类中使用注解@RibbonClients加入配置的自定义负载均衡器,value里面可以配置多个负载均衡器,是个数组类型的值;调用服务创建的RestTemplate使用@LoadBalanced进行修饰。

启动消费者,两个不同端口的服务提供者,通过页面访问,查看负载均衡机制由之前默认的改为轮询的方式

3.3修改默认的负载均衡策略--配置文件的方式

使用配置文件的方式设定负载均衡方式,具体到某个服务,格式:服务名.ribbon.NFLoadBalancerRuleClassName=服务方式

stock-service.ribbon.NFLoadBalancerRuleClassName=com.alibaba.cloud.nacos.ribbon.NacosRule

在nacos管理界面配置服务器的权重,权重越大,被选中的概率越大。

也可以在项目配置文件中设置


#设置服务的权重
spring.cloud.nacos.discovery.weight=4

3.4自定义负载均衡策略

(1)定义一个类继承AbstractLoadBalancerRule,重写choose方法



public class CustomRule extends AbstractLoadBalancerRule {
 
 
    @Override
    public void initWithNiwsConfig(IClientConfig iClientConfig) {
 
    }
 
    @Override
    public Server choose(Object o) {
        ILoadBalancer loadBalancer = this.getLoadBalancer();
 
        //获取当前请求的实例集合
        List<Server> reachableServers = loadBalancer.getReachableServers();
 
        //使用线程安全生成一个随机数
        int i = ThreadLocalRandom.current().nextInt(reachableServers.size());
 
        //获取服务
        Server server = reachableServers.get(i);
 
 
        return server;
    }
}

(2)在application.properties中添加配置信息,指向自定义的配置类


stock-service.ribbon.NFLoadBalancerRuleClassName=com.rule.CustomRule

(3)开启ribbon饥饿加载

当没有任何配置的情况下,第一次请求服务时,才会请求加载对应的服务实例

可以在配置文件application.properties中配置饥饿加载


#开启ribbon饥饿加载
ribbon.eager-load.enabled=true
#饥饿加载是服务,多个使用逗号隔开
ribbon.eager-load.clients=stock-service

启动项目的时候,加载配置服务使用的负载均衡策略

4.使用spring cloud loadbalancer替代ribbon

(1)在pom.xml中引入nacos-discovery时,去除ribbon,此时项目依赖的包里面已经移除ribbon

(2)pom.xml中添加loadbalancer依赖,前提是项目中已经引入了spring cloud依赖(父maven已经引入)


  <!-- 添加loadbalancer依赖-->
  <dependency>
     <groupId>org.springframework.cloud</groupId>
     <artifactId>spring-cloud-starter-loadbalancer</artifactId>
  </dependency>

(3)创建RestTemplate时,需要加@LoadBalanced


//程序启动时创建RestTemplate
    //使用注解LoadBalanced标识负载均衡,默认轮询的方式
    @Bean
    @LoadBalanced
    public RestTemplate restTemplate(RestTemplateBuilder builder){
        RestTemplate build = builder.build();
        return build;
    }

(4)application.properties中禁用ribbon


#禁用ribbon
spring.cloud.loadbalancer.ribbon.enabled=false

(5)若是想自定义loadbalancer,与自定义ribbon类似的方式,使用@LoadBalancerClients配置到springboot启动类中

到此这篇关于Spring cloud alibaba--Ribbon负载均衡的文章就介绍到这了,更多相关Spring cloud alibaba--Ribbon负载均衡内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Spring cloud alibaba之Ribbon负载均衡实现方案

本文链接: https://lsjlt.com/news/131053.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Spring cloud alibaba之Ribbon负载均衡实现方案
    目录1.什么是Ribbon1.1客户端的负载均衡1.2服务器端的负载均衡1.3常见负载均衡算法2.Nacos使用Ribbon3.Ribbon负载均衡策略3.1常用负载均衡描述3.3修...
    99+
    2024-04-02
  • Spring Cloud Alibaba负载均衡实现方式
    目录一、负载均衡的两种方式服务器端负载均衡客户端侧负载均衡二、手写一个客户端侧负载均衡器三、使用Ribbon实现负载均衡一、负载均衡的两种方式 服务器端负载均衡 传统的方式前端发送请...
    99+
    2024-04-02
  • spring cloud集成ribbon负载均衡怎么实现
    这篇文章主要介绍“spring cloud集成ribbon负载均衡怎么实现”,在日常操作中,相信很多人在spring cloud集成ribbon负载均衡怎么实现问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法...
    99+
    2023-06-21
  • Spring Cloud负载均衡组件Ribbon原理解析
    目录前言一个问题引发的思考Ribbon的简单使用Ribbon 原理分析LoadBalancerAutoConfiguration 自动装配RestTemplateCustomizer...
    99+
    2024-04-02
  • 深入浅析spring cloud中的Ribbon负载均衡
    这期内容当中小编将会给大家带来有关深入浅析spring cloud中的Ribbon负载均衡,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。一、负载均衡负载均衡(Load Balance): 建立在现有网络结...
    99+
    2023-05-31
    spring cloud ribbon 负载均衡
  • Spring Cloud Ribbon 中的 7 种负载均衡策略的实现方法
    目录Ribbon 介绍负载均衡设置7种负载均衡策略1.轮询策略2.权重策略3.随机策略4.最小连接数策略5.重试策略6.可用性敏感策略7.区域敏感策略项目源码总结负载均衡通器常有两种...
    99+
    2024-04-02
  • Spring Cloud负载均衡组件Ribbon原理是什么
    这篇文章主要介绍“Spring Cloud负载均衡组件Ribbon原理是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Spring Cloud负载均衡组件Ribbon原理是什...
    99+
    2023-06-30
  • Spring Cloud中如何使用Ribbon实现客户端的负载均衡
    今天小编给大家分享一下Spring Cloud中如何使用Ribbon实现客户端的负载均衡的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了...
    99+
    2023-06-04
  • Spring Cloud Ribbon 负载均衡使用策略示例详解
    目录一、前言二、什么是 Ribbon2.1 ribbon简介2.1.1  ribbon在负载均衡中的角色2.2 客户端负载均衡2.3 服务端负...
    99+
    2023-03-13
    Spring Cloud Ribbon 负载均衡使用策略 Spring Cloud Ribbon 负载均衡策略
  • Spring Cloud中如何自定义Ribbon负载均衡策略
    小编给大家分享一下Spring Cloud中如何自定义Ribbon负载均衡策略,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!1. 主启动类处理还是使用上一节的客户...
    99+
    2023-06-04
  • SpringCloud怎么实现Ribbon负载均衡
    这篇文章主要讲解了“SpringCloud怎么实现Ribbon负载均衡”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“SpringCloud怎么实现Ribbon负载均衡”吧!Ribbon使用R...
    99+
    2023-06-30
  • Java Spring Cloud 负载均衡详解
    目录1. Ribbon 客户端负载均衡1.1 Ribbon 概述1.2 Ribbon 远程调用1.3 Ribbon 负载均衡1.4 Ribbon 负载均衡策略总结1. Ribbon ...
    99+
    2024-04-02
  • Spring Cloud中如何使用Feign 实现负载均衡
    Spring Cloud中如何使用Feign 实现负载均衡,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。下面来介绍一下使用 Feign 负载均衡。在介绍之前,我们先来对 Fei...
    99+
    2023-06-04
  • SpringCloud 客户端Ribbon负载均衡的实现方法
    目录Ribbon 介绍开启客户端负载均衡,简化 RestTemplate 调用负载均衡策略饥饿加载Ribbon 介绍 Ribbon 是 Netflix 提供的一个基于 Http 和 ...
    99+
    2024-04-02
  • SpringCloud中如何利用Ribbon实现负载均衡
    SpringCloud中如何利用Ribbon实现负载均衡,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。首先在pom文件添加Fegin的依赖包。  <d...
    99+
    2023-06-05
  • SpringCloud 2020-Ribbon负载均衡服务调用的实现
    目录1、概述2、Ribbon负载均衡演示3、Ribbon核心组件IRule4、Ribbon负载均衡算法4.1 原理 + 源码4.2 手写负载均衡算法1、概述 官网:https://...
    99+
    2024-04-02
  • Spring Cloud中的负载均衡策略是什么
    本篇内容介绍了“Spring Cloud中的负载均衡策略是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!IRule这是所有负载均衡策略的...
    99+
    2023-06-19
  • springcloud集成ribbon负载均衡的实例代码
    本文比较简单集成ribbon,如需要更详细,请查看我的更多博客内容。 首先创建两个服务提供者 服务一,集成的nacos注册中心,这块随便写一个同名接口 端口配置8301 服务二...
    99+
    2024-04-02
  • 负载均衡的实现方法
    这篇文章主要讲解了“负载均衡的实现方法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“负载均衡的实现方法”吧!    客户端发送多个请求到服务器,服务器...
    99+
    2023-06-20
  • 实现高性能的Nginx负载均衡方案
    随着互联网的不断发展,对于系统的性能要求也越来越高。在处理大量的并发请求时,负载均衡是一种非常重要的解决方案,能够有效地分配请求的负载,提高系统的性能和可用性。而Nginx,作为一款高性能的Web服务器和反向代理服务器,被广泛应用于负载均衡...
    99+
    2023-10-21
    nginx 高性能 负载均衡
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作