数据处理程序的一点经验
来源:互联网 发布:java物流项目描述 编辑:程序博客网 时间:2024/05/01 15:27
背景:前几天,同事告诉我DSR(内部一个数据处理应用)又挂了,这次的数据丢失特别严重,有25天的数据受到影响。这已经是上线来的第三次出问题了,如果再不认真处理,下次肯定还会有这种问题。
结合同事经常抱怨的事情和我自己的经验,数据处理程序里常见的坑点有:
1.程序升级、迁移等运维需求导致配置错误
2.程序自身的bug
3.外部依赖项的变更
4.部分内容缺少相应的测试环境,测试困难
对于第一点,比较好的方案是使用两套配置文件:开发和线上,基于maven的profile,可以很方便地做到这点,这样把配置的工作的将由程序来完成,可以减少人工出错,也便于开发和维护。同时,在修改完成配置后,需要去检查配置到底生效没有
对于第2个问题,我觉得既然bug无法彻底消除,那就要想办法降低它的伤害,并提高调试开发的工作效率。首先就是要把原始的数据记录下来,例如,从消息队列中读取的每条消息,都可以存起来,这样当程序没有正确保存数据时,还可以在修复完数据之后把这部分数据追加回去。其次是记录程序中发生的异常,并在关键逻辑节点上输出日志,这样调试找问题的时候就会非常简单。
第3个问题的话,就需要引入监控,外部依赖项的变更导致的各种异常,如输出数据的数量、外部接口的调用情况、异常的次数等,通过统计程序的运行情况,可以较快地发现,从而减少这个依赖项变化带来的破坏。
其他的经验还包括:
a.对于数据处理程序应该有至少两种运行模式:
1.定时运行的正常模式
2.补充数据时的批处理模式,最好允许在命令中输入参数,对于调试会比较方便
3.测试接口和验证特定数据的测试模式,可选
b.过早的优化是魔鬼。先弄清楚需求,搞清楚数据量、接口吞吐量等功能非功能性需求之后,再去考虑性能等问题,过早的优化只会让自己陷入泥潭
c.对程序的关键/重要依赖项和指标进行监控,出现问题里及早修复
以上就是这段时间主要碰到的问题和解决方式
结合同事经常抱怨的事情和我自己的经验,数据处理程序里常见的坑点有:
1.程序升级、迁移等运维需求导致配置错误
2.程序自身的bug
3.外部依赖项的变更
4.部分内容缺少相应的测试环境,测试困难
对于第一点,比较好的方案是使用两套配置文件:开发和线上,基于maven的profile,可以很方便地做到这点,这样把配置的工作的将由程序来完成,可以减少人工出错,也便于开发和维护。同时,在修改完成配置后,需要去检查配置到底生效没有
对于第2个问题,我觉得既然bug无法彻底消除,那就要想办法降低它的伤害,并提高调试开发的工作效率。首先就是要把原始的数据记录下来,例如,从消息队列中读取的每条消息,都可以存起来,这样当程序没有正确保存数据时,还可以在修复完数据之后把这部分数据追加回去。其次是记录程序中发生的异常,并在关键逻辑节点上输出日志,这样调试找问题的时候就会非常简单。
第3个问题的话,就需要引入监控,外部依赖项的变更导致的各种异常,如输出数据的数量、外部接口的调用情况、异常的次数等,通过统计程序的运行情况,可以较快地发现,从而减少这个依赖项变化带来的破坏。
其他的经验还包括:
a.对于数据处理程序应该有至少两种运行模式:
1.定时运行的正常模式
2.补充数据时的批处理模式,最好允许在命令中输入参数,对于调试会比较方便
3.测试接口和验证特定数据的测试模式,可选
b.过早的优化是魔鬼。先弄清楚需求,搞清楚数据量、接口吞吐量等功能非功能性需求之后,再去考虑性能等问题,过早的优化只会让自己陷入泥潭
c.对程序的关键/重要依赖项和指标进行监控,出现问题里及早修复
以上就是这段时间主要碰到的问题和解决方式
0 0
- 数据处理程序的一点经验
- 一点arm程序优化的经验
- 提高程序并行效率的一点经验
- 提高程序并行效率的一点经验
- 提高程序并行效率的一点经验
- tomcat多端口,多web程序的一点学习经验
- C程序从WINDOWS 迁移到LINUX的一点经验。
- 使用VS2010开发Qt程序的一点经验
- 使用VS2010开发Qt程序的一点经验
- GOOGLE的一点经验
- 的一点经验
- CGI的一点经验
- Hibernate的一点经验
- 爬虫的一点经验
- 程序员的一点经验
- Hive JSON数据处理的一点探索
- Hive JSON数据处理的一点探索
- Hive JSON数据处理的一点探索
- poj 3070 矩阵快速幂
- ZOJ 3610 Yet Another Story of Rock-paper-scissors
- manachar 模板
- zoj superbot (bfs)
- Android 5.0学习<三>
- 数据处理程序的一点经验
- HDU 2852-KiKi's K-Number(线段树)
- mysql相关的日志文件
- Android tab页的实现
- zzulioj 1714 含蓄的情书
- Python GUI 05----Checkbutton
- Linux中批量搜索文件内容
- js关闭当前页面(窗口)的几种方式总结
- hdu Advanced Fruits 最长公共系列