2021升级版微服务教程6—Ribbon使用+原理+整合Nacos权重+实战优化
Ribbon基本使用
简介
Ribbon是一个客户端负载均衡工具,封装Netflix Ribbon组件,能够提供客户端负载均衡能力。
理解Ribbon最重要的就是理解客户端这个概念,所谓客户端负载均衡工具不同于Nginx(服务端负载均衡),Ribbon和应用程序绑定,本身不是独立的服务,也不存储服务列表,需要负载均衡的时候,会通过应用程序获取注册服务列表,然后通过列表进行负载均衡和调用。
Nginx独立进程做负载均衡,通过负载均衡策略,将请求转发到不同的服务上
客户端负载均衡,通过在客户端保存服务列表信息,然后自己调用负载均衡策略,分摊调用不同的服务
基本使用
Ribbon的负载均衡有两种方式
和 RestTemplate 结合 Ribbon+RestTemplate
和 OpenFeign 结合
Ribbon的核心子模块
ribbon-loadbalancer:可以独立使用或者和其他模块一起使用的负载均衡API
ribbon-core:Ribbon的核心API
订单服务集成Ribbon
订单远程桌面服务调用商品服务
配置过程 分两步
在订单服务中导入ribbon的依赖
<!--ribbon--><dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-ribbon</artifactId></dependency>
配置 RestTemplate
订单服务调用商品服务
订单服务调用商品服务的链接 不能写成ip+端口号,需要写成商品服务的服务名称
参数调优
主要调整请求的超时时间,是否重试
如果业务没有做幂等性的话建议把重试关掉:ribbon.MaxAutoRetriesNextServer=0
# 从注册中心刷新servelist的时间 默认30秒,单位msribbon.ServerListRefreshInterval=15000# 请求连接的超时时间 默认1秒,单位msribbon.ConnectTimeout=30000# 请求处理的超时时间 默认1秒,单位msribbon.ReadTimeout=30000# 对所有操作请求都进行重试,不配置这个MaxAutoRetries不起作用 默认false#ribbon.OkToRetryOnAllOperations=true# 对当前实例的重试次数 默认0# ribbon.MaxAutoRetries=1# 切换实例的重试次数 默认1ribbon.MaxAutoRetriesNextServer=0
如果MaxAutoRetries=1和MaxAutoRetriesNextServer=1请求在1s内响应,超过1秒先同一个服务器上重试1次,如果还是超时或失败,向其他服务上请求重试1次。
那么整个ribbon请求过程的超时时间为:ribbonTimeout = (ribbonReadTimeout + ribbonConnectTimeout) * (maxAutoRetries + 1) * (maxAutoRetriesNextServer + 1