Spring Cloud教程 | 第六篇:负载均衡策略配置及总结 | Feign | Ribbon
一、前言
第五篇中已介绍,feign其实不是做负载均衡的,负载均衡是ribbon的功能,feign只是集成了ribbon而已,换句话说负载均衡的功能是feign内置的ribbon在实现的。因此配置负载均衡策略即为对ribbon进行配置。
目前公司的生产系统负载均衡、高可用等均使用集群管理平台Kubernetes(K8S)实现。本部门人员此部分了解即可,不指导生产使用
Spring Cloud版本 Spring Boot版本 JAVA IDE
Greenwich.SR1 2.1.6.RELEASE 1.8 IDEA
为模拟实际开发,本篇教程除alh-tms外,所有的参数均从远程配置中心读取,若是不用远程配置中心,请在本地应用直接写各项参数即可。
涉及项目:
alh-config-server(6001): 保持启动状态
alh-eureka-server(6000):保持启动状态
alh-tms(8001):保持上一篇中两个实例启动状态
alh-order(8002)
完整教程全部章节目录:
二、Feign中Ribbon配置
Ribbon负载均衡策略有以下几种:
策略类 | 名称 | 说明 |
RandomRule | 随机策略 | 随机选择 Server |
RoundRobinRule | 轮训策略 | 按顺序循环选择 Server |
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 |
调用者(即服务消费者)alh-order配置文件application.properties如下
eureka.client.service-url.defaultZone=${default-zone}
server.port=${server.port}
spring.application.name=alh-order
#其中“alh-tms”指明对哪个微服务的调用进行配置,当前配置使用随机策略,修改策略修改最后的类名即可
alh-tms.ribbon.NFLoadBalancerRuleClassName=com.netflix.loadbalancer.RandomRule
# 设置连接超时时间,单位ms
ribbon.ConnectTimeout=5000
# 设置读取超时时间,单位ms
ribbon.ReadTimeout=5000
# 对所有操作请求都进行重试
ribbon.OkToRetryOnAllOperations=true
# 切换实例的重试次数
ribbon.MaxAutoRetriesNextServer=2
# 对当前实例的重试次数
ribbon.MaxAutoRetries=1
启动后调用上一篇中的http://localhost:8002/tms/csinfo,发现调用alh-tms已变成随机调用
三、总结
个人在实现时,发现负载均衡策略配置需指定调用的服务,如果一个服务中需要调用很多其他服务,则每个服务都需要进行配置,配置较繁琐,且不方便统一管理(如有不对的地方请指正)。就生产而言,部署建议使用集群管理平台进行部署,高可用,负载均衡等均在集群管理平台统一配置