4. Spring Cloud Ribbon 实现“负载均衡”的详细配置说明

@


前言

1. Ribbon 介绍

Ribbon 是什么 ?

1.Spring Cloud Ribbon 是基于Netflix Ribbon 实现的一套客户端,负载均衡的工具

2.Ribbon 主要功能是提供客户端负载均衡算法和服务调用

3.Ribbon 客户端组件提供一系列完善的配置项如“连接超时,重试”

4.Ribbon 会基于某种规则(如简单轮询,随机连接等)去连接指定服务

5.程序员很容易是由 Ribbon 的负载均衡算法实现负载均衡

6.一句话: Ribbon: 负载均衡 + RestTemplate 调用

Ribbon 的官网地址: https://github.com/Netflix/ribbon

Ribbon 进入维护状态?

Ribbon 目前进入维护模式, 未来替换方案 是 Spring Cloud LoadBalancer

1.1 LB(Load Balance 负载均衡)

LB 分类

  1. 集中式: LB

即在服务的消费方和提供方之间使用独立的LB设施(可以是硬件,如F5,也可以是软件,如 Nginx)

由该设施负责把访问请求通过某种策略转发至服务的提供方。

  1. 进程内 LB

将 LB逻辑集成到消费方,消费方服务注册中心获知有哪些地址可用,然后再从这些地址中选择

一个合适的服务地址

Ribbon 就属于进程内 L B,它只是一个类库,集成于消费方进程,消费方通过它来获取到服务提供方的地址。

特别说明:在上一篇的学习内容上:实例-前面 member-consumer 轮询负载访问 10000/10002 底层就是 Ribbon 默认的轮询负载算法。

2. Ribbon 原理

Ribbon 架构图&机制

2.2 Ribbon 机制

Ribbon 机制:

  1. 先选择 EurekaServer,它优先 选择在同一个区域内负载较少的 Server 服务。
  2. 再根据用户指定的策略,在从 Server 取到的服务注册列表中选择一个地址
  3. Ribbon 提供了多种策略:比如:轮询,随机和根据响应时间加权等等

Ribbon 常见负载算法

3. Spring Cloud Ribbon 实现负载均衡算法-应用实例

需求分析/图解

  1. 需求: 将默认的轮询算法改成随机算法 RandomRule
  2. 浏览器输入 : http://localhost/member/consumer/get/1
  3. 要求 访问的 10000/10002 端口的服务是随机的,也就是设置为:RandomRule 随机负载均衡

其实:所谓的随机是在少量数据上是随机的,但是在大量数据的基础上,随机的结果基本上和平均 差不多。

  1. 首先:创建 member-service-consumer-80 com/rainbowsea/springcloud/config/RibbonRule.java,随机负载均衡的算法的配置类,进行配置随机负载均衡

package com.rainbowsea.springcloud.config;

import com.netflix.loadbalancer.IRule;
import com.netflix.loadbalancer.RandomRule;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; @Configuration
public class RibbonRule { @Bean // 配置注入自己的负载均衡算法
public IRule myRibbonRule() {
// 这里老师返回的是 RandomRule,大家也可以指定其他的内容。
//return new WeightedResponseTimeRule();
return new RandomRule(); // 随机算法 }
}

注意:同时还需要在对应的Eureka Client 客户端当中的 RestTemplate Http模板 的位置开启, 加入 @LoadBalanced 开启负载均衡

以及同时还需要在对应的Eureka Client 客户端 的场景启动器的位置开启,当中加入@RibbonClient 注解标明:使用的是 Ribbon 下的负载均衡上的哪个算法。

@RibbonClient(name = "MEMBER_SERVICE_PROVIDER_URL",configuration = RibbonRule.class) // 指定 Ribbon 的负载均衡算法
package com.rainbowsea.springcloud;

import com.rainbowsea.springcloud.config.RibbonRule;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.cloud.netflix.ribbon.RibbonClient; // 如果错误: 加入排除 DataSourceAutoConfiguration 自动配置
//@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)
//@EnableEurekaClient 表示将项目/模块/程序 标注作为 Eureka Client
@EnableEurekaClient
@SpringBootApplication
@EnableDiscoveryClient // 启用服务发现
@RibbonClient(name = "MEMBER_SERVICE_PROVIDER_URL",configuration = RibbonRule.class) // 指定 Ribbon 的负载均衡算法
public class MemberConsumerApplication80 {
public static void main(String[] args) {
SpringApplication.run(MemberConsumerApplication80.class, args);
}
}

测试

