一次线上优化引发生产问题的思考

简介: 一次线上优化引发生产问题的思考

前言


在程序员的系统开发中,有些开发是从0到1的系统开发,有些开发是从1到100的系统开发,有些开发是为了保证系统更好、更稳定运行的优化。

从0到1的开发和从1到100的开发,是为了系统更好的实现功能,需要快速迭代,可以不断的优化、上线、再优化、再上线。

优化需求,是为了更好的使用系统,让系统更好、更稳定的运行,但是优化不能够影响到原有线上的功能,但是我们需要优化。为了防止优化过程中影响到其他代码,这里有几个总结的方案可供参考。


使用开关配置


目前我们项目中配置中心使用的是Apollo,其他配置中心或者配置文件也是同样的道理。


  • 优点:①可配置化,②可以直接防止优化代码报异常影响到原来的逻辑
  • 缺点:开关是一刀切,要么走优化逻辑,要么不走优化逻辑
public static void main(String[] args) {
        // 这里可以使用开关配置,如果有问题可以使用开关及时关掉
        String switchKey = ApolloUtil.getProperty("business_key", "false");
        if (Boolean.TRUE.toString().equalsIgnoreCase(switchKey)){
           // 优化逻辑
        }
        // 原来业务逻辑
    }


使用 try-catch

  • 优点:即使优化代码出现异常也会直接出现的异常吞掉
public static void main(String[] args) {
        try {
            // 优化逻辑
        }catch (Throwable e){
          // 这里可以把优化逻辑代码出现的异常吞下,防止系统异常之类的
            log.error("the exception is {}", e.getMessage(), e);
        }
        // 原来业务逻辑
    }


随机调整


  • 优点:①类似于灰度发布,②可配置化,可以灵活调整比例
  • 缺点:影响部分用户的使用
public static void main(String[] args) {
        int limitNum = Integer.parseInt(ApolloUtil.getProperty("limitNum", "10"));
        // 10%, 90% 类似于灰度发布,可以逐步放开
        if (limitNum > Math.random() * 100){
            // 优化逻辑
        }
        // 原来业务逻辑
    }


联合使用


  • 核心:结合 try-catch 和可配置化
public static void main(String[] args) {
        String str = "";
        boolean flag = optimizationLogic(str);
        if (flag){
            // 根据 flag 为 true 情况下的逻辑
        }else {
            // 根据 flag 为 false 情况下的逻辑
        }
        // 原来的逻辑
    }
    /**
     * 优化逻辑,false 表示不走,true 表示走
     * @param code
     * @return
     */
    private static boolean optimizationLogic(String code){
        try {
            if (null == code || code.isEmpty()){
                return false;
            }
            String switchKey = ApolloUtil.getProperty("business_key", "false");
            if (Boolean.FALSE.toString().equalsIgnoreCase(switchKey)){
                return false;
            }
            // 优化逻辑
            return true;
        }catch (Throwable e){
            // 这里可以把优化逻辑代码出现的异常吞下,防止系统异常之类的
            log.error("the exception is {}", e.getMessage(), e);
        }
        return false;
    }


目录
相关文章
测试闭环
一、需求评审 1.需求评审的目的 明确功能优先级,评审业务流程设计的合理性,评估技术可行性。 2.需求评审中注意事项 a)提前了解产品需求,明确核心流程、功能结构 b)评审过程中不避免乏味,时间越长越容易分心,所以先了解重点模块,循序渐进 c)评审中遇到争议点,避免发散讨论,引导大家快速决策,明确沟通,明确产品拍板 d)评审中遇到无法决策的点,记录下来,会后处理,不过多纠缠,后续让产品决策后更新需求文档。
3046 0
|
13天前
|
传感器 监控 供应链
自动化生产线上的应用
自动化生产线广泛应用在汽车、电子、食品和医药等领域,提高生产效率和质量,节约人力成本。其优势包括生产稳定性强、适应恶劣环境、24小时不间断生产及产品一致性高。随着技术进步,未来自动化生产线将更灵活、定制化,人机融合、绿色环保和智能监控将成为趋势。传感器和电动执行器作为关键组件,优化监控和控制,推动生产效率和质量提升,为企业带来更多机遇与挑战。
10 2
|
4月前
|
存储 JSON Java
线上业务优化之案例实战
线上业务优化之案例实战
|
7月前
|
数据采集 存储 监控
汽车产线生产管控实操
通过阿里云工业物联生产管控平台,快速实现产线设备数据采集、存储、组态交付、反馈控制和指标定义及工艺优化。
155 0
|
监控 Java 测试技术
全链路压测(12):生产压测必不可少的环节
在生产环境开展全链路压测,相对于测试环境来说风险和成本都是比较大的。因此需要一套严格的流程管控和响应机制,以及高效的团队协同体系。
全链路压测(12):生产压测必不可少的环节
|
存储 运维 监控
如何做好线上服务质量保障
上述的内容只是一个引子,因为高可用和线上服务的稳定性有密切的关系。而软件测试或者说质量保障的工作范畴,不仅仅在测试环境,线上环境的服务质量保障,也是我们需要关注的重点。
如何做好线上服务质量保障
EMQ
|
机器学习/深度学习 人工智能 运维
激活海量数据价值,实现生产过程优化
EMQ云边协同工业互联网解决方案,将人工智能与云计算技术接入到传统的工业生产中,帮助企业实现数据流、生产流与控制流的协同,降本增效。
EMQ
153 0
激活海量数据价值,实现生产过程优化
EMQ
|
存储 数据采集 Cloud Native
工厂生产数据实时分析,产品质量高效管控
EMQ基于云原生和云边协同的产品质量溯源解决方案,在现场设备端可实现数据的实时采集分析和异常报警,在云端实现工厂海量数据的统一接入存储,满足智慧工厂质量溯源需求。
EMQ
271 0
工厂生产数据实时分析,产品质量高效管控
|
存储 运维 负载均衡