程序員最重要的兩個(gè)東西

開篇

先來講一個(gè)故事,最近在改造項(xiàng)目中日志處理服務(wù),使用了公司內(nèi)部公共的一些組件與服務(wù)。好不容易改造完成了,前幾天開始灰度上線,上線觀察了一天,從監(jiān)控平臺(tái)上可以看到,每次流量高峰期(一般早中晚各一次)就會(huì)出現(xiàn)大量的thrift反序列化失敗的問題。出現(xiàn)問題怎么辦呢?解決唄,就這樣,故事開始了...

數(shù)據(jù)流圖

先來介紹整個(gè)服務(wù)的數(shù)據(jù)流示意圖,如下:


  1. 每臺(tái)服務(wù)器都會(huì)部署一個(gè)scribe-agent,用于將本機(jī)產(chǎn)生的日志發(fā)送到遠(yuǎn)端的scribe-server;
  2. 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è)可以懷疑的地方:

  1. 打印日志的服務(wù)和消費(fèi)日志的服務(wù)使用的thrift版本不一致,導(dǎo)致序列化失?。ㄎ业膯栴});
  2. 日志序列化或者反序列化的時(shí)候有多線程安全問題,導(dǎo)致數(shù)據(jù)被打亂(我的問題);
  3. 由于消費(fèi)kafka過程中使用了disruptor框架做異步處理,懷疑disruptor有bug;
  4. 日志在傳輸過程中被篡改(不是我的問題);

其中第三點(diǎn)可以細(xì)分為以下幾個(gè)可能:

  1. scribe-agent寫日志到scribe-server有bug(scribe-agent是其他team同事負(fù)責(zé)的)
  2. scribe-server將日志寫到kafka有bug(其他team同事負(fù)責(zé)的)

一般來說,排查問題都應(yīng)該從自身問題找起,所以首先來證明自己的清白:

  1. 通過MD5檢查寫日志的服務(wù)和分析日志的服務(wù)使用的thrift是同一個(gè)版本;
  2. google了一下,我使用的序列化和反序列化應(yīng)該沒問題,并且我們主業(yè)務(wù)也是使用相同的方法;
  3. 將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é)

  1. 程序員天生自信,當(dāng)受到質(zhì)疑時(shí),第一反應(yīng)就是:"我的程序肯定沒問題";
  2. 程序員最最重要的兩個(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ī)智的程序猿”,更多精彩,盡在其中:

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容