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

目录
  • 1.什么是Ribbon
  • 1.1客户端的负载均衡
    • 1.2服务器端的负载均衡
    • 1.3常见负载均衡算法
  • 2.Nacos使用Ribbon
  • 3.Ribbon负载均衡策略
    • 3.1常用负载均衡描述
    • 3.3修改默认的负载均衡策略--配置文件的方式
    • 3.4自定义负载均衡策略
  • 4.使用springcloudloadbalancer替代ribbon

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负载均衡内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • SpringCloud 2020-Ribbon负载均衡服务调用的实现

    1.概述 官网:https://github.com/Netflix/ribbon/wiki/Getting-Started Ribbon目前也进入维护模式,未来替换方案: LB(负载均衡) 集中式LB 进程内LB Ribbon就是负载均衡+RestTemplate调用 2.Ribbon负载均衡演示 1.架构说明 总结:Ribbon其实就是一个软负载均衡的客户端组件,他可以和其他所需请求的客户端结合使用,和eureka结合只是其中的一个实例. 2. 3.二说RestTemplate的使用 官网

  • Spring Cloud Ribbon 中的 7 种负载均衡策略的实现方法

    目录 Ribbon介绍 负载均衡设置 7种负载均衡策略 1.轮询策略 2.权重策略 3.随机策略 4.最小连接数策略 5.重试策略 6.可用性敏感策略 7.区域敏感策略 项目源码 总结 负载均衡通器常有两种实现手段,一种是服务端负载均衡器,另一种是客户端负载均衡器,而我们今天的主角 Ribbon 就属于后者——客户端负载均衡器. 服务端负载均衡器的问题是,它提供了更强的流量控制权,但无法满足不同的消费者希望使用不同负载均衡策略的需求,而使用不同负载均衡策略的场景确实是存在的,所以客户端负载均衡就

  • Springcloud ribbon负载均衡算法实现

    一 前言 经过几篇的cloud系列文章,我想大家都有一个坚实的基础,后续的学习就会轻松很多,如果是刚刚来看的读者需要有eureka基础知识,或者查阅知识追寻者的cloud系列专栏:这篇文章主要讲解如何使用ribbon实现web service客户端调用,ribbon默认算法实现负载均衡等! 二 ribbon简介 ribbon是一个客户端负载均衡器,其能够整合不同的协议工具进行web service API 调用: 主要特色如下: 提供可插拔式的负载均衡整合服务发现故障弹性恢复cloud支持客户端

  • spring cloud 集成 ribbon负载均衡的实例代码

    本文比较简单集成ribbon,如需要更详细,请查看我的更多博客内容. 首先创建两个服务提供者 服务一,集成的nacos注册中心,这块随便写一个同名接口 端口配置8301 服务二,同名接口内容修改,其他跟上一个服务一大体内容一致 端口配置成8302 创建服务消费者 RibbonConfig.java package com.example.nacosribbonconsumers.config; import com.netflix.loadbalancer.IRule; import com.n

  • 深入理解Java SpringCloud Ribbon 负载均衡

    目录 前言 1.抛出问题 2.源码解析 2.1.LoadBalancerIntercepor 2.2.LoadBalancerClient 2.3.负载均衡策略IRule 2.4.总结 3.负载均衡策略 总结 前言 该技术博客是关于黑马视频教程的笔记总结! 服务消费者需要通过RestTemplate调用注册中心(Eureka)的服务提供者,但当同一服务名称的服务有多个的时候,我们的服务消费者应该调用哪一个服务呢?这时候就需要我们学习理解Ribbon负载均衡的实现原理. 当我们在RestTempl

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

    目录 1.什么是Ribbon 1.1客户端的负载均衡 1.2服务器端的负载均衡 1.3常见负载均衡算法 2.Nacos使用Ribbon 3.Ribbon负载均衡策略 3.1常用负载均衡描述 3.3修改默认的负载均衡策略--配置文件的方式 3.4自定义负载均衡策略 4.使用springcloudloadbalancer替代ribbon 1.什么是Ribbon 目前主流的负载均衡方案分为以下两种: (1)集中式负载均衡:在消费者和服务提供者中间使用独立的代理方式进行负载,有硬件的(F5),软件的Ng

  • Spring cloud alibaba之Ribbon负载均衡方案

    目录 1.什么是Ribbon 1.1客户端的负载均衡 1.2服务器端的负载均衡 1.3常见负载均衡算法 2.Nacos使用Ribbon 3.Ribbon负载均衡策略 3.1常用负载均衡描述 3.3修改默认的负载均衡策略--配置文件的方式 3.4自定义负载均衡策略 4.使用spring cloud loadbalancer替代ribbon 1.什么是Ribbon 目前主流的负载均衡方案分为以下两种: (1)集中式负载均衡:在消费者和服务提供者中间使用独立的代理方式进行负载,有硬件的(F5),软件的

  • Spring Cloud如何切换Ribbon负载均衡模式

    这篇文章主要介绍了Spring Cloud如何切换Ribbon负载均衡模式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 Spring Cloud Ribbon是一个基于HTTP和TCP的客户端负载均衡工具,它基于Netflix Ribbon实现.通过Spring Cloud的封装,可以让我们轻松地将面向服务的REST模版请求自动转换成客户端负载均衡的服务调用.Spring Cloud Ribbon虽然只是一个工具类框架,它不像服务注册中心.配

  • Spring Cloud Alibaba Nacos服务治理平台,服务注册、RestTemplate实现微服务之间访问负载均衡访问的问题

    目录 Nacos简介 ☘Spring Cloud 组件依赖版本 ☘Nacos部署 ☘访问Nacos平台 Nacos服务注册.微服务访问.负载均衡实现 nacos-consumer微服务创建 ☘nacos-provider微服务创建 测试 Nacos简介 Github:https://github.com/alibaba/nacos官网文档:https://nacos.io/zh-cn/docs/what-is-nacos.htmlNacos 提供了发现.配置和管理微服务能力,能快速实现动态服务发

  • Spring Cloud Alibaba负载均衡实现方式

    目录 一.负载均衡的两种方式 服务器端负载均衡 客户端侧负载均衡 二.手写一个客户端侧负载均衡器 三.使用Ribbon实现负载均衡 一.负载均衡的两种方式 服务器端负载均衡 传统的方式前端发送请求会到我们的的nginx上去,nginx作为反向代理,然后路由给后端的服务器,由于负载均衡算法是nginx提供的,而nginx是部署到服务器端的,所以这种方式又被称为服务器端负载均衡. 客户端侧负载均衡 现在有三个实例,内容中心可以通过discoveryClient 获取到用户中心的实例信息,如果我们再订

  • 详解spring cloud中使用Ribbon实现客户端的软负载均衡

    开篇 本例是在springboot整合H2内存数据库,实现单元测试与数据库无关性和使用RestTemplate消费spring boot的Restful服务两个示例的基础上改造而来 在使用RestTemplate来消费spring boot的Restful服务示例中,我们提到,调用spring boot服务的时候,需要将服务的URL写死或者是写在配置文件中,但这两种方式,无论哪一种,一旦ip地址发生了变化,都需要改动程序,并重新部署服务,使用Ribbon的时候,可以有效的避免这个问题. 前言:

  • Spring Cloud Alibaba 使用 Feign+Sentinel 完成熔断的示例

    Feign的使用 Feign也是网飞开发的,SpringCloud 使用 Feign 非常简单,我下边演示一下: 首先 服务消费者这边肯定需要一个对应的依赖: compile("org.springframework.cloud:spring-cloud-starter-openfeign") 需要启用Feign的话,也得在启动类上面加个注解 @EnableFeignClients 然后,创建一个 Feign 的接口,像这样子 package com.skypyb.sc.feign;

  • Spring Cloud Alibaba 本地调试介绍及方案设计

    目录 1 本地调试介绍 2 框架环境 3 方案设计 4 实现要点 5. 总结 附:工具方法 1 本地调试介绍 本地调试: 这里是指在开发环境中,部署了一整套的某个项目或者产品的服务,开发人员开发时,本地会起一个或多个服务,这些服务和开发环境中部署的服务是相同的,这种情况下,一个服务就会有多个实例,大多数微服务中的默认负载均衡策略都是轮询,这些实例会轮流被调用. 为了方便 本地调试,需要提供一种策略,可以指定在负载均衡时,选择哪个实例进行调用.在使用 Nacos 作为注册中心时,可以通过 上线和下

  • Spring Cloud Alibaba使用Nacos作为注册中心和配置中心

    目录 前言 Nacos简介 使用Nacos作为注册中心 安装并运行Nacos 创建应用注册到Nacos 负载均衡功能 使用Nacos作为配置中心 创建nacos-config-client模块 在Nacos中添加配置 Nacos的动态刷新配置 使用到的模块 前言 Spring Cloud Alibaba 致力于提供微服务开发的一站式解决方案,Nacos 作为其核心组件之一,可以作为注册中心和配置中心使用,本文将对其用法进行详细介绍. Nacos简介 Nacos 致力于帮助您发现.配置和管理微服务

随机推荐