SRE有效問(wèn)題解決(12章)

什么是專家?專家不是說(shuō)只知道系統(tǒng)如何工作的,而是通過(guò)調(diào)查系統(tǒng)為什么不工作,積累經(jīng)驗(yàn)成長(zhǎng)成專家的?!狟rian Redman

事情正常運(yùn)作是事情出錯(cuò)的一個(gè)特例?!狫ohn Allspaw

我們認(rèn)為問(wèn)題解決是可以學(xué)習(xí)和可以指導(dǎo)的。問(wèn)題解決依靠?jī)牲c(diǎn)∶問(wèn)題解決的邏輯和系統(tǒng)知識(shí)。

理論:

在理想模型中(如下圖所示),我們通過(guò)問(wèn)題報(bào)告來(lái)了解系統(tǒng)出了什么問(wèn)題。然后我們?nèi)タ聪到y(tǒng)現(xiàn)象和日志來(lái)了解目前系統(tǒng)的狀態(tài)。這信息和我們知道的系統(tǒng)設(shè)計(jì),工作原理,失效模型結(jié)合起來(lái),使我們定位出一些可能導(dǎo)致系統(tǒng)失效的原因。

問(wèn)題解決過(guò)程

通常有兩個(gè)方法來(lái)驗(yàn)證我們的假設(shè)。我們可以對(duì)比系統(tǒng)的狀態(tài)和我們的理論來(lái)找到確認(rèn)或不確認(rèn)的證據(jù)?;蛘?,在某些情況下,我們可以在受控的條件下去改變系統(tǒng),觀察結(jié)果。選用其中一個(gè)方法,重復(fù)測(cè)試直至找到根因,然后再采取正確的措施來(lái)規(guī)避問(wèn)題再現(xiàn),同時(shí)寫(xiě)個(gè)事后報(bào)告。當(dāng)然,解決可能的問(wèn)題不一定非要等找到根因之后再處理。

常見(jiàn)陷阱:

1.查看不相關(guān)的問(wèn)題或?qū)ο到y(tǒng)矩陣的錯(cuò)誤理解。

2.為了安全和有效的驗(yàn)證假設(shè),錯(cuò)誤理解如何改變系統(tǒng)參數(shù)、環(huán)境。

3.有關(guān)錯(cuò)誤想到的是不大真實(shí)的理論,或關(guān)注于過(guò)去問(wèn)題的原因上,認(rèn)為既然它發(fā)生過(guò),它肯定會(huì)再次發(fā)生。

4.找到假的相關(guān)性,這些相關(guān)性實(shí)際是起因的巧合或相關(guān)內(nèi)容。

不要想復(fù)雜了,考慮事情更有可能發(fā)生的情形。醫(yī)生常常被教導(dǎo):當(dāng)你聽(tīng)到蹄聲,想想有可能不是斑馬。

我們知道什么,不知道什么,應(yīng)該知道什么的方法論。

實(shí)踐:

事實(shí)上,問(wèn)題解決永遠(yuǎn)不會(huì)和我們理想模型一樣簡(jiǎn)明。我們可以采取一些步驟使得我們的過(guò)程更加簡(jiǎn)潔和高效。

一、問(wèn)題報(bào)告

所有的問(wèn)題都源自于問(wèn)題報(bào)告,有效的報(bào)告應(yīng)該包括期望的動(dòng)作,實(shí)際的動(dòng)作,最好包括這個(gè)實(shí)際的動(dòng)作是如何產(chǎn)生的。理想的情況下,這些報(bào)告應(yīng)該有一個(gè)固定的格式和方便查詢到的存儲(chǔ)的地方。我們的團(tuán)隊(duì)經(jīng)常用定制化的格式和小的web應(yīng)用來(lái)查詢相關(guān)的問(wèn)題信息。這也為故障自查和自愈系統(tǒng)提供了工具。

在谷歌針對(duì)每一個(gè)問(wèn)題開(kāi)一個(gè)bug是很常見(jiàn)的做法。我們的隊(duì)伍不鼓勵(lì)報(bào)告直接發(fā)給某個(gè)人,理由如下:這個(gè)做法導(dǎo)致了多加一個(gè)將報(bào)告轉(zhuǎn)化為bug的過(guò)程,產(chǎn)出的低質(zhì)量報(bào)告對(duì)團(tuán)隊(duì)其他成因不可見(jiàn)。發(fā)給團(tuán)隊(duì)的話可將問(wèn)題解決的壓力集中到多人的身上。

二、問(wèn)題分類(lèi)

當(dāng)你收到一個(gè)問(wèn)題報(bào)告,下一步是明確將怎么做。比如根據(jù)事情的嚴(yán)重性來(lái)確定處理優(yōu)先級(jí)。你的第一直覺(jué)不應(yīng)該是找到根因,而是盡快恢復(fù)系統(tǒng)。就像飛行員一樣,問(wèn)題查找是第二要素,第一是確保乘客安全著陸。

三、問(wèn)題檢查

我們應(yīng)該要做到知道系統(tǒng)中的任何一個(gè)部件是做什么的,這樣才能明白它是否正常工作。

理想情況下,監(jiān)控系統(tǒng)會(huì)為你的系統(tǒng)記錄矩陣,可以通過(guò)矩陣來(lái)定位問(wèn)題。圖表-時(shí)間和操作-時(shí)間是個(gè)有效理解系統(tǒng)行為的方法。

日志記錄也是一個(gè)很有價(jià)值的工具。系統(tǒng)狀態(tài)的日志記錄會(huì)告訴你系統(tǒng)某個(gè)時(shí)間點(diǎn)在干什么?你需要分析一個(gè)或幾個(gè)系統(tǒng)的日志。可以通過(guò)使用Dapper工具來(lái)跟蹤需求是個(gè)理解一個(gè)分布式系統(tǒng)如何工作的方法。

