喬新亮CTO之路-專業(yè)8:監(jiān)控設(shè)計(jì)

備注說(shuō)明:相關(guān)總結(jié)屬于個(gè)人學(xué)習(xí)筆記,請(qǐng)勿商用,感興趣的可在極客時(shí)間訂閱該《喬新亮的CTO成長(zhǎng)復(fù)盤》專欄學(xué)習(xí),謝謝~

要想深刻理解監(jiān)控的概念,我們首先要學(xué)會(huì)問(wèn)自己:為什么要做監(jiān)控系統(tǒng)?這就像許多工作方法論里強(qiáng)調(diào)的一樣,做事先問(wèn)目的 —— “start with why”。
監(jiān)控的目標(biāo)是及時(shí)發(fā)現(xiàn)系統(tǒng)的問(wèn)題,并盡可能快地做出相應(yīng)的動(dòng)作,讓系統(tǒng)一直處于健康的狀態(tài)。
監(jiān)控,可以拆分為“監(jiān)”和“控”分別理解,也就是“監(jiān)視”和“控制”

例子
服務(wù)器的 CPU 負(fù)載突然飆升
“最近線上有什么版本變動(dòng)嗎?都回退了嗎?”
研發(fā)同學(xué):只會(huì)退了指定版本沒(méi)有 會(huì)退到上一個(gè)版本。
真的都回退了嗎?
同學(xué)一拍腦門,猶豫地說(shuō)道:“我在數(shù)據(jù)庫(kù)里加了條索引,不過(guò)這肯定不會(huì)導(dǎo)致負(fù)載異?!?br> 刪除索引后一切正常了。。

IT 團(tuán)隊(duì)的系統(tǒng)監(jiān)控體系,到底出了什么問(wèn)題?
生產(chǎn)環(huán)境應(yīng)急恢復(fù)的最大挑戰(zhàn)在于根因分析,即找到問(wèn)題的根本原因,這往往是耗時(shí)最久的工作。

常規(guī)的操作

  1. 發(fā)現(xiàn)問(wèn)題后,立即聯(lián)系各相關(guān)系統(tǒng)負(fù)責(zé)人,以便共同排查問(wèn)題;
  2. 要求大家在一分鐘之內(nèi)回復(fù):自己治下的系統(tǒng)或服務(wù)是否健康(這里要將“健康”的定義想清楚,如,響應(yīng)時(shí)間是否增加超過(guò) 30% 等);
  3. 進(jìn)行根因分析,確認(rèn)導(dǎo)致問(wèn)題的系統(tǒng)、服務(wù);(人員規(guī)模也會(huì)越來(lái)越大,花費(fèi)的時(shí)間就會(huì)脫離控制。)
  4. 完成系統(tǒng)恢復(fù)工作。

針對(duì):根因分析
首先,我們要確認(rèn)異常是外因?qū)е?,還是內(nèi)因?qū)е隆?br> 比如,服務(wù)響應(yīng)慢,既可能是因?yàn)橥獠空{(diào)用量變大,也可能是因?yàn)閮?nèi)部進(jìn)程繁忙,導(dǎo)致 I/O 、內(nèi)存、網(wǎng)絡(luò)資源發(fā)生爭(zhēng)搶。這步判斷相對(duì)來(lái)說(shuō)比較耗時(shí)間,只有當(dāng)調(diào)查足夠充分時(shí),結(jié)果才可能浮出水面;
無(wú)論是內(nèi)因還是外因,都要“順藤摸瓜”,繼續(xù)進(jìn)行排查,最后進(jìn)行恢復(fù)。

有效的方法:

流控和版本回退,簡(jiǎn)單、粗暴、實(shí)用。
流控,就是做好程序的并發(fā)流量控制;
版本回退,就是在生產(chǎn)環(huán)境的發(fā)布出現(xiàn)問(wèn)題時(shí),及時(shí)回退到上一個(gè)版本。

生產(chǎn)環(huán)境出現(xiàn)問(wèn)題,原因:變化。
“變化”大三類:

  • 外部用戶請(qǐng)求量增大;
  • 產(chǎn)品發(fā)布,一般包括代碼發(fā)布、配置發(fā)布、SQL 腳本發(fā)布等;
  • 依賴資源變化,一般是計(jì)算、存儲(chǔ)、網(wǎng)絡(luò)基礎(chǔ)設(shè)施情況變差,比如磁盤存在壞道等。

