啊!你的服务又挂了?
譯者前言
Troubleshooting 即故障排查檢修,這絕對不是一項簡單的任務(wù),不同技術(shù)體系之間天差地別,這個問題可有統(tǒng)一答案?因為具體的技術(shù)終將過時,所以本文不談任何具體的技術(shù)細(xì)節(jié),而是針對 troubleshooting 提出十條方法論。
本文原作者:Steve Mushero
原文鏈接:?https://medium.com/faun/shit-breaks-dao-of-troubleshooting-6cc1b3869ce0
1. 故障無法避免
啊,你的服務(wù)又掛了,很不幸。
更不幸的是,因為負(fù)載高、業(yè)務(wù)復(fù)雜,它掛掉是常事。
它以一種不能被 “自動擴容”、“加容器”、“重啟” 等手段輕易 “解決” 的方式掛掉,花里胡哨的調(diào)度系統(tǒng)此時也起不到作用。當(dāng)然我不是說這些方法沒用,畢竟它們各有各的場景。
有時候,你面對一個故障,5 分鐘就能定位原因,但作為 “老兵” 的你一定懂得這背后需要多少經(jīng)驗積累和努力,常言道 “功夫都在戲外”。 如果你恰好用了微服務(wù)(micro-service)、無服務(wù)器(server-less)、無限可分割(infinitely-divisible)、無處不在的松散連接組件(loosely-connected pieces and parts)之類的新玩意,修復(fù)起來就更難了。
何解?具體技術(shù)早晚會過時,而方法論則具備長久生命力。唯有 “道”(指方法論)才是應(yīng)對復(fù)雜系統(tǒng)的指路明燈。
2. 對一切建模
要能說出每個部件在模型中的位置,它們?nèi)绾谓换ァ⑷绾闻渲谩l件允許的話,連它的行為也要弄清楚。
拿到并看懂邏輯架構(gòu)圖,有必要的話,物理架構(gòu)圖、網(wǎng)絡(luò)架構(gòu)圖也一樣。搞清楚不同尺度上的分層、分組。
3. 可知則盡知
盡你所能,弄清楚所有的配置和狀態(tài)。
這確實很難,看懂倉庫里的代碼、配置文件、.env、基礎(chǔ)結(jié)構(gòu)即代碼(infrastructure-as-code systems)只是毛毛雨,更不要說運行時動態(tài)的部分。但不管你喜不喜歡,真正運行著的系統(tǒng)就是一切真相的源頭。
4. 誰動了環(huán)境?
最近有什么被動過?由誰?何時?操作對象是什么?效果是什么?誰登過服務(wù)器?誰 push 過代碼?改了什么配置?諸如此類。
然后,哪些行為發(fā)生了變化。例如誰的延遲發(fā)生了變化,相關(guān)部分的動力學(xué)[1]變化,錯誤率是否有變化,哪些資源負(fù)載或可用性發(fā)生了變化?哪些變化重要呢?
5. 請專家
直接或間接地應(yīng)用知識和經(jīng)驗,了解事物之間的關(guān)系、依賴,尤其是動力學(xué)及與之關(guān)聯(lián)的失效模式[2]。動用一切資源去找最懂行的人,問朋友同事、在論壇社區(qū)發(fā)帖、在社交網(wǎng)絡(luò)提問、在 IRC 或郵件列表提問……如果專家是“鬼魂”,那就“作法招魂”[3]。到現(xiàn)場指導(dǎo)是最好的、實在不行就遠(yuǎn)程。條件允許的話,使用可用的專家系統(tǒng)或規(guī)則引擎,這些都是被編碼過的專業(yè)知識。
6. 提問要清晰準(zhǔn)確
提問前請務(wù)必再三觀察和思考,雖然提供給專家的信息永遠(yuǎn)是片面的,但錯誤的提問神仙難救,而某些低風(fēng)險的、清晰而準(zhǔn)確的提問,則連人腦都不需要,可以直接被規(guī)則引擎快速地自動解答,這就是提問質(zhì)量的差距。
7. 局部小規(guī)模實驗
可對系統(tǒng)做微小的改動或調(diào)整,觀察其影響。
這招非常好用,尤其是使用排除法時、探究組件之間的關(guān)系、驗證某些東西不生效的猜想時。
8. 提前做排除
別浪費時間在明顯錯誤的方向上,它會吞噬掉大量的時間和精力,注意力被轉(zhuǎn)移,資源被浪費,不要等到最后才懊悔沒早點排除錯誤選項。問題 “是” 什么固然重要,但永遠(yuǎn)別忽視問題 “不是” 什么,要持續(xù)不斷地根據(jù)邏輯和經(jīng)驗做排除。
9. 小心求證
排查到最后可能以自相矛盾的結(jié)論收尾,某些部分似是而非,最終問題無解。用馬克 · 吐溫的話說:“麻煩的不是未知,而是你深信不疑,卻發(fā)現(xiàn)事實并非如此”。
所以在排查過程中要樂于不斷挑戰(zhàn)和測試自己的基本假設(shè)、基本事實與真相,因為似是而非的部分往往埋藏在其中。
10. 尋求慰藉
排查問題是困難的,時間和工具永遠(yuǎn)都不夠,并且總是伴隨著巨大壓力。時常停下來,重新思考和審視已知的一切,觀察它們?nèi)绾芜B接與相互影響,真相經(jīng)常以這樣匪夷所思的方式被發(fā)現(xiàn)……
故障無法避免,遵循以上十條真理,答案終將到來。
注解:
[1] Dynamics 即動力學(xué),這里理解為需要分辨指標(biāo)中誰是因,誰是果,以及影響程度。對指標(biāo)的解讀是關(guān)鍵。
[2] Failure Modes 即失效模式,詳見百科
https://en.wikipedia.org/wiki/Failure_mode_and_effects_analysis。這里強調(diào)的是有效利用前人的經(jīng)驗。
[3] 原文是 Ouija 即通靈板,流行在歐美的一種占卜方式類似筆仙,這里的意思是從一切來源尋求專業(yè)知識,有必要的話連鬼魂都要問。
總結(jié)
以上是生活随笔為你收集整理的啊!你的服务又挂了?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 恭喜!神策数据荣获“2020 InfoQ
- 下一篇: 郑州银行评选神策数据为“最佳年度合作伙伴