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