0%

Ribbon负载均衡基础

前言

介绍Ribbon负载均衡的一些简单流程和基础知识

负载均衡流程

  • 消费者通过服务名称的url发起请求
  • Ribbon对请求进行拦截,然后去找真实地址
  • Ribbon通过Eureka拉取到了n个服务列表
  • Ribbon对服务进行负载均衡的选取
  • 请求真实的服务

PS:@LoadBalanced表示这个Bean的请求要被Ribbon拦截了

负载均衡策略

Ribbon中的负载均衡策略类接口:IRule。

内置负载均衡规则类 描述
RoundRobinRule 简单轮询服务列表选择服务器。它是Ribbon默认的负载均衡规则。
AvailabilityFileteringRule - 对服务器3次请求失败,会标记为短路
- 忽略并发数过高的服务器,并发数上限可以配置
WeightedResponseTimeRule 为服务器赋予权重值。服务器相应时间越长,权重越小。
ZoneAvoidanceRule 以区域可用的服务器为基础进行服务器的选择。
BestAvailabledRule 忽略短路的服务器,并选择并发低的服务器
RandomRule 随机
RetryRule 重试
  • 调整规则
1
2
3
4
5
6
7
8
// 全局配置:在Application里面修改负载均衡规则
@Bean
public IRule randomRule() {
return new RandomRule();
}

// 局部配置:在application.yml里面配置,如在orderservice里面配置userservice服务的负载均衡策略
userservice.ribbon.NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule

Ribbon饥饿加载

默认采用懒加载,第一次访问才会创建拦截客户端,会进行服务拉取,耗时长。

  • 开启饿加载
1
2
3
4
5
6
7
ribbon:
eager-load:
enabled: true
#clients: userservice # 指定对某个服务饿加载
clients: # 对多个服务饿加载
- service1
- service2

总结

  • 负载均衡规则
    • 规则接口是IRule
    • 默认实现是ZoneAvoidanceRule,根据zone选择服务列表,然后轮询
  • 负载均衡自定义方式
    • 代码方式:配置灵活,但修改时需要重新打包发布
    • 配置方式:无需重新打包,无法做全局配置
  • 饥饿加载
    • 开启饿加载
    • 指定饿加载的服务名称