優(yōu)化過(guò)的操作

  • 發(fā)現(xiàn)問(wèn)題后,立即聯(lián)系各相關(guān)系統(tǒng)負(fù)責(zé)人,以便共同排查問(wèn)題;
  • 要求大家在一分鐘之內(nèi)回復(fù):自己治下的系統(tǒng)或服務(wù)是否健康(這里要將“健康”的定義想清楚,如,響應(yīng)時(shí)間是否增加超過(guò) 30% 等)
  • 此處組織兩批研發(fā)力量,并行工作。第一批解決專業(yè)問(wèn)題,繼續(xù)跟進(jìn)問(wèn)題的定位和調(diào)試
  • 第二批負(fù)責(zé)消滅變化,對(duì)有變化的模塊進(jìn)行回退,對(duì)于外部請(qǐng)求數(shù)量升高的模塊啟動(dòng)流控; 恢復(fù)系統(tǒng)

核心
對(duì)于任何組件,都有以下兩種手段同時(shí)存在: 流控手段; 發(fā)布回退手段。

認(rèn)知轉(zhuǎn)變
在生產(chǎn)環(huán)境,研發(fā)人員應(yīng)該尋找并消滅“變化”。從尋找 bug 到尋找變化。

剛才例子復(fù)盤

  • 錯(cuò)誤一:負(fù)責(zé)發(fā)布的同學(xué),沒(méi)有按規(guī)定回退至穩(wěn)定版本,而是詢問(wèn)開(kāi)發(fā)同學(xué)的意見(jiàn),并以其意見(jiàn)為準(zhǔn);
  • 錯(cuò)誤二:相關(guān)負(fù)責(zé)人,因?yàn)榧僭O(shè)“一條索引不會(huì)導(dǎo)致故障”而知情不報(bào),導(dǎo)致系統(tǒng)無(wú)法完全回退;
  • 錯(cuò)誤三:十幾名團(tuán)隊(duì)成員沒(méi)有將精力聚焦在線上業(yè)務(wù)恢復(fù)方面,而是試圖在生產(chǎn)環(huán)境查找 bug。
    程序員總覺(jué)得找到問(wèn)題才是高手,回退解決不了問(wèn)題。

記住:
要改變自己潛意識(shí)找bug的第一想法,我們的目標(biāo)是:即使找不到 bug,依然可以做好故障恢復(fù)。
生產(chǎn)環(huán)境永遠(yuǎn)不允許調(diào)試問(wèn)題,出現(xiàn)問(wèn)題立刻回退,查問(wèn)題要去測(cè)試環(huán)境。

對(duì)于復(fù)雜系統(tǒng)不好回滾,可以參考亞馬遜:大版本立項(xiàng),小版本上線 —— 梳理好各模塊的依賴關(guān)系,將各個(gè)系統(tǒng)、各個(gè)服務(wù)獨(dú)立發(fā)布。當(dāng)然,這也需要依賴服務(wù)版本化和 CI 能力的支持。

總結(jié)

要做到監(jiān)視一切,分析一切,控制一切,
“眼”能看見(jiàn)所有,“腦”能洞察一切,“手”能一手遮天,
一切業(yè)務(wù)數(shù)字化,一切數(shù)據(jù)可視化,一切控制可觸發(fā)

監(jiān)控的目的是讓系統(tǒng)一直處于健康狀態(tài),具體手段則可分為“監(jiān)視”和“控制”兩種;要做好控制,一個(gè)重要的方法是做好流控和版本回退。因?yàn)樵诖蟛糠智闆r下,消除變化就等于消除異常。

不單是技術(shù)、業(yè)務(wù)系統(tǒng)需要做好監(jiān)控,研發(fā)管理、團(tuán)隊(duì)管理都要做好監(jiān)控。
關(guān)于研發(fā)管理,我們?cè)凇案呖捎迷O(shè)計(jì)”部分曾提到:風(fēng)險(xiǎn)是經(jīng)由開(kāi)發(fā)環(huán)境、SIT 環(huán)境、壓測(cè)環(huán)境、PRE 環(huán)境,進(jìn)入生產(chǎn)環(huán)境的。所以我們要做的是嚴(yán)格檢查各個(gè)環(huán)境下的異常。
所謂研發(fā)管理規(guī)范,應(yīng)該為代碼版本進(jìn)入下一個(gè)環(huán)境設(shè)置準(zhǔn)入標(biāo)準(zhǔn)。對(duì)于任何異常,都有負(fù)責(zé)人進(jìn)行修正。
對(duì)于團(tuán)隊(duì)管理,我們常常說(shuō),組織是結(jié)果導(dǎo)向的,但管理工作是過(guò)程導(dǎo)向的。關(guān)注過(guò)程自然就會(huì)得到好的結(jié)果,只盯著結(jié)果往往什么也得不到。
對(duì)于一個(gè)項(xiàng)目、一個(gè)產(chǎn)品,乃至于團(tuán)隊(duì)的健康度,管理者有沒(méi)有在關(guān)鍵節(jié)點(diǎn)設(shè)置監(jiān)控?

?著作權(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)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

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