spring cloud自定义loaderbalancer实现流量就近访问

spring cloud自定义loaderbalancer实现流量就近访问

背景

文旅项目处于稳定需要,目前每个服务部署了多个实例,分布在不同的结点;同时为了应对甲方的稳定性需要,接下来会上云

这样,每个服务的多个节点会跨网络,甚至是不同的运营商,这样会带来一些问题

基于现有的负载均衡策略,会出现跨网络节点互相访问,这样带来的超时会比较明显,因此需要解决这个问题

目标

实现流量的就近访问

方案

基于spring cloud loadbalancer

代码分析

先看spring-cloud-loadbalancer下spring.factories

# AutoConfiguration
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
org.springframework.cloud.loadbalancer.config.LoadBalancerAutoConfiguration,\
org.springframework.cloud.loadbalancer.config.BlockingLoadBalancerClientAutoConfiguration,\
org.springframework.cloud.loadbalancer.config.LoadBalancerCacheAutoConfiguration,\
org.springframework.cloud.loadbalancer.security.OAuth2LoadBalancerClientAutoConfiguration,\
org.springframework.cloud.loadbalancer.config.LoadBalancerStatsAutoConfiguration

重点关注org.springframework.cloud.loadbalancer.config.LoadBalancerAutoConfiguration

接着看org.springframework.cloud.loadbalancer.annotation.LoadBalancerClients

通过defaultConfiguration可以指定默认配置,如果不指定,会用到org.springframework.cloud.loadbalancer.annotation.LoadBalancerClientConfiguration

为什么默认会走到org.springframework.cloud.loadbalancer.annotation.LoadBalancerClientConfiguration

看org.springframework.cloud.loadbalancer.support.LoadBalancerClientFactory

如果还想继续往下跟,可以看org.springframework.cloud.gateway.filter.ReactiveLoadBalancerClientFilter

具体实施

替换默认配置

应用端通过@LoadBalancerClients 注解修改默认配置

负载策略

1、优先访问通ip节点,也可以访问同网段节点(此处未做实现)

2、如果没有通ip节点,轮询选择一个

3、开关控制,关闭之后继续走轮询

代码如下

功能开启

最后更新于