千家信息网

Spring Cloud中如何使用Ribbon实现客户端的负载均衡

发表于:2025-01-18 作者:千家信息网编辑
千家信息网最后更新 2025年01月18日,今天小编给大家分享一下Spring Cloud中如何使用Ribbon实现客户端的负载均衡的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅
千家信息网最后更新 2025年01月18日Spring Cloud中如何使用Ribbon实现客户端的负载均衡

今天小编给大家分享一下Spring Cloud中如何使用Ribbon实现客户端的负载均衡的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

1. 使用 Ribbon 实现负载均衡

要实现负载均衡,首先要有多个订单服务提供者,目前我们就一个 microservice-order-provider01,端口号 8001,我们可以仿照这个服务,再创建两个子模块,也是订单服务提供者,取名为 microservice-order-provider02,端口号 8002 和 microservice-order-provider03,端口号 8003。

现在三个订单服务有了,再加上 Ribbon 和 Eureka 集群后,系统的架构如下:

Ribbon 是客户端的负载均衡工具,它在服务的消费方,首先三个订单服务 8001、8002 和 8003 都会注册到 Eureka 集群,Ribbon 会先从 Eureka 集群(7001、7002 和 7003)中查询可用的服务列表,然后根据 Ribbon 提供的负载均衡算法,负载均衡的请求可用的订单服务。

Ribbon 默认的负载均衡算法是轮询,也就是按顺序挨个的调用。我们先来搭建一下整个服务架构,上面提到了,首先要拷贝两个订单服务,端口号分别为 8002 和 8003,一起来对比看下三个订单服务的配置文件。

8001 端口的订单服务配置:

# 服务端口号
server:
port: 8001

# 数据库地址
datasource:
url: localhost:3306/microservice01
# 省略数据库的基本配置

spring:
application:
name: microservice-order # 对外暴露的服务名称

# 客户端注册进eureka服务列表里
eureka:
client:
service-url:
defaultZone: http://eureka01:7001/eureka/,http://eureka02:7002/eureka/,http://eureka03:7003/eureka/,
instance:
instance-id: 书籍订单服务-8001 # 人性化显示出服务的信息
prefer-ip-address: true # 访问路径可显示ip地址

8002 端口的订单服务配置:

# 服务端口号
server:
port: 8002

# 数据库地址
datasource:
url: localhost:3306/microservice02
# 数据库基本配置省略

spring:
application:
name: microservice-order # 对外暴露的服务名称

# 客户端注册进eureka服务列表里
eureka:
client:
service-url:
defaultZone: http://eureka01:7001/eureka/,http://eureka02:7002/eureka/,http://eureka03:7003/eureka/,
instance:
instance-id: 书籍订单服务-8002 # 人性化显示出服务的信息
prefer-ip-address: true # 访问路径可显示ip地址

8003 端口的订单服务配置:

# 服务端口号
server:
port: 8003

# 数据库地址
datasource:
url: localhost:3306/microservice03
# 数据库基本配置省略

spring:
application:
name: microservice-order # 对外暴露的服务名称


# 客户端注册进eureka服务列表里
eureka:
client:
service-url:
defaultZone: http://eureka01:7001/eureka/,http://eureka02:7002/eureka/,http://eureka03:7003/eureka/,
instance:
instance-id: 书籍订单服务-8003 # 人性化显示出服务的信息
prefer-ip-address: true # 访问路径可显示ip地址

对比后发现,有几个地方需要注意:

  • 对外暴露的服务名称必须要相同,因为都是同一个服务,只不过有多个而已,因为接下来Ribbon是通过服务名来调用服务的;

  • 每个服务连接了不同的数据库,这样用来区分不同的服务,便于测试,实际中也可能是便于维护;

  • 每个服务的个性化名称展示可以区分一下,这样在eureka里可以很好的辨别出来

Eureka 集群还是使用前面的 7001、7002 和 7003,首先我们启动 Eureka 集群,然后分别启动 8001、8002 和 8003 三个订单服务。(友情提示:这里已经启动了6个工程了,如果电脑的性能跟不上的话,可能已经开始卡顿了)。

启动了之后,可以访问下 eureka01:7001,看下三个订单服务是否正常注册到 eureka 集群里。如下图,说明集群和订单服务均正常。

