• 新需求上线,灰度测? 限流测?


    1. 新需求场景

    新需求即将上线,虽然已经经历了,开发自测,测试环境测试,堡垒环境测试。

    但是还是不敢直接发布到生产环境,全量接入生产流量投入运行,新的功能牵扯到了N多个场景。

    而测试覆盖率也不竟然全部,如果漏掉一个场景,恰巧生产环境命中,可能就会带来很多损失

    那么如何避免? 有没有好的方案来解决?

    2. 灰度测试 , 缓慢接入生产流量

      2.1:灰度测试场景

      有些场景,在测试环境无法测试,必须要到生产环境验证。这个时候就需要给新功能做好开关,只有配置过的用户才能进入到新的功能逻辑中。从而进行灰度测试。

      2.2 :缓慢接入生产流量

      灰度测试通过,但是需要开少量流量,来进行观察新功能是否有异常, 比如先开5%的流量,在开10%的流量,在开20%的流量 来验证新功能。

    3. 技术实现

      3.1: 分析下来,其实就是一个开关,需要兼容如上场景,比如按配置的userid,及userid 尾号来进行灰度测试和限流。

    具体code 如下:

    /**
         * 限流检查
         *
         * @param baseEntity
         * @param checkValue
         * @return
         */
        public static boolean limitCheck(LimitflowBaseEntity baseEntity, String checkValue) {
            if (baseEntity == null || baseEntity.isOpen == false || StringHelper.isEmpty(checkValue))
                return false;
    
            return limitCheck(baseEntity.isOpen, baseEntity.limitNums, checkValue);
        }
    
        /**
         * 限流检测
         *
         * @param isOpen
         * @param limitNums
         * @param checkValue
         * @return
         */
        public static boolean limitCheck(boolean isOpen, String limitNums, String checkValue) {
            try {
                if (isOpen == false || StringHelper.isEmpty(checkValue))
                    return false;
    
                if (StringHelper.isEmpty(limitNums))
                    return true;
                String[] nums = limitNums.split(",");
    
                boolean checkResult = false;
                for (String num : nums) {
                    // 灰度
                    if (num.equals(checkValue)) {
                        checkResult = true;
                        break;
                    }
                    
                    // 比对尾号是否相等 => 限流
                    if (checkValue.length() >= num.length()
                            && num.equals(checkValue.substring(checkValue.length() - num.length()))) {
                        checkResult = true;
                        break;
                    }
                }
    
                return checkResult;
            } catch (Exception e) {
                CLogger.Warn("limitCheck", e.getMessage(), LogType.Business);
            }
    
            return false;
        }
    
    // 配置实体
    public class LimitflowBaseEntity {
        /// <summary>
        /// 是否打开
        /// </summary>
        public boolean isOpen;
    
        /// <summary>
        /// 尾号配置
        /// </summary>
        public String limitNums;
    }
    六度与心 修行苦 苦修行
  • 相关阅读:
    经典排序算法 圈排序Cycle Sort
    javascript中的封装多态和继承
    经典排序算法 珠排序Bead Sort
    经典排序算法 希尔排序Shell sort
    经典排序算法 梳排序Comb sort
    逻辑电路 晶体管Transistor
    经典排序算法 Flash Sort
    【转】一些ASP.Net开发调试环境错误的解决方法
    【原】IIS发布ASP.Net网站提示"访问IIS元数据库失败"的解决
    【SQL精彩语句】分拆列值
  • 原文地址:https://www.cnblogs.com/hdtechnology/p/9383933.html
Copyright © 2020-2023  润新知