前言
介绍Ribbon负载均衡的一些简单流程和基础知识
负载均衡流程
- 消费者通过服务名称的url发起请求
- Ribbon对请求进行拦截,然后去找真实地址
- Ribbon通过Eureka拉取到了n个服务列表
- Ribbon对服务进行负载均衡的选取
- 请求真实的服务
PS:@LoadBalanced
表示这个Bean的请求要被Ribbon拦截了
负载均衡策略
Ribbon中的负载均衡策略类接口:IRule。
内置负载均衡规则类 | 描述 |
---|---|
RoundRobinRule | 简单轮询服务列表选择服务器。它是Ribbon默认的负载均衡规则。 |
AvailabilityFileteringRule | - 对服务器3次请求失败,会标记为短路 - 忽略并发数过高的服务器,并发数上限可以配置 |
WeightedResponseTimeRule | 为服务器赋予权重值。服务器相应时间越长,权重越小。 |
ZoneAvoidanceRule | 以区域可用的服务器为基础进行服务器的选择。 |
BestAvailabledRule | 忽略短路的服务器,并选择并发低的服务器 |
RandomRule | 随机 |
RetryRule | 重试 |
- 调整规则
1 | // 全局配置:在Application里面修改负载均衡规则 |
Ribbon饥饿加载
默认采用懒加载,第一次访问才会创建拦截客户端,会进行服务拉取,耗时长。
- 开启饿加载
1 | ribbon: |
总结
- 负载均衡规则
- 规则接口是IRule
- 默认实现是ZoneAvoidanceRule,根据zone选择服务列表,然后轮询
- 负载均衡自定义方式
- 代码方式:配置灵活,但修改时需要重新打包发布
- 配置方式:无需重新打包,无法做全局配置
- 饥饿加载
- 开启饿加载
- 指定饿加载的服务名称