  1. 浏览器输入 : http://localhost/member/consumer/get/1
  2. 观察访问的 10000/10002 端口的服务是随机的。

4. 总结:

  1. Spring Cloud Ribbon 是基于Netflix Ribbon 实现的一套客户端,负载均衡的工具。
  2. LB(Load Balance 负载均衡) 两种分类:
    1. 集中式: LB
    2. 进程内 LB
  3. Ribbon 原理和机制
  1. 先选择 EurekaServer,它优先 选择在同一个区域内负载较少的 Server 服务。
  2. 再根据用户指定的策略,在从 Server 取到的服务注册列表中选择一个地址
  3. Ribbon 提供了多种策略:比如:轮询,随机和根据响应时间加权等等
  1. Ribbon 常见的负载均衡算法。
  2. 配置 Spring Cloud Ribbon 的三点:
  1. 创建配置对应 Ribbon 下的负载均衡的算法的配置类(注意标注配置类注解@Configuration 和对应的方法处加入'@Bean加入 ioc 容器管理' ),进行配置负载均衡 ,直接 new 对应的 Ribbon 下的 负载均衡算法即可,比如: RandomRule,RoundRobinRule
  2. 还需要在对应的Eureka Client 客户端当中的 RestTemplate Http模板 的位置开启, 加入 @LoadBalanced 开启负载均衡@LoadBalanced 注解标注负载均衡
  3. 同时还需要在对应的Eureka Client 客户端 的场景启动器的类上 位置开启,当中加入@RibbonClient 注解标明:使用的是 Ribbon 下的负载均衡上的哪个算法。
@RibbonClient(name = "MEMBER_SERVICE_PROVIDER_URL",configuration = RibbonRule.class) // 指定 Ribbon 的负载均衡算法

5. 最后:

“在这个最后的篇章中,我要表达我对每一位读者的感激之情。你们的关注和回复是我创作的动力源泉,我从你们身上吸取了无尽的灵感与勇气。我会将你们的鼓励留在心底,继续在其他的领域奋斗。感谢你们,我们总会在某个时刻再次相遇。”

4. Spring Cloud Ribbon 实现“负载均衡”的详细配置说明的更多相关文章

  1. 笔记:Spring Cloud Ribbon 客户端负载均衡

    Spring Cloud Ribbon 是一个基于 HTTP 和 TCP 的客户端负载均衡工具,基于 Netflix Ribbon 实现,通过Spring Cloud 的封装,可以让我们轻松的将面向服 ...

  2. Spring Cloud Ribbon——客户端负载均衡

    一.负载均衡负载均衡(Load Balance): 建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽.增加吞吐量.加强网络数据处理能力.提高网络的灵活性和可用性.其意思 ...

  3. Spring Cloud Ribbon客户端负载均衡(四)

    序言 Ribbon 是一个客户端负载均衡器(Nginx 为服务端负载均衡),它赋予了应用一些支配 HTTP 与 TCP 行为的能力,可以得知,这里的客户端负载均衡也是进程内负载均衡的一种.它在 Spr ...

  4. spring cloud --- Ribbon 客户端负载均衡 + RestTemplate + Hystrix 熔断器 [服务保护] ---心得

    spring boot      1.5.9.RELEASE spring cloud    Dalston.SR1 1.前言 当超大并发量并发访问一个服务接口时,服务器会崩溃 ,不仅导致这个接口无法 ...

  5. spring cloud --- Ribbon 客户端负载均衡 + RestTemplate ---心得【无熔断器】

    spring boot      1.5.9.RELEASE spring cloud    Dalston.SR1 1.前言 了解了 eureka 服务注册与发现 的3大角色 ,会使用RestTem ...

  6. Spring Cloud Ribbon 客户端负载均衡 4.3

