数据处理程序的一点经验
? ? ? 背景:前幾天,同事告訴我DSR(內(nèi)部一個(gè)數(shù)據(jù)處理應(yīng)用)又掛了,這次的數(shù)據(jù)丟失特別嚴(yán)重,有25天的數(shù)據(jù)受到影響。這已經(jīng)是上線(xiàn)來(lái)的第三次出問(wèn)題了,如果再不認(rèn)真處理,下次肯定還會(huì)有這種問(wèn)題。
結(jié)合同事經(jīng)常抱怨的事情和我自己的經(jīng)驗(yàn),數(shù)據(jù)處理程序里常見(jiàn)的坑點(diǎn)有:
? ? ?1.程序升級(jí)、遷移等運(yùn)維需求導(dǎo)致配置錯(cuò)誤
? ? ?2.程序自身的bug
? ? ?3.外部依賴(lài)項(xiàng)的變更
? ? ?4.部分內(nèi)容缺少相應(yīng)的測(cè)試環(huán)境,測(cè)試?yán)щy
? ? ? 對(duì)于第一點(diǎn),比較好的方案是使用兩套配置文件:開(kāi)發(fā)和線(xiàn)上,基于maven的profile,可以很方便地做到這點(diǎn),這樣把配置的工作的將由程序來(lái)完成,可以減少人工出錯(cuò),也便于開(kāi)發(fā)和維護(hù)。同時(shí),在修改完成配置后,需要去檢查配置到底生效沒(méi)有
? ? ? 對(duì)于第2個(gè)問(wèn)題,我覺(jué)得既然bug無(wú)法徹底消除,那就要想辦法降低它的傷害,并提高調(diào)試開(kāi)發(fā)的工作效率。首先就是要把原始的數(shù)據(jù)記錄下來(lái),例如,從消息隊(duì)列中讀取的每條消息,都可以存起來(lái),這樣當(dāng)程序沒(méi)有正確保存數(shù)據(jù)時(shí),還可以在修復(fù)完數(shù)據(jù)之后把這部分?jǐn)?shù)據(jù)追加回去。其次是記錄程序中發(fā)生的異常,并在關(guān)鍵邏輯節(jié)點(diǎn)上輸出日志,這樣調(diào)試找問(wèn)題的時(shí)候就會(huì)非常簡(jiǎn)單。
? ? ?第3個(gè)問(wèn)題的話(huà),就需要引入監(jiān)控,外部依賴(lài)項(xiàng)的變更導(dǎo)致的各種異常,如輸出數(shù)據(jù)的數(shù)量、外部接口的調(diào)用情況、異常的次數(shù)等,通過(guò)統(tǒng)計(jì)程序的運(yùn)行情況,可以較快地發(fā)現(xiàn),從而減少這個(gè)依賴(lài)項(xiàng)變化帶來(lái)的破壞。
其他的經(jīng)驗(yàn)還包括:
? ? a.對(duì)于數(shù)據(jù)處理程序應(yīng)該有至少兩種運(yùn)行模式:
? ? ? ? 1.定時(shí)運(yùn)行的正常模式
? ? ? ? 2.補(bǔ)充數(shù)據(jù)時(shí)的批處理模式,最好允許在命令中輸入?yún)?shù),對(duì)于調(diào)試會(huì)比較方便
? ? ? ??3.測(cè)試接口和驗(yàn)證特定數(shù)據(jù)的測(cè)試模式,可選
? ? b.過(guò)早的優(yōu)化是魔鬼。先弄清楚需求,搞清楚數(shù)據(jù)量、接口吞吐量等功能非功能性需求之后,再去考慮性能等問(wèn)題,過(guò)早的優(yōu)化只會(huì)讓自己陷入泥潭
? ??c.對(duì)程序的關(guān)鍵/重要依賴(lài)項(xiàng)和指標(biāo)進(jìn)行監(jiān)控,出現(xiàn)問(wèn)題里及早修復(fù)
以上就是這段時(shí)間主要碰到的問(wèn)題和解決方式
轉(zhuǎn)載于:https://www.cnblogs.com/showstone/p/4433340.html
總結(jié)
以上是生活随笔為你收集整理的数据处理程序的一点经验的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: {面试题49} 把字符串转换成整数
- 下一篇: TCP的ACK确认系列 — 快速确认