Spring Cloud Alibaba-Ribbon的负载均衡和细粒度配置自定义

本文涉及的产品
网络型负载均衡 NLB,每月750个小时 15LCU
应用型负载均衡 ALB,每月750个小时 15LCU
传统型负载均衡 CLB,每月750个小时 15LCU
简介: Spring Cloud Alibaba-Ribbon的负载均衡和细粒度配置自定义

一、Ribbon的重要接口 以及内置负载均衡规则


1、Ribbon重要接口


接口 作用 默认值
IClientConfig 读取配置 DefaultclientConfigImpl
IRule 负载均衡规则,选择实例 ZoneAvoidanceRule
IPing 筛选掉ping不通的实例 默认采用DummyPing实现,该检查策略是一个特殊的实现,<br />实际上它并不会检查实例是否可用,而是始终返回true,默认认为所<br />有服务实例都是可用的.
ServerList<Server> 交给Ribbon的实例列表 Ribbon: ConfigurationBasedServerList<br /> Spring Cloud Alibaba: NacosServerList
ServerListFilter 过滤掉不符合条件的实例 ZonePreferenceServerListFilter
ILoadBalancer Ribbon的入口 ZoneAwareLoadBalancer
ServerListUpdater 更新交给Ribbon的List的策略 PollingServerListUpdater



2、Ribbon负载均衡规则


我们说一下常用的规则


规则名称 特点
RandomRule 随机选择一个Server
NacosRule 同集群优先调用
RetryRule 对选定的负责均衡策略机上充值机制,在一个配置时间段内当选择Server不成功,则一直尝试使用subRule的方式选择一个可用的Server
RoundRobinRule 轮询选择,轮询index,选择index对应位置Server
WeightedResponseTimeRule 根据相应时间加权,相应时间越长,权重越小,被选中的可能性越低
ZoneAvoidanceRule (默认是这个)该策略能够在多区域环境下选出最佳区域的实例进行访问。在没有Zone的环境下,类似于轮询(RoundRobinRule)



二、细粒度配置自定义


ribbon支持非常灵活的配置,用的最多的就是配置他的负载均衡规则,比如:默认ZoneAvoidanceRule 满足不了我们的要求,我们想把这个规则改为随机,ribbon支持细粒度的配置,加入内容中心同时调用两个微服务,那么调用第一个微服务的时候我们可以用随机方式,第二种我们用默认的配置,好这样我们围着这个场景来看一下怎样配置。


先看Java代码的配置。



1、类配置方式


这里的配置类需要放到springboot扫描路径之外,这个需要注意的点。


public class RibbonConfiguration {
    @Bean
    public IRule ribbonRule(){
        //随机选择
        return new RandomRule();
    }
}
复制代码


/**
* 指定配置
**/
@Configuration
@RibbonClient(name = "nx-user",configuration = RibbonConfiguration.class)
public class UserRibbonConfiguration {
}
复制代码


image.png

讲解我们这里配置类并没有增加配置类注解


如果放到springboot能扫描的地方就会成为全局配置文件。对所有的调用都会用这个规则。


2、属性配置方式


将前面的配置注释掉:


如下进行配置:


msb-stock:
  ribbon:
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule
复制代码



3、优先级高低


java配置的要高, 我们可以类配置的路由规则为随机(RandomRule),然后属性配置为轮训(RoundRobinRule);



测试是随机则java配置高于属性配置



4、全局配置


◆方式一︰让ComponentScan上下文重叠(强烈不建议使用

image.png

◆方式二【唯正确的途径】: @RibbonClients(defaultConfiguration=xxx.class)

就是将RibbonClient改为RibbonClients  将configuration改为defaultConfiguration

image.png



相关实践学习
SLB负载均衡实践
本场景通过使用阿里云负载均衡 SLB 以及对负载均衡 SLB 后端服务器 ECS 的权重进行修改,快速解决服务器响应速度慢的问题
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
相关文章
|
20天前
|
弹性计算 负载均衡 网络协议
配置SLB监听器
配置SLB监听器
88 63
|
28天前
|
缓存 负载均衡 算法
如何配置Nginx反向代理以实现负载均衡?
如何配置Nginx反向代理以实现负载均衡?
|
17天前
|
弹性计算 负载均衡 监控
slb配置健康检查
slb配置健康检查
26 5
|
20天前
|
监控 负载均衡 容灾
slb测试配置
slb测试配置
28 5
|
26天前
|
域名解析 监控 网络协议
slb配置域名注意事项
slb配置域名注意事项
34 11
|
20天前
|
负载均衡 前端开发 应用服务中间件
负载均衡指南:Nginx与HAProxy的配置与优化
负载均衡指南:Nginx与HAProxy的配置与优化
39 3
|
25天前
|
域名解析 监控 安全
slb配置检查域名说明注意事项
slb配置检查域名说明注意事项
27 5
|
24天前
|
负载均衡
slb自定义健康检查路径
slb自定义健康检查路径
24 3
|
25天前
|
负载均衡 安全 网络安全
slb配置健康检查域名
slb配置健康检查域名
25 4
|
25天前
|
负载均衡 应用服务中间件
slb何时需要配置健康检查域名
slb何时需要配置健康检查域名
26 3
下一篇
DataWorks