记一次线上开关推送问题

线上问题复盘

背景:现在开仓是需要打开一系列开关,其中仓这边一共有开关如下,有独立的群产品统一通知相关人员进行开关配置.

xxxxx仓,仓code :
1.开启联运收货
2.配置发货dts-是否针对加工品
3.越库回传dts
4.采购开启多配多发开关
5.打开配货单接收开关
6.打开波次完整性校验开关 ​
7.取消、延期接口开关 ​​
8.打开内部仓开关
9.库存占用开关

  1. 作为ums整个链路的入口,现在接单这边主要维护两个开关,b2bOutDecouplingWids和b2bWarehouseIdList

    1. b2bOutDecouplingWids为接耦名单,DTS占用和生成拣货单都依赖该开关进行占用
    1. b2bWarehouseId是B2B仓白名单
  2. 开关推送

    1. 16:54 产品通知新开仓开关
    1. 17:15:56进行开关推送
    1. diamond反馈推送成功
  3. 正常发布

    1. 20:11:10开始灰度部署
    1. 20:30左右反馈缺货出
    1. 21:00开始回滚
    1. 发现是实操打包完成依赖开关outDecouplingWids为空
    1. 检查日志发现是diamond解析报错
  4. 问题原因

    1. 开关推送diamond该配置是一个字符串的解析,该推送在末尾存在一个无法肉眼识别的回车
    1. 该解析代码:
private void parseOutDecouplingWids(String config) {

        log.info("[Diamond] outDecouplingWids:" + config);

        if (StringUtil.isBlank(config)) {
            return;
        }
        try {
            Set<Long> set = Sets.newHashSet();
            for (String widStr : config.split(",")) {
                set.add(Long.valueOf(widStr));
            }
            outDecouplingWids = Lists.newArrayList(set);
            // 容器加载完成,静态变量加载
            outDecouplingWidConstant = Lists.newArrayList(set);
        } catch (Exception e) {
            log.error("parse out decoupling switch error", e);
        }
    }

config.split(",")这里解析报错,被catch住。
逻辑是解析报错只会记录一个日志信息,系统仍然使用上一次推送缓存的值.
这样的结果就是线上正常运行,只是推送值无效。
4. 3. 正式发布机器重新启动。diamond的init方法开始去解析配置最新值, 依旧解析错误,正式发布机器无法获取配置,获取的值为空
4. 4. 线上机器与发布机器的开关不一致,发布机器上的RF请求打包依赖的开关配置为空,打包缺货出回传

  1. 问题解决

    1. UMX紧急评估影响主要在缺货出,由于已经回传,相关链路需要进行数据订正
    1. 各个域相关同学进行数据订正
      拉取2019-02-20 00:00:00 ~ 23:40的缺货xx订单数据
      整理出其中需要订正的缺货的单子, 同步客服处理退款的方案
      整批次缺货出的订单筛选是否需要重新下发
      根据履约单单状态,给出不同的处理方案在途库存不需要订正,实物库存根据第二天的配送,需要ums跟库存进行对比订正
      财务根据配送结果进行缺货订单的订正
  2. 后续action

    1. 开关配置注意避免使用回车与空格或中文等特殊字符, 推送完要尽量确认各种指标是否正常
    1. 开关解析代码需要优化, diamond配置不像switch强行定义的推送类型,推送成功失败有明确的反馈,因此需要格外注意
    1. diamond解析错误监控需要配置
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在一个流量高峰期间,我们的网站开始出现了性能问题,特别是Tomcat的worker线程居高不下。这个问题对我们的系统稳定性和用户体验产生了严重影响,因此我们立即进行了排查和解决。 首先,我们使用工具监控了Tomcat的worker线程数,发现在高峰期间线程数增长过快,并且没有下降的趋势。接下来,我们对服务器进行了资源监控,发现CPU和内存的使用率都没有超过正常范围。这表明问题不是由于服务器资源不足导致的。 然后,我们查看了Tomcat的日志文件,发现一些异常错误信息与数据库连接相关。我们怀疑是数据库连接池的问题,因此我们进一步检查了数据库的连接数和连接池的配置。经过对比分析,我们发现数据库连接池的最大连接数被设置得过小,导致在高流量时无法满足请求的需求。我们立即调整了连接池的配置,增加了最大连接数,以应对高峰期的负载。 随后,我们重启了Tomcat,并观察了一段时间。我们发现线程数在高峰期开始时仍然有所增长,但是随着时间的推移开始逐渐下降,最终稳定在一个正常的范围内。这表明我们的排查和解决措施是有效的。 为了进一步确保问题的解决,我们还增加了日志监控和报警机制,以便更及时地发现和解决类似问题。 通过这次经历,我们学到了对于高并发流量情况下的线上问题,需要全面考虑不同组件的性能和配置,并对各个环节进行监控和调整。同时,日志分析和排查是至关重要的工作,能够帮助我们准确定位问题并采取合适的解决措施,最终提升系统的稳定性和性能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值