OK,接下来就是重点了,我们启动服务消费方,也就是上一节中的订单消费服务,然后在浏览器输入 http://localhost:9001/consumer/order/get/1 即可查询到对应的订单服务:

{"id":1,"name":"跟武哥一起学 Spring Boot","price":39.99,"dbSource":"microservice03"}

刷新页面,可以看到,结果如下:

{"id":1,"name":"跟武哥一起学 Spring Boot","price":39.99,"dbSource":"microservice01"}

再刷新页面,可以看到,结果如下:

{"id":1,"name":"跟武哥一起学 Spring Boot","price":39.99,"dbSource":"microservice02"}

可以看到,dbsource的值一在 microservice01、microservice02 和 microservice03 之间轮询切换(这个值是我在三个数据库中设置的不同的值,就是为了在这展示,方便看到效果),这就说明了,Ribbon 的负载均衡已经起作用了,客户端会轮询的根据服务名,从 8001、8002 和 8003 之间切换访问,从而达到负载均衡的效果。

同时,也可以看到,Ribbon 的默认负载均衡算法是轮询。

2. 如何指定 Ribbon 的负载均衡策略

由上面的结果可知,Ribbon 默认的策略是轮询,那么 Ribbon 除了轮询,还有哪些负载均衡的策略呢?我们如何去设置自己想要的策略呢?

Ribbon 自带的负载均衡策略有如下几个:

  • RoundRibbonRule:轮询。人人有份,一个个来!

  • RandomRule:随机。拼人品了!

  • AvailabilityFilteringRule:先过滤掉由于多次访问故障而处于断路器跳闸状态的服务,以及并发连接数超过阈值的服务,剩下的服务,使用轮询策略。

  • WeightedResponseTimeRule:根据平均响应时间计算所有服务的权重,响应越快的服务权重越高,越容易被选中。一开始启动时,统计信息不足的情况下,使用轮询。

  • RetryRule:先轮询,如果获取失败则在指定时间内重试,重新轮询可用的服务。

  • BestAvailableRule:先过滤掉由于多次访问故障而处于断路器跳闸状态的服务,然后选择一个并发量最小的服务。

  • ZoneAvoidanceRule:复合判断 server 所在区域的性能和 server 的可用性选择服务器

如何指定 Ribbon 自带的负载均衡策略呢?我们需要在配置类中指定一下即可,如下:

/**
* 配置RestTemplate
* @author shengwu ni
*/
@Configuration
public class RestTemplateConfig {

/**
* '@LoadBalanced'注解表示使用Ribbon实现客户端负载均衡
* @return RestTemplate
*/
@Bean
@LoadBalanced
public RestTemplate getRestTemplate() {
return new RestTemplate();
}

/**
* 指定其他负载均衡策略
* @return IRule
*/
@Bean
public IRule myRule() {
// 指定重试策略:先轮询,若获取失败则在指定时间内重试,重新轮询可用的服务。
return new RetryRule();
}
}

我们可以 new 出以上对应的策略,来实现对应的负载均衡,读者可以 new RandomRule() 测试一下随机策略,然后重复刷新上面的测试地址,可以发现是随机请求三个服务。

以上就是"Spring Cloud中如何使用Ribbon实现客户端的负载均衡"这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注行业资讯频道。

服务 均衡 订单 策略 配置 客户 数据 数据库 三个 口号 地址 集群 名称 客户端 不同 信息 知识 篇文章 对外 端的 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 PS5国内连ea服务器 上海综合网络技术收费 中国网络安全事故案例分析 中学生网络安全知识竞赛考试 金山区智能网络技术备件 开站时候服务器告警 连云港公安局网络安全 成都网络安全工程师怎么兼职 标准网络技术怎么样 信息网络安全法律法规宣贯工作 介绍网络技术的 ppt 后台服务器协议设计 南京舜天集团软件开发 数据库映射实验实验报告 新闻资讯软件开发需求分析 怎么通过手机进入联机侠服务器 网络文明网络安全教育实施方案 金融网络安全知识宣传简报 电网网络安全系统 迁移svn服务器 网络安全要求英文 掌阅科技数字化图书互联网 电子商务网络技术实践报告 网络安全主题绘画少儿 安防宝典网络安全宣传周 如何查看一个数据库有几个表 网络安全制考核制度 内蒙古诚信网络技术服务哪个正规 服务器维护管理题库及答案 椅子设计软件开发
0