原理分析之预发布灰度发布

    spring cloud gateway默认的负载均衡实现类在:org.springframework.cloud.gateway.filter.LoadBalancerClientFilter.java

    1. 解析出请求路径中的scheme
    2. 如果scheme不是以lb协议开头直接跳过
    3. 如果scheme以lb协议开头,则说明需要进行负载均衡,选出一台微服务实例

    其中第4步是由来完成的,我们只要分别继承LoadBalancerClientFilterRibbonLoadBalancerClient,然后重写其中的方法就能完成自定义负载均衡。

    其业务逻辑如下:

    1. 选出对应的所有服务器实例
    2. 将服务器实例进行分类,分别放进预发布List灰度List非预发布List
    3. 如果预发布List灰度List都为空,表示没有开启任何预发/灰度服务,直接使用父类的负载均衡策略
    4. 如果是从预发布域名访问过来,则认为是预发布请求,选出预发服务器
    5. 最后剩下的是正常用户,正常用户不能走预发环境
    • com.gitee.sop.gatewaycommon.gateway.filter.SopLoadBalancerClientFilter
    • com.gitee.sop.gatewaycommon.gateway.loadbalancer.SopLoadBalancerClient
    • com.gitee.sop.gatewaycommon.gateway.loadbalancer.GatewayLoadBalanceServerChooser