      在分布式架构中,服务器端负载均衡通常是由Nginx实现分发请求的,而客户端的同一个实例部署在多个应用上时,也需要实现负载均衡.那么Spring Cloud中是否提供了这种负载均衡的功能呢?答案是肯 ...

  7. Spring Cloud学习 之 Spring Cloud Ribbon(负载均衡策略)

    文章目录 AbstractLoadBalancerRule: RandomRule: RoundRobinRule: RetryRule: WeightedResponseTimeRule: 定时任务 ...

  8. Spring Cloud Ribbon 客户端负载均衡

    Ribbon客户端组件提供一系列完善的配置选项,比如连接超时.重试.重试算法等,内置可插拔.可定制的负载均衡组件.下面是用到的一些负载均衡策略: 简单轮询负载均衡 加权轮询负载均衡 区域感知轮询负载均 ...

  9. spring cloud 之 客户端负载均衡 Ribbon

    一.负载均衡 负载均衡(Load Balance): 建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽.增加吞吐量.加强网络数据处理能力.提高网络的灵活性和可用性.其意 ...

  10. 【Spring Cloud】客户端负载均衡组件——Ribbon(三)

    一.负载均衡 负载均衡技术是提高系统可用性.缓解网络压力和处理能力扩容的重要手段之一. 负载均衡可以分为服务器负载均衡和客户端负载均衡,服务器负载均衡由服务器实现,客户端只需正常访问:客户端负载均衡技 ...

随机推荐

  1. 折腾 Quickwit,Rust 编写的分布式搜索引擎-官方配置详解

    Node configuration(节点配置) 节点配置允许您为集群中的各个节点自定义和优化设置.它被分为几个部分: 常规配置设置:共享的顶级属性 Storage(存储)设置:在storage部分定 ...

  2. Go context 介绍

    在 Go 编程语言中,context 包提供了一个用于在 goroutine 之间传递上下文信息的方法.它通常用于控制 goroutine 的生命周期.传递请求范围内的数据.以及处理超时或取消信号.c ...

  3. spark 中怎么像 pandas 里面对时间数据做 resample

    1. 笨办法 pandas Dataframe 可以很容易做时序数据的 resample,按照一定的frequency 聚合数据. 但是spark 中因为没有顺序的概念就不太好做,下面是怎么在spar ...

  4. Angular Material 18+ 高级教程 – CDK Scrolling

    Angular CDK 的意义 经过之前两篇文章 CDK Portal 和 CDK Layout の Breakpoints,我相信大家已经悟到了 CDK 的意义. CDK 有 3 个方向: 包装 B ...

  5. ASP.NET Core – Work with X509

    前言 这篇主要是说如何用 ASP.NET Core 读写系统里的证书 Store 和创建一个证书, 还有使用证书做加密, 解密, 签名. 主要参考: C#数字证书编程总结 (读写证书 Store) E ...

  6. CSS – W3Schools 学习笔记 (2)

    CSS Combinators Link to W3Schools body p = body 里的所有 p descendant body > p = body first child lay ...

  7. 图解连接阿里云(二)使用Paho-MQTT(支持FreeRTOS版本、Linux版本)连接1MQTT测试服务器 2阿里云物联网平台

    前沿提要: MQTT是什么不知道? 看这一篇:https://www.cnblogs.com/happybirthdaytoyou/p/10362336.html 阿里云官网玩不转? 看这一篇: ht ...

  8. 2How To Use Python On A Web Page With Jinja2 - Fla 21:30

    # localhost:5000/user/John @app.route("/user/<name>") def user(name): return render_ ...

  9. Maya 无法选中坐标轴 的 解决办法

    事件起因: 有项目组某同事在使用maya时,无法选中坐标轴,导致在拖动东西的时候总是无法对准坐标轴线. 解决办法: maya软件中设置: Windows -> Settings/Preferen ...

  10. 【赵渝强老师】使用Docker UI

    Docker提供一个平台来把应用程序当作容器来打包.分发.共享和运行,它已经通过节省工作时间来拯救了成千上万的系统管理员和开发人员.Docker不用关注主机上运行的操作系统是什么,它没有开发语言.框架 ...