Netflix SRE 實踐概述
原創(chuàng)簡介
每次加載您最喜愛的Netflix電影或系列時,背后都會發(fā)生很多事情?;煦绻こ獭⑿阅芄こ毯途W(wǎng)站可靠性工程(SRE)領(lǐng)域的工程師們努力確保這種魔法持續(xù)發(fā)生。
?? Netflix 的一些性能統(tǒng)計數(shù)據(jù)
當(dāng)它在2016年獨自處于流媒體世界的頂端時…
為了更好地理解,平均高清視頻連接速度為8mbps,因此30+太比特/秒意味著任何時候都有3,750,000+個高清視頻比特率的連接。
到2022年,這個數(shù)字肯定顯著提高,但我無法獲取他們當(dāng)前的數(shù)字。
SRE在確保所有性能平穩(wěn)運行方面發(fā)揮了至關(guān)重要的作用。
?? SRE如何融入Netflix文化
團隊組建
Netflix的SRE團隊被稱為CORE(云運維可靠性工程),它屬于一個更大的組別,即運維工程。
SRE(網(wǎng)站可靠性工程師)與SRE相關(guān)的專業(yè)角色一起工作,例如性能工程師和混沌工程師。
Netflix的SRE文化是怎樣的?
Netflix的文化是自由和責(zé)任,這兩者對于有效的SRE工作都很重要。
CEO里德·黑斯廷斯(Reed Hasting)采用了 radical candor 的方法(現(xiàn)在被金·斯科特普及),這對自由和責(zé)任之間矛盾的渴望產(chǎn)生了影響。
radical candor 法則是“批評他人因為你關(guān)心他們”。這可能使SRE更容易指出不良生產(chǎn)決策。
當(dāng)同行沒有沒有遵循解決問題更合適路徑時,SRE可以直接指出,而不會顯得不禮貌。
開發(fā)人員必須遵循“you build it, you run it”的范式。 SRE充當(dāng)開發(fā)人員的顧問來幫助研發(fā)人員實現(xiàn)“you run it”這部分。
當(dāng)然,在問題影響生產(chǎn)時,SRE也將充當(dāng)最后一道防線。
例如,測試服務(wù)崩潰會影響推送代碼到生產(chǎn)環(huán)境的能力。SRE按照事件響應(yīng)協(xié)議,會介入解決此問題。
大多數(shù)時間,Netflix 的 SRE 都是在解決那些沒有直接解決方案的問題。在這種情況下,“RTFM”(read the fucking manual)可能行不通(譯者注:沒有既定的預(yù)案文檔),愿意嘗試和尋求新穎的解決方案可能會有所幫助。
修復(fù)可能需要幾分鐘、幾小時、幾天、幾周或者幾個月的時間——沒有固定的解決時間——并且可能是其他團隊沒有時間完成的大型項目。
這需要閱讀源代碼和文檔,尋找實驗想法,運行實驗,并測量結(jié)果。
可以作為單人任務(wù)完成,也可以組成一個暫時性的問題專項小組。
?? Netflix SRE 如何支持生產(chǎn)工具
工具精神
Netflix的運維工程師花費了多年時間開發(fā)“(paved paths)鋪好的道路”(編者注:表示已經(jīng)研發(fā)了很多工具)。這些路徑旨在幫助開發(fā)人員利用先進(jìn)的工具,而無需重新發(fā)明輪子。
這些已經(jīng)有的工具包括:服務(wù)發(fā)現(xiàn)、應(yīng)用程序RPC調(diào)用和斷路器。
雖然有了很多工具,但是不會強制研發(fā)人員使用。開發(fā)人員被允許甚至被授權(quán)不用這些工具,研發(fā)人員可以為自己的服務(wù)創(chuàng)建其他工具。
SRE會幫助研發(fā)人員設(shè)計更好的工具,但是,注意了,SRE 提供的工具可能經(jīng)受了Simian Army的攻擊,已經(jīng)比較穩(wěn)定了,研發(fā)人員自己造的輪子,同樣會被Simian Army攻擊,就需要自己搞定這些穩(wěn)定性因素了。
Simian Army是Netflix一套混沌工程測試工具,可測試系統(tǒng)在遭受內(nèi)部攻擊時其韌性如何。
這對于Netflix實踐極端DevOps非常有用——you build it, you run it——工程師負(fù)責(zé)從頭到尾地開發(fā)軟件、部署和在生產(chǎn)環(huán)境中運行代碼。
SREs將過去部署中最佳實踐編碼化以確保生產(chǎn)效果最優(yōu)。
工具示例
在 SRE 世界里,NetFlix 最廣為人知的是混沌工程里的 Chaos Monkey 工具。不過實際上,遠(yuǎn)不止此!
Netflix 的 SRE 還廣泛使用以下工具:
- ??? 金絲雀工具用于開發(fā)人員檢查代碼,確保沒有性能問題
- ??? 儀表板可用于審查服務(wù)性能,例如上游錯誤率、支持服務(wù)的警報
- ??? 分布式系統(tǒng)跟蹤可跟蹤微服務(wù)生態(tài)系統(tǒng)中的性能
- ??? 聊天室、值班系統(tǒng)和工單系統(tǒng)提供有趣的工程師級別支持工作
- ??? 可操作警報-檢查正確的事情,在適當(dāng)時觸發(fā),在不需要時靜音。
- ??? Spinnaker - 允許使用多云設(shè)置進(jìn)行藍(lán)綠部署(非常強大)
- ??? 預(yù)生產(chǎn)清單對進(jìn)入生產(chǎn)之前每個方面進(jìn)行評分。
以下是一個SRE編纂的工具-預(yù)生產(chǎn)檢查清單。用于檢查您的服務(wù)是否已準(zhǔn)備就緒?
Netflix SRE 能力亮點
?? 故障響應(yīng)
Netflix工程團隊的#1業(yè)務(wù)指標(biāo)是SPS - 每秒開始次數(shù) - 成功點擊播放按鈕的人數(shù)。
事故響應(yīng)實踐旨在確保此SPS指標(biāo)的最高百分比。
以下是Netflix在其事故響應(yīng)能力中確認(rèn)的一些做法:
- 將正確的人帶入房間,并確保他們能夠解決故障
- 在事故期間記錄所有內(nèi)容,以幫助進(jìn)行事后分析
- 事后分析不一定是“無過錯”的——某些問題發(fā)生是因為某個人做了什么,但與其懲罰他們,不如讓他們作為學(xué)習(xí)過程。
- 處理緊急情況的簡短而簡明的檢查清單已經(jīng)編碼在易于訪問的手冊中。
- 開發(fā)人員可以為其服務(wù)指定度量標(biāo)準(zhǔn),在達(dá)到一定閾值時由SRE處理。
??? 支持性能工程師
對于 Netflix 運維來說,不僅要保證正常運行時間,還需要確保播放的穩(wěn)定性和適當(dāng)?shù)男阅芩健?/p>
需要提供持續(xù)良好的服務(wù)表現(xiàn)而非一次性勝利——用戶應(yīng)該獲得可接受的 TTI 和 TTR。
這是這兩個術(shù)語的含義:
- TTI(交互時間)- 用戶可以與應(yīng)用程序內(nèi)容進(jìn)行交互,即使并非所有內(nèi)容都已完全加載或呈現(xiàn)
- TTR(渲染時間)- 屏幕上方的所有內(nèi)容都已呈現(xiàn)
SRE支持性能工程師執(zhí)行以下活動:
- 自動縮放用于按需擴展 - 節(jié)省資金與預(yù)購的本地計算機相比 - 用于編碼、預(yù)計算、故障轉(zhuǎn)移和藍(lán)綠部署
- 處理涉及自動縮放的棘手問題,如資源欠配,以及粘性流量、突發(fā)流量和不均勻的流量分布
- 支持性能儀表板,覆蓋負(fù)載問題、錯誤、延遲問題、資源飽和(例如CPU負(fù)載平均值)和實例數(shù)量。
?? 規(guī)模化運行混沌工程
Netflix以其廣泛使用混沌工程而聞名,以確保所有上述指標(biāo)(如SPS、TTI和TTR)都朝著正確的方向發(fā)展。
什么是混沌工程?
在分布式系統(tǒng)上進(jìn)行實驗,以增強對該系統(tǒng)在生產(chǎn)環(huán)境中抵御動蕩條件的能力的信心
—— Nora Jones,前Netflix高級混沌工程師
混沌工程是一種能力,它在很大程度上基于 Netflix 在 2008 年至 2010 年初的工作。它建立在像單元測試和集成測試這樣的常見測試價值基礎(chǔ)之上。
混沌工作通過在服務(wù)之間的調(diào)用中添加故障或延遲,從這些舊方法中提升了一個檔次。
為什么要這樣做?因為它有助于發(fā)現(xiàn)和解決通常在服務(wù)調(diào)用另一個服務(wù)時出現(xiàn)的問題,例如網(wǎng)絡(luò)延遲、擁塞以及邏輯或擴展故障。
將混沌引入 Netflix 工程,導(dǎo)致了一種文化轉(zhuǎn)變,從“如果這個失敗會發(fā)生什么”到“當(dāng)這個失敗時會發(fā)生什么”。
如何進(jìn)行混沌工程
- 使用混沌猴工具進(jìn)行優(yōu)雅重啟和降級
- 針對系統(tǒng)特定組件的有目標(biāo)性混沌,例如 Kafka - “讓我們看看刪除主題時會發(fā)生什么”
- 級聯(lián)故障檢查-查看系統(tǒng)一部分失敗如何觸發(fā)其他部分的失敗
- 以自動化方式向服務(wù)注入故障,并限制受影響用戶數(shù)量-如果 SPS 風(fēng)險低于可接受水平,則實驗可以縮短