本章先介绍ribbon实现概览,ribbon均衡策略,之后再介绍如何在配置文件里指定某个负载均衡。
一、ribbon实现概览
通过restTemplete请求一个服务service-A,在没使用ribbon之前,需要uri指定服务器地址,如http://localhost:8801/getUser。使用ribbon之后,服务器名代替地址进行访问,如http://service-A/getUser。
ribbon完成了服务器名的寻址任务。其中选择哪台服务器上的服务,是委托负载均衡策略去完成。具体流程如下图所示:
图中,蓝色方块为ribbon核心处理工具,包括:拦截器LoadBalancerIntersepter,负载均衡器LoadBalancer(默认ZoneAwareLoadBalance),负载均衡策略Rule(默认轮询策略),检测器Ping(默认线性遍历)
二、均衡策略介绍
负载均衡策略主要有:
随机策略RandomRule
线性轮询策略RoundRobinRule
重试策略RetryRule(基于轮询策略)
权重策略WeightedResponseTimeRule(默认定时30秒计算服务实例权重,平均响应时间越短的实例,越可能被命中)
可用过滤策略AvailabilityFilteringRule(先过滤,再轮询。过滤规则:1是否有断路故障;2并发请求数是否大于阈值,阈值默认2的32次方-1,可通过..ActiveConnetctionsLimit修改)
区域可用策略ZoneAvoidanceRule(先过滤,再轮询。先考虑区域可用,性能次之。结合Eureka,默认轮询策略会被覆盖为此策略,而且会使用到重试策略)
三、个性化配置
我们可用@RibbonClient(name=“service-A”,configuration = RibbonConfig.class)形式进行配置,其中RibbonConfig.class是ribbon的配置类。本章不就其具体介绍。
Spring Cloud 的Camden版本之后,Ribbon实现了个性化定制。我们可以在配置文件(如application.properties)中配置ribbon的拦截器、均衡策略、检测器等。
本章主要介绍均衡策略的设置,格式为:
<client>.<nameSpace>.<property>=<value>
如,设置service-A实例的负载均衡策略为随机策略RandomRule:
service-A.ribbon.NFLoadBalancerRuleClassName=com.netflix.loadbalancer.RandomRule