【微服务>>>负载均衡】
一、简介
Ribbon是一个负载均衡组件,具有丰富的负载均衡策略、重试机制、支持多协议的异步与响应式模型、容错、缓存与批处理功能。
二、Ribbon与负载均衡
负载均衡,即利用特定方式将流量分摊到多个操作单元上,它对系统吞吐量与系统处理能力有着质的提升。
负载均衡分类:
1 集中式负载均衡:也叫做服务端负载均衡,位于英特网与服务提供者之间,负责把网络请求转发给各个提供单位,典型产品是Ngixn;
2 进程负载均衡:也叫作客户端负载均衡,位于服务提供者内部,从注册中心的已注册实例库选取实例进行流量导入,整个过程都是在进程间通信。
Ribbon就是典型的客户端负载均衡,它赋予了应用一些支配HTTP与TCP行为的能力,如果没有Ribbon,Spring Cloud构建的服务则无法横向扩展,所以Spring Cloud的Feign和Zuul默认集成了Ribbon。
三、负载均衡策略
Ribbon有7中可选的负载均衡策略,如下:
RomdomRule:随机策略,随机选择 Server;
RoundRobbinRule:轮询策略,按顺序循环选择 Server,该策略是Ribbon默认策略;
RetryRule:重试策略,在一个配置时间段内当选择 server 不成功,则一直尝试选择一个可用的 server;
BestAvailableRule:最低并发策略,逐个考察 server,如果 server 断路器打开,则忽略,再选择其中并发连接最低的 server;
AvailabilityFilteringRule:可用过滤策略,过滤掉一直连接失败并被标记为 circuit tripped 的 server,过滤掉那些高并发连接的 server(active connections 超过配置的阀值);
ResponseTimeWeightedRule:响应时间加权策略,根据 server 的响应时间分配权重。响应时间越长,权重越低,被选择到的概率就越低;响应时间越短,权重越高,被选择到的概率就越高。这个策略很贴切,综合了各种因素,如:网络、硬盘、IO等,这些因素直接影响着响应时间;
ZoneAvoidanceRule:区域权衡策略,综合判断 server 所在区域的性能和 server 的可用性轮询选择 server,并且判定一个 AWS Zone 的运行性能是否可用,剔除不可用的 Zone 中的所有 server。
四、策略设置方式
1 全局策略设置
2 基于注解的策略设置
3 基于配置文件的策略设置
五、调整Ribbon的加载模式
Ribbon在进行客户端负载均衡的时候并不是跟随服务的启动进行上下文加载,而是在发生第一次请求的时候才会去创建,即懒加载,所以有时候会导致服务第一次调用的超时,介于此问题,可以调整Ribbon的加载模式为饥饿加载,即在启动的时候便加载所有配置项的应用程序上下文。
六、简单总结
Ribbon是一个客户端负载均衡组件,能够为微服务体系提供合理的流量导入,微服务体系能够具备横向扩展的能力,就仰仗于Ribbon。