開篇
先來講一個(gè)故事,最近在改造項(xiàng)目中日志處理服務(wù),使用了公司內(nèi)部公共的一些組件與服務(wù)。好不容易改造完成了,前幾天開始灰度上線,上線觀察了一天,從監(jiān)控平臺(tái)上可以看到,每次流量高峰期(一般早中晚各一次)就會(huì)出現(xiàn)大量的thrift反序列化失敗的問題。出現(xiàn)問題怎么辦呢?解決唄,就這樣,故事開始了...
數(shù)據(jù)流圖
先來介紹整個(gè)服務(wù)的數(shù)據(jù)流示意圖,如下:
- 每臺(tái)服務(wù)器都會(huì)部署一個(gè)scribe-agent,用于將本機(jī)產(chǎn)生的日志發(fā)送到遠(yuǎn)端的scribe-server;
- scribe-server將收集的日志分別打印到HDFS和kafka。
然后我這邊有一個(gè)服務(wù)去消費(fèi)kafka的數(shù)據(jù),做一些數(shù)據(jù)分析。
發(fā)現(xiàn)問題
服務(wù)跑了一天多,我從公司內(nèi)部的監(jiān)控平臺(tái)上發(fā)現(xiàn),我的服務(wù)(消費(fèi)kafka的服務(wù))在每一個(gè)日志高峰期都會(huì)出現(xiàn)大量的thrift結(jié)構(gòu)反序列化失敗的異常。
解決問題
發(fā)現(xiàn)問題之后我有幾個(gè)可以懷疑的地方:
- 打印日志的服務(wù)和消費(fèi)日志的服務(wù)使用的thrift版本不一致,導(dǎo)致序列化失?。ㄎ业膯栴});
- 日志序列化或者反序列化的時(shí)候有多線程安全問題,導(dǎo)致數(shù)據(jù)被打亂(我的問題);
- 由于消費(fèi)kafka過程中使用了disruptor框架做異步處理,懷疑disruptor有bug;
- 日志在傳輸過程中被篡改(不是我的問題);
其中第三點(diǎn)可以細(xì)分為以下幾個(gè)可能:
- scribe-agent寫日志到scribe-server有bug(scribe-agent是其他team同事負(fù)責(zé)的)
- scribe-server將日志寫到kafka有bug(其他team同事負(fù)責(zé)的)
一般來說,排查問題都應(yīng)該從自身問題找起,所以首先來證明自己的清白:
- 通過MD5檢查寫日志的服務(wù)和分析日志的服務(wù)使用的thrift是同一個(gè)版本;
- google了一下,我使用的序列化和反序列化應(yīng)該沒問題,并且我們主業(yè)務(wù)也是使用相同的方法;
- 將disruptor的ringBuffer大小設(shè)置為0,變異步成同步;
做了上述修改與實(shí)驗(yàn)之后,還是沒有解決問題,所以可以斷定問題出在第四步:日志在傳輸過程中被篡改。
于是發(fā)郵件咨詢相關(guān)的同事,得到的回答都是沒有問題的,很多業(yè)務(wù)都使用我們的服務(wù),從來沒出現(xiàn)過問題,你再找找原因吧。,沒辦法啊,氣場(chǎng)不夠,只能說聲謝謝,然后繼續(xù)自己摸索。
三天時(shí)間過去了,還是沒能找到自己的原因,我真是快要奔潰了,于是在leader的陪同下親自去找之前郵件溝通過的同事,大概聊了20分鐘,最后對(duì)方突然說:流量高峰期的時(shí)候,我們會(huì)將日志寫到本地文件,隨后再次讀取的時(shí)候可能真的會(huì)有問題,巴拉巴拉一堆,說我們看看吧,一會(huì)兒給你們回郵件。
回來等了幾分鐘,收到郵件了:這個(gè)確實(shí)是我們的一個(gè)bug,你們流量太大了,之前都沒有遇到過,我們會(huì)盡快修復(fù),到時(shí)候通知你們。
總結(jié)
- 程序員天生自信,當(dāng)受到質(zhì)疑時(shí),第一反應(yīng)就是:"我的程序肯定沒問題";
- 程序員最最重要的兩個(gè)東西:技術(shù),名氣,如果沒有技術(shù)和名氣,別人根本不把你當(dāng)回事,遇到問題時(shí)都會(huì)認(rèn)為是你自己的問題,所以,努力提升自己技術(shù)和影響力吧!
聲明
本文首發(fā)于個(gè)人技術(shù)博客,轉(zhuǎn)載請(qǐng)注明出處,本文鏈接:http://qifuguang.me/2015/11/13/%E7%A8%8B%E5%BA%8F%E5%91%98%E6%9C%80%E9%87%8D%E8%A6%81%E7%9A%84%E4%B8%A4%E4%B8%AA%E4%B8%9C%E8%A5%BF/
如果你喜歡我的文章,請(qǐng)關(guān)注我的微信訂閱號(hào):“機(jī)智的程序猿”,更多精彩,盡在其中: