认识学习
Ribbon 是 Netflix 开发的一个用于客户端负载均衡的库。它被广泛用于微服务架构中,可以帮助客户端选择合适的服务实例来处理请求,实现负载均衡和容错。
Ribbon 提供了多种负载均衡算法(例如随机、轮询、加权等),它可以根据配置的规则和策略来选择服务实例。通过在客户端使用 Ribbon,可以避免对服务的直接访问,而是通过负载均衡器来代理请求,从而提高了应用的可扩展性和弹性。
在微服务架构中,通常会有多个相同的服务实例运行在不同的主机上,这些实例提供相同的服务并组成一个服务集群。Ribbon 可以通过与服务注册中心(例如 Eureka)集成,动态地获取可用的服务实例列表,并根据负载均衡算法选择一个实例来处理每个请求。同时,Ribbon 还提供了一些其他功能,如故障转移和重试等,以增加应用的容错能力。
Ribbon 在 Spring Cloud 中得到了广泛应用,它可以与 Spring Cloud 的服务发现组件(如 Eureka、Consul)无缝集成,简化了负载均衡的配置和使用。通过在客户端添加 Ribbon 的依赖,并进行相应的配置,即可在微服务架构中使用 Ribbon 实现客户端负载均衡。
使用方法–这里采用结合Eureka的方式
修改负载均衡的方式有两种
- 1、全局配置,将针对该服务下将要访问的所有服务采用该配置规则
// 通过在SpringBoot启动类中注入IRue接口Bean实现方式的修改
@Bean
public IRule randomRule() {
return new RandomRule();
}
- 2、特定配置,针对需要采用改规则的服务进行特定配置
# 在application.yml文件中配置
userservice:
ribbon:
NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule
规则名称 | 方式 |
---|---|
RoundRobinRule | 轮询 |
WeightedResponseTimeRule | 权重(响应时间) |
RandomRule | 随机 |
BestAvailableRule | 最小连接数 |
RetryRule | 重试(轮询实例失效不断重试) |
AvailabilityFilteringRule | 过滤非健康->最小连接数 |
ZoneAvoidanceRule | 区域敏感(轮询) |
小Tips
Ribbon默认采用懒加载,当我们第一次访问时创建LoadBalanClient
为了减少首次的访问耗时可以通过一下配置进行改进
# 开启饥饿加载
ribbon:
eager-load:
enabled: true
clients:
- userservice