美文网首页springbootconfigfeignstarter
spring cloud zuul扩展灰度权限等

spring cloud zuul扩展灰度权限等

作者: jey恒 | 来源:发表于2017-07-16 17:34 被阅读827次

灰度方案

目前现状分析

  • zuul做网关,统一所有内部服务的入口
  • 目前没有用 eureka 注册中心 【目前公司架构dubbo,注册中心zookeeper】
  • 采用类似nginx的反向代理,ribbon路由
  • 服务一般部署多台,比如A,B,C三台,每次只拿一台做灰度机器
  • 只支持zuul网关下http协议的灰度

灰度方式

  • zuul本地缓存是否开启全局灰度【提高性能不灰度的时候不用调用redis】
  • 每个服务的灰度控制在redis中, 配置格式如下
  • 根据简单用户id去找到toServerId灰度机器
[
    {
        "toServerId": "localhost:8585", 
        "userList": null, 
        "app": "tsms", 
        "serverIdList": [
            "localhost:8080", 
            "localhost:8585"
        ], 
        "graying": true
    }
]

灰度结合发布的流程

  • 发布之前,将severId A为localhost:8080 执行接口标记灰度
  • 流量在A 全部切换完 等一分钟差不多
  • 运维发布平台选择 发布到A机器
  • 用设置的灰度userid,访问就会访问到A机器 刚发布的新版本
  • 等半个小时 没有问题,将 B 切换为灰度机器
  • 发布b机器 ,然后将graying标记为false
  • 上线完成【简单的几台集群可以完全可以满足】

实现

  • 全局灰度开启,redis订阅,修改gateway集群中所有的本地缓存
  • 自定义ribbon复杂均衡
tsms:
  ribbon:
    listOfServers: localhost:8080, localhost:8585

tsms:
  ribbon:
   NFLoadBalancerRuleClassName: com.xxx.xxx.gateway.ribbon.GrayLoadBalancerRule

GrayLoadBalancerRule 我们自定义的ribbon复杂均衡

  • 有击中灰度的用户走灰度
  • 没有走轮询
@Override
  public Server choose(Object key) {
    RequestContext requestContext = RequestContext.getCurrentContext();

   权限控制filter解码后 得到用户id
    String userId = (String) requestContext.get(Constants.ACCESS_USER_ID);

    DynamicServerListLoadBalancer loadBalancer = (DynamicServerListLoadBalancer) getLoadBalancer();

    if (loadBalancer == null) {
      log.warn("no load balancer");
      return null;
    }

    List<Server> serverList = loadBalancer.getReachableServers();

    String client = loadBalancer.getClientConfig().getClientName();

    GrayHolderInfo grayHolderInfo = grayService.grayByUserId(client, serverList, userId);

    if (grayHolderInfo.getGrayServer().isPresent()) {

      return grayHolderInfo.getGrayServer().get();
    }
    轮询
    return roundRuleChoose(client, loadBalancer, grayHolderInfo);
  }
  • 大概灰度流程到此简单实现

需要做的

  • 压测

相关文章

网友评论

    本文标题:spring cloud zuul扩展灰度权限等

    本文链接:https://www.haomeiwen.com/subject/xtxxkxtx.html