這樣用技術,程式猿更幸福

四猿外發表於2020-06-19

作為久經職場而又富有責任心的猿外,每天上班的第一件事,便是連上生產伺服器,top free ps 一頓命令熱身猛如虎,然後彙總出業務服務的狀態、系統指標等,看到一切正常,心裡才算踏實。

不知道有多少盡職盡責的朋友們,每天都重複的做著如此機械而又簡單的事情。說句實話,其實和機械狗沒啥區別。本著做事認真、追求極致的態度,那我們為什麼不能打造一款這樣的機械狗呢?

關注過猿外的朋友們都應該知道,在之前的文章中,猿外曾經提到過,守護服務的監控應用——看門狗。不錯,要打造的機械狗,就是看門狗。

接下來就給大家簡單聊一聊,看門狗的背景來源以及實現思路,希望能給正在尋找守護服務監控解決方案的朋友們,一點實現思路。下面的內容十分燒腦,請大家坐穩扶好。

1. 什麼是看門狗?

在由微控制器構成的微型計算機系統中,由於微控制器的工作,常常會受到來自外界電磁場的干擾,造成程式的跑飛,而陷入死迴圈,程式的正常執行被打斷,由微控制器控制的系統無法繼續工作,會造成整個系統的陷入停滯狀態,發生不可預料的後果,所以出於對微控制器執行狀態進行實時監測的考慮,便產生了一種專門用於監測微控制器程式執行狀態的晶片,稱“看門狗”——摘自“百度百科”。

相信有不少朋友,看到上面一段非人話的描述,就想直接刪了此篇熊文,溜之大吉。大家,心莫慌,猿外再舉個貼近生活的栗子解釋一下。

猿外家養了一條 dog ,經常陪孩子玩,孩子時不時的撒一把狗糧給 dog;
如果孩子睡著,長時間未撒狗糧,dog 就主動把孩子叫醒;
繼續讓孩子撒狗糧,然後 dog 吃到孩子撒的狗糧,就高興的狂吠;
如果 dog 跑走了,孩子也不撒狗糧了,孩子也就可以睡覺了。

剝開栗子,內行看門道,外行看熱鬧,把上面內容翻譯一遍:

原話:猿外家養了一條 dog,經常陪孩子玩,孩子時不時的撒一把狗糧給 dog;
翻譯:存在兩個程式:子程式(應用服務)、父程式(守護程式),子程式和父程式兩個程式間一直保持心跳通訊;

原話:如果孩子睡著,長時間未撒狗糧, dog 就主動把孩子叫醒;
翻譯:子程式與父程式心跳通訊中斷,父程式則負責啟動子程式,完成子程式的服務守護;

原話:繼續讓孩子撒狗糧,然後 dog 吃到孩子撒的狗糧,就高興的狂吠;
翻譯:子程式與父程式實時通訊,父程式實時監控子程式的狀態,並實時進行報警通知;

原話:如果 dog 跑走了,孩子也不撒狗糧了,孩子也就可以睡覺了。
翻譯:父程式down了,子程式與父程式的通訊也就無法保持了,子程式也一併退出。

不知道朋友們通過上面的栗子剖析,對看門狗瞭解了多少呢?為了更清晰的給你們說清楚,猿外再給大家上個一目瞭然的圖吧。

如上圖所示,猿外主要把看門狗定位為:集服務守護、指標採集、日誌歸集、自動化報警於一體的監控系統。說白了,有了看門狗,媽媽再也不用擔心我的應用服務出問題了。

洋洋灑灑鋪墊這麼多,那到底該如何實現呢?

2. 如何實現?

猿外先給大家畫個腦圖,主要分五步走,希望朋友們跟著猿外的腳步,莫掉隊。

相信絕大部分朋友通過猿外的腦圖,已經對看門狗應用瞭解個八九不離十。猿外再稍微闡述一下:

實現方式:看門狗應用在實現過程中也走了一些彎路。剛開始技術選型的時候,考慮到看門狗應該對應用零侵入、低耦合,於是採用javaagent植入方式進行實現,但是萬萬沒想到的是開發、除錯過程比較麻煩,一遇到問題,小夥伴就排查半天,在第一版上線後,猿外迅速帶領小夥伴,採用外掛化方式進行第二版迭代。

服務守護:採用 J2SE 1.5 java.lang 包中新新增的 ProcessBuilder 類來完成子程式的啟動、停止、重啟(完成子服務的守護功能)。

指標採集:通過 JMX 方式連線子服務,獲取子服務的記憶體佔用、CPU 使用、執行緒數等指標。

日誌歸集:主要站在 flume 的肩膀上,整合到專案中並進行二次開發,儲存採用 elasticsearch。

報警通知:主要提供郵箱通知、QQ 通知、微信實時通知。

其中每個實現細節猿外就不再進行深入展開了,感興趣的朋友歡迎關注微信公眾號四猿外(si-yuanwai),後臺留言進行交流。

羅裡吧嗦,寫了這麼多。羅馬並非一日建成的,實現途中踩過的坑、吃過的苦頭,剎那間全部湧上心頭。不過看門狗應用,已經在生產上推廣使用,自上線以來還廣受好評,猿外現在每天來的第一件事,由原來的系統巡檢變成了衝咖啡,幸福指數陡然上升。

最後,猿外想說的是:簡單的事重複做,你就是專家;重複的事用心做,你就是贏家。沒錯,這話說的沒毛病,不過成為專家之餘,大家不妨稍做創新,看看有沒有可以用的技術輪子,說不定會改變機械的工作方式,提升工作效率,提高幸福指數呢。


歡迎大家關注我的公眾號:四猿外。
我準備了一些純手打的高質量PDF,有好友贊助的也有我自己的,大家可以免費領取:
深入淺出Java多執行緒、HTTP超全彙總、Java基礎核心總結、程式設計師必知的硬核知識大全、簡歷面試談薪的超全乾貨。
別看數量不多,但篇篇都是乾貨,看完的都說很肝。

領取方式:掃碼關注後,在公眾號後臺回覆:666

相關文章