• 数据处理程序的一点经验


          背景:前几天,同事告诉我DSR(内部一个数据处理应用)又挂了,这次的数据丢失特别严重,有25天的数据受到影响。这已经是上线来的第三次出问题了,如果再不认真处理,下次肯定还会有这种问题。

    结合同事经常抱怨的事情和我自己的经验,数据处理程序里常见的坑点有:
         1.程序升级、迁移等运维需求导致配置错误
         2.程序自身的bug
         3.外部依赖项的变更
         4.部分内容缺少相应的测试环境,测试困难


          对于第一点,比较好的方案是使用两套配置文件:开发和线上,基于maven的profile,可以很方便地做到这点,这样把配置的工作的将由程序来完成,可以减少人工出错,也便于开发和维护。同时,在修改完成配置后,需要去检查配置到底生效没有
          对于第2个问题,我觉得既然bug无法彻底消除,那就要想办法降低它的伤害,并提高调试开发的工作效率。首先就是要把原始的数据记录下来,例如,从消息队列中读取的每条消息,都可以存起来,这样当程序没有正确保存数据时,还可以在修复完数据之后把这部分数据追加回去。其次是记录程序中发生的异常,并在关键逻辑节点上输出日志,这样调试找问题的时候就会非常简单。
         第3个问题的话,就需要引入监控,外部依赖项的变更导致的各种异常,如输出数据的数量、外部接口的调用情况、异常的次数等,通过统计程序的运行情况,可以较快地发现,从而减少这个依赖项变化带来的破坏。
    其他的经验还包括:
        a.对于数据处理程序应该有至少两种运行模式:
            1.定时运行的正常模式
            2.补充数据时的批处理模式,最好允许在命令中输入参数,对于调试会比较方便
            3.测试接口和验证特定数据的测试模式,可选
        b.过早的优化是魔鬼。先弄清楚需求,搞清楚数据量、接口吞吐量等功能非功能性需求之后,再去考虑性能等问题,过早的优化只会让自己陷入泥潭
        c.对程序的关键/重要依赖项和指标进行监控,出现问题里及早修复

      以上就是这段时间主要碰到的问题和解决方式

  • 相关阅读:
    一个ball例程带你进入 Halcon 世界
    新公民读本
    open_window()到底做了什么?
    duilib学习领悟(4)
    duilib学习领悟(3)
    duilib学习领悟(2)
    通过Vue路由传参的两种方式及Vue组件中接收参数的方式
    彻底研透javascript中的对象及面向对象编程
    thinkphp5中使用phpmailer实现发送邮件功能
    小程序和ThinkPHP5结合实现登录状态(含代码)
  • 原文地址:https://www.cnblogs.com/showstone/p/4433340.html
Copyright © 2020-2023  润新知