我們生活在一個(gè)用戶依賴于對(duì)服務(wù)的一致訪問(wèn)的可靠性時(shí)代。在相互競(jìng)爭(zhēng)的服務(wù)之間進(jìn)行選擇時(shí),對(duì)用戶來(lái)說(shuō),沒(méi)有比可靠性更重要的特性了。但是可靠性是什么意思呢?
為了回答這個(gè)問(wèn)題,我們將根據(jù)可靠性工程中的其他度量來(lái)分解可靠性:可用性和可維護(hù)性。區(qū)分這些術(shù)語(yǔ)并不是語(yǔ)義問(wèn)題。了解這些差異可以幫助您更好地將開(kāi)發(fā)工作的優(yōu)先級(jí)放在客戶的滿意度上。
可用性
可用性是可靠性最簡(jiǎn)單的組成部分。此度量描述服務(wù)運(yùn)行的時(shí)間百分比,這也被稱(chēng)為服務(wù)的“正常運(yùn)行時(shí)間”??捎眯钥梢酝ㄟ^(guò)連續(xù)查詢服務(wù)并以預(yù)期的速度和準(zhǔn)確性確認(rèn)返回的響應(yīng)來(lái)監(jiān)控。
服務(wù)的可用性是用戶感知可靠性的主要因素??紤]到這一點(diǎn),設(shè)定一個(gè)100%正常運(yùn)行時(shí)間的目標(biāo)是很誘人的。但是SRE告訴我們失敗是不可避免的;導(dǎo)致停機(jī)的事故總是發(fā)生在工程預(yù)期之外。可用性通常用“9”表示,表示正常運(yùn)行時(shí)間的百分比可以達(dá)到多少位小數(shù)。一些主要的軟件公司會(huì)吹噓自己的“5個(gè)9”或者99.99%的正常運(yùn)行時(shí)間,但永遠(yuǎn)不會(huì)有可確保的100%的正常運(yùn)行時(shí)間。
此外,用戶是可以容忍甚至無(wú)法注意到服務(wù)的某些領(lǐng)域出現(xiàn)宕機(jī)。致力于改善超出預(yù)期的可用性的開(kāi)發(fā)資源并不會(huì)增加客戶的滿意度,把這些資源用在可維護(hù)性上會(huì)更好。
可維護(hù)性
可靠性的另一個(gè)主要組成部分是可維護(hù)性。通過(guò)描述停機(jī)時(shí)間的產(chǎn)生和解決方式,將可維護(hù)性因素考慮到可用性中。當(dāng)發(fā)生導(dǎo)致停機(jī)的事件時(shí),可維護(hù)服務(wù)可以快速修復(fù)。事件越早得到解決,服務(wù)就越快恢復(fù)可用。
可維護(hù)性有兩個(gè)主要組成部分:主動(dòng)式可維護(hù)性和反應(yīng)式可維護(hù)性。
主動(dòng)式可維護(hù)性包括構(gòu)建易于理解和更改的代碼庫(kù)。隨著開(kāi)發(fā)的進(jìn)行,會(huì)出現(xiàn)與現(xiàn)有代碼不兼容的問(wèn)題。如果工程師寫(xiě)的是面條式代碼,而不是優(yōu)先考慮可維護(hù)性,就容易出問(wèn)題,并且很難發(fā)現(xiàn)和解決問(wèn)題。主動(dòng)維護(hù)還包括質(zhì)量保證和測(cè)試等程序。
反應(yīng)式可維護(hù)性描述了服務(wù)在事故發(fā)生后被修復(fù)的能力。這受服務(wù)的事故響應(yīng)過(guò)程的影響。大型事故的反應(yīng)和防范是必要的,如果事故響應(yīng)程序可靠,團(tuán)隊(duì)將迅速解決事件。適當(dāng)?shù)氖鹿史磻?yīng)也有助于減少?gòu)?fù)發(fā)。高度可維護(hù)的服務(wù)允許工程師有效地汲取這些經(jīng)驗(yàn)教訓(xùn)。
可維護(hù)性反映在可用性指標(biāo)中??s短停機(jī)時(shí)間或停機(jī)頻率可以提高可用性。但是,可維護(hù)性不是實(shí)現(xiàn)可用性的唯一手段。采取這種方法可能導(dǎo)致發(fā)展資源分配不當(dāng)。在可維護(hù)性方面的投資可能不會(huì)立即帶來(lái)更好的正常運(yùn)行時(shí)間。當(dāng)您重構(gòu)舊代碼以解決技術(shù)債務(wù)時(shí),服務(wù)的功能將與以前相同,并具有相同的可用性。直到事件發(fā)生,您才會(huì)看到這種高可維護(hù)性的好處??删S護(hù)性應(yīng)該被看作是可靠性方面的投資,而不僅僅是可用性的一個(gè)組成部分。
可靠性
可靠性可以定義為當(dāng)用戶訪問(wèn)服務(wù)時(shí),服務(wù)按預(yù)期運(yùn)行的可能性。這似乎與我們定義可用性的方式相同,但有關(guān)鍵的區(qū)別??捎眯詸z查服務(wù)是否工作,用戶是否正在訪問(wèn)它。如果用戶在所有時(shí)間、所有功能上統(tǒng)一訪問(wèn)服務(wù),可用性將決定可靠性。一般情況下,這不可能發(fā)生。
以兩種情形為例:
服務(wù)A:
用戶登錄頁(yè)面的可用性為97%
目錄搜索的可用性為97%
站點(diǎn)設(shè)置頁(yè)面的可用性為97%
服務(wù)B:
用戶登錄頁(yè)面具有可用性為99%
目錄搜索的可用性為98%
網(wǎng)站設(shè)置頁(yè)面的可用性為90%
僅從可用性度量來(lái)看,服務(wù)A勝出。但是如果登錄頁(yè)面被100%的用戶使用,目錄搜索被90%的用戶使用,而站點(diǎn)設(shè)置頁(yè)面只有30%的用戶使用,那么服務(wù)B就會(huì)被認(rèn)為更可靠??煽啃孕枰紤]實(shí)際使用情況,將可用性指標(biāo)轉(zhuǎn)化為客戶滿意度的度量指標(biāo)。
通過(guò)理解系統(tǒng)的可靠性,開(kāi)發(fā)人員可以避免浪費(fèi)時(shí)間來(lái)改進(jìn)超出客戶預(yù)期的可用性。服務(wù)級(jí)別指標(biāo)將延遲和可用性等指標(biāo)捆綁到更有效的度量中。然后將服務(wù)水平目標(biāo)設(shè)定在顧客不滿意的閾值。這種方法從客戶的角度來(lái)看可靠性,因?yàn)閷?duì)他們來(lái)說(shuō),服務(wù)的可靠性比它的可用性更重要。
可維護(hù)性也可以通過(guò)這種標(biāo)準(zhǔn)來(lái)評(píng)估。響應(yīng)事件所花費(fèi)的時(shí)間耗盡了服務(wù)正常運(yùn)行時(shí)間的錯(cuò)誤預(yù)算……SLI和SLO可以幫助分配開(kāi)發(fā)工作,以改進(jìn)可維護(hù)性和最影響客戶滿意度的事件響應(yīng)過(guò)程。
可靠性不僅僅是度量的集合或代碼庫(kù)的質(zhì)量。這是一個(gè)全局概念,包含了用戶的觀點(diǎn)、變化和增長(zhǎng)的必然性以及開(kāi)發(fā)代碼的人員。這種整體方法是SRE的基礎(chǔ),是實(shí)踐的集合,也是提高服務(wù)可靠性的文化課程。