展示目前狀態(tài)是第三個(gè)工具。Google的服務(wù)器通過(guò)終點(diǎn)來(lái)展示系統(tǒng)是否正常。這些終點(diǎn)可以讓你不需要架構(gòu)圖就可以了解任何系統(tǒng)和其它系統(tǒng)的交互情況,也可以展示錯(cuò)誤率和延遲的直方圖。

最后,你需要指導(dǎo)一個(gè)客戶來(lái)做實(shí)驗(yàn),來(lái)發(fā)現(xiàn)這些需求返回的是什么狀態(tài)。

第四、問(wèn)題診斷

全面理解系統(tǒng)設(shè)計(jì)有助于提出系統(tǒng)可能出現(xiàn)問(wèn)題的假設(shè),一些遺傳的實(shí)踐也可以在沒(méi)有主要知識(shí)的情況下幫助問(wèn)題診斷。

1. 簡(jiǎn)化和減少

理想情況下,系統(tǒng)會(huì)有明確定義的界面以及輸入輸出的轉(zhuǎn)化過(guò)程。然后可以通過(guò)部件間的聯(lián)系(如數(shù)據(jù)流)來(lái)確定給定的部件是否正常。通過(guò)給定的測(cè)試數(shù)據(jù)輸入,來(lái)檢查輸出結(jié)果。有一個(gè)固定的可再生的測(cè)試案例可以使debug更快一些,這些測(cè)試案例也可以在有攻擊性的或風(fēng)險(xiǎn)高的技術(shù)要求的非生產(chǎn)環(huán)境使用。

劃分和解決問(wèn)題是非常有用的問(wèn)題解決方案思路。和數(shù)據(jù)流的處理方式類(lèi)似,也是看系統(tǒng)端到端是否出現(xiàn)問(wèn)題。在一個(gè)非常大的系統(tǒng)中,線性處理問(wèn)題可能會(huì)比較慢,所以將系統(tǒng)劃分成兩部分進(jìn)行診斷很有必要。找到哪部分出了問(wèn)題之后,再通過(guò)二分法進(jìn)行處理直到找出錯(cuò)誤的部件。

2. 多問(wèn)"what" "where""why"

一個(gè)故障的系統(tǒng)通常仍然會(huì)嘗試做一些事情,一些你不想讓它做的事情。找到它在做什么,然后問(wèn)為什么它這樣做?它的輸入和輸出是什么?有助于你了解為什會(huì)出現(xiàn)問(wèn)題。

3. 最終觸發(fā)的條件

系統(tǒng)是有規(guī)則的,最近系統(tǒng)的變更最有可能導(dǎo)致問(wèn)題出現(xiàn)。

4. 特殊的診斷

在很多領(lǐng)域,之前介紹的工具對(duì)問(wèn)題診斷是非常有幫助的。Google SRE花很多時(shí)間在工具建設(shè)上。很多工具僅對(duì)給定的系統(tǒng)有幫助。確保找到服務(wù)和團(tuán)隊(duì)之間的公用之處,避免重復(fù)浪費(fèi)時(shí)間和精力。

第五、測(cè)試和對(duì)癥下藥

一旦你找到了可能問(wèn)題原因的清單,就可以開(kāi)始去查找問(wèn)題的根因了。在設(shè)計(jì)測(cè)試方案時(shí),要考慮如下幾點(diǎn):

1. 理想的測(cè)試有多個(gè)選擇項(xiàng),這樣可以管理一組假設(shè),但實(shí)際上這個(gè)很難達(dá)到。

2. 先考慮顯而易見(jiàn)的問(wèn)題。比如先減少需要來(lái)測(cè)試,考慮測(cè)試帶來(lái)的風(fēng)險(xiǎn),在處理網(wǎng)絡(luò)連接性問(wèn)題前找兩臺(tái)機(jī)器測(cè)試下。

3. 測(cè)試可能導(dǎo)致誤解性的結(jié)果。

4.考慮測(cè)試本身帶來(lái)的影響,如CPU,性能問(wèn)題等。

5. 測(cè)試結(jié)果是建議性的,而非直接結(jié)果。

要清晰記錄你的思路,以便于測(cè)試你的想法是否正確。

第六、問(wèn)題解決

你已經(jīng)將多個(gè)可能的問(wèn)題原因減少到一個(gè)了。下一步就是要證明這就是實(shí)際的根因。常見(jiàn)的方法是讓問(wèn)題再現(xiàn),但這個(gè)在生產(chǎn)環(huán)境很難實(shí)現(xiàn)。原因主要有兩個(gè):一是系統(tǒng)比較復(fù)雜,可能單個(gè)問(wèn)題都不是問(wèn)題,但所有的問(wèn)題集中起來(lái)就會(huì)導(dǎo)致問(wèn)題發(fā)生;二是若在生產(chǎn)環(huán)境再現(xiàn)這個(gè)問(wèn)題會(huì)導(dǎo)致影響SLA,這個(gè)是不能被接受的。

一旦問(wèn)題發(fā)生,要寫(xiě)故障報(bào)告。

如何讓問(wèn)題處理更簡(jiǎn)單:利用白盒矩陣和結(jié)構(gòu)化日志建設(shè)可觀察性;設(shè)計(jì)系統(tǒng)結(jié)構(gòu)間易于理解的和可觀察的交互界面。

注:

否定的結(jié)果也很神奇。否定是指實(shí)驗(yàn)結(jié)果沒(méi)有和計(jì)劃的保持一致。否定的結(jié)果對(duì)其他人也是有幫助的,發(fā)表使你驚訝的結(jié)果吧,這樣其他人包括你自己才不會(huì)驚訝。

最后編輯于
?著作權(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)容