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已变成随机调用
三、总结

个人在实现时,发现负载均衡策略配置需指定调用的服务,如果一个服务中需要调用很多其他服务,则每个服务都需要进行配置,配置较繁琐,且不方便统一管理(如有不对的地方请指正)。就生产而言,部署建议使用集群管理平台进行部署,高可用,负载均衡等均在集群管理平台统一配置

springboot 单体配置负载均衡 springboot负载均衡策略_负载均衡