SpringCloud Ribbon--负载均衡 原理及应用实例

😀前言

本篇博文是关于SpringCloud Ribbon的基本介绍,希望你能够喜欢

🏠个人主页:晨犀主页

🧑个人简介:大家好,我是晨犀,希望我的文章可以帮助到大家,您的满意是我的动力😉😉

💕欢迎大家:这里是CSDN,我总结知识的地方,欢迎来到我的博客,感谢大家的观看🥰

如果文章有什么需要改进的地方还请大佬不吝赐教 先在此感谢啦😊

文章目录

SpringCloud Ribbon

Ribbon 介绍

Ribbon 是什么

  1. Spring Cloud Ribbon 是基于Netflix Ribbon 实现的一套客户端负载均衡的工具。
  2. Ribbon 主要功能是提供客户端负载均衡算法和服务调用
  3. Ribbon 客户端组件提供一系列完善的配置项如连接超时,重试等。
  4. Ribbon 会基于某种规则(如简单轮询,随机连接等)去连接指定服务
  5. 程序员很容易使用Ribbon 的负载均衡算法实现负载均衡
  6. 一句话: Ribbon: 负载均衡+RestTemplate 调用

官网

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

Ribbon 进入维护状态

  1. 官网地址: https://github.com/Netflix/ribbon
  1. Ribbon 目前进入维护模式, 未来替换方案是Spring Cloud LoadBalancer

LB(Load Balance)

LB 分类
1.集中式LB

即在服务的消费方和提供方之间使用独立的LB设施(可以是硬件,如F5,也可以是软件,如Nginx),由该设施负责把访问请求通过某种策略转发至服务的提供方;LB(Load Balance 负载均衡)

2.进程内LB

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

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

实例

-前面member-consumer 轮询负载访问10000/10002 底层就是Ribbon 默认的轮询负载算法

Ribbon 原理

Ribbon 架构图&机制

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

Ribbon 常见负载算法

替换负载均衡算法-应用实例

需求分析/图解

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

代码实现

  1. 创建member-service-consumer-80 com/my/springcloud/config/RibbonRule.java
java 复制代码
//配置自己的负载均衡算法
@Configuration
public class RibbonRule {
    @Bean
    public IRule myRibbonRule(){
    	return new RandomRule();//随机负载均衡算法
    }
}

2.修改member-service-consumer-80 com/my/springcloud/MemberConsumerApplication.java

java 复制代码
@EnableEurekaClient
@SpringBootApplication
@EnableDiscoveryClient //启用服务发现
//使用指定的Ribbon 负载均衡算法规则
@RibbonClient(name = "MEMBER_SERVICE_PROVIDER_URL", configuration = RibbonRule.class)
public class MemberConsumerApplication {
    public static void main(String[] args) {
    	SpringApplication.run(MemberConsumerApplication.class, args);
    }
}

测试

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

文章到这里就结束了,如果有什么疑问的地方请指出,诸大佬们一起来评论区一起讨论😁

希望能和诸大佬们一起努力,今后我们一起观看感谢您的阅读🍻

如果帮助到您不妨3连支持一下,创造不易您们的支持是我的动力🤞

相关推荐
程序猿零零漆18 小时前
SpringCloud系列教程:微服务的未来(二十)Seata快速入门、部署TC服务、微服务集成Seata
java·spring·spring cloud·微服务
小小虫码1 天前
项目中用的网关Gateway及SpringCloud
spring·spring cloud·gateway
拾忆,想起2 天前
如何选择Spring AOP的动态代理?JDK与CGLIB的适用场景
spring boot·后端·spring·spring cloud·微服务
程序猿零零漆2 天前
SpringCloud系列教程:微服务的未来(十九)请求限流、线程隔离、Fallback、服务熔断
java·spring cloud·微服务
2的n次方_3 天前
Eureka 服务注册和服务发现的使用
spring boot·spring cloud·云原生·eureka·服务发现
奔跑吧邓邓子4 天前
SpringCloud之服务间通信超时:突破微服务的“时间枷锁”
spring cloud·微服务·通信超时
荆州克莱4 天前
mysql重学(一)mysql语句执行流程
spring boot·spring·spring cloud·css3·技术
忆~遂愿4 天前
3大关键点教你用Java和Spring Boot快速构建微服务架构:从零开发到高效服务注册与发现的逆袭之路
java·人工智能·spring boot·深度学习·机器学习·spring cloud·eureka
程序猿零零漆4 天前
SpringCloud系列教程:微服务的未来(十八)雪崩问题、服务保护方案、Sentinel快速入门
spring cloud·微服务·sentinel
春蕾夏荷_7282977255 天前
Qt Ribbon使用实例
ribbon·saribbon