Netflix SRE 實(shí)踐概述
原創(chuàng)
簡(jiǎn)介
每次加載您最喜愛(ài)的Netflix電影或系列時(shí),背后都會(huì)發(fā)生很多事情?;煦绻こ?、性能工程和網(wǎng)站可靠性工程(SRE)領(lǐng)域的工程師們努力確保這種魔法持續(xù)發(fā)生。
?? Netflix 的一些性能統(tǒng)計(jì)數(shù)據(jù)
當(dāng)它在2016年獨(dú)自處于流媒體世界的頂端時(shí)…

為了更好地理解,平均高清視頻連接速度為8mbps,因此30+太比特/秒意味著任何時(shí)候都有3,750,000+個(gè)高清視頻比特率的連接。
到2022年,這個(gè)數(shù)字肯定顯著提高,但我無(wú)法獲取他們當(dāng)前的數(shù)字。
SRE在確保所有性能平穩(wěn)運(yùn)行方面發(fā)揮了至關(guān)重要的作用。
?? SRE如何融入Netflix文化
團(tuán)隊(duì)組建
Netflix的SRE團(tuán)隊(duì)被稱(chēng)為CORE(云運(yùn)維可靠性工程),它屬于一個(gè)更大的組別,即運(yùn)維工程。

SRE(網(wǎng)站可靠性工程師)與SRE相關(guān)的專(zhuān)業(yè)角色一起工作,例如性能工程師和混沌工程師。
Netflix的SRE文化是怎樣的?
Netflix的文化是自由和責(zé)任,這兩者對(duì)于有效的SRE工作都很重要。
CEO里德·黑斯廷斯(Reed Hasting)采用了 radical candor 的方法(現(xiàn)在被金·斯科特普及),這對(duì)自由和責(zé)任之間矛盾的渴望產(chǎn)生了影響。
radical candor 法則是“批評(píng)他人因?yàn)槟汴P(guān)心他們”。這可能使SRE更容易指出不良生產(chǎn)決策。
當(dāng)同行沒(méi)有沒(méi)有遵循解決問(wèn)題更合適路徑時(shí),SRE可以直接指出,而不會(huì)顯得不禮貌。
開(kāi)發(fā)人員必須遵循“you build it, you run it”的范式。 SRE充當(dāng)開(kāi)發(fā)人員的顧問(wèn)來(lái)幫助研發(fā)人員實(shí)現(xiàn)“you run it”這部分。
當(dāng)然,在問(wèn)題影響生產(chǎn)時(shí),SRE也將充當(dāng)最后一道防線。
例如,測(cè)試服務(wù)崩潰會(huì)影響推送代碼到生產(chǎn)環(huán)境的能力。SRE按照事件響應(yīng)協(xié)議,會(huì)介入解決此問(wèn)題。
大多數(shù)時(shí)間,Netflix 的 SRE 都是在解決那些沒(méi)有直接解決方案的問(wèn)題。在這種情況下,“RTFM”(read the fucking manual)可能行不通(譯者注:沒(méi)有既定的預(yù)案文檔),愿意嘗試和尋求新穎的解決方案可能會(huì)有所幫助。
修復(fù)可能需要幾分鐘、幾小時(shí)、幾天、幾周或者幾個(gè)月的時(shí)間——沒(méi)有固定的解決時(shí)間——并且可能是其他團(tuán)隊(duì)沒(méi)有時(shí)間完成的大型項(xiàng)目。
這需要閱讀源代碼和文檔,尋找實(shí)驗(yàn)想法,運(yùn)行實(shí)驗(yàn),并測(cè)量結(jié)果。
可以作為單人任務(wù)完成,也可以組成一個(gè)暫時(shí)性的問(wèn)題專(zhuān)項(xiàng)小組。
?? Netflix SRE 如何支持生產(chǎn)工具
工具精神
Netflix的運(yùn)維工程師花費(fèi)了多年時(shí)間開(kāi)發(fā)“(paved paths)鋪好的道路”(編者注:表示已經(jīng)研發(fā)了很多工具)。這些路徑旨在幫助開(kāi)發(fā)人員利用先進(jìn)的工具,而無(wú)需重新發(fā)明輪子。
這些已經(jīng)有的工具包括:服務(wù)發(fā)現(xiàn)、應(yīng)用程序RPC調(diào)用和斷路器。
雖然有了很多工具,但是不會(huì)強(qiáng)制研發(fā)人員使用。開(kāi)發(fā)人員被允許甚至被授權(quán)不用這些工具,研發(fā)人員可以為自己的服務(wù)創(chuàng)建其他工具。
SRE會(huì)幫助研發(fā)人員設(shè)計(jì)更好的工具,但是,注意了,SRE 提供的工具可能經(jīng)受了Simian Army的攻擊,已經(jīng)比較穩(wěn)定了,研發(fā)人員自己造的輪子,同樣會(huì)被Simian Army攻擊,就需要自己搞定這些穩(wěn)定性因素了。
Simian Army是Netflix一套混沌工程測(cè)試工具,可測(cè)試系統(tǒng)在遭受內(nèi)部攻擊時(shí)其韌性如何。
這對(duì)于Netflix實(shí)踐極端DevOps非常有用——you build it, you run it——工程師負(fù)責(zé)從頭到尾地開(kāi)發(fā)軟件、部署和在生產(chǎn)環(huán)境中運(yùn)行代碼。
SREs將過(guò)去部署中最佳實(shí)踐編碼化以確保生產(chǎn)效果最優(yōu)。
工具示例
在 SRE 世界里,NetFlix 最廣為人知的是混沌工程里的 Chaos Monkey 工具。不過(guò)實(shí)際上,遠(yuǎn)不止此!
Netflix 的 SRE 還廣泛使用以下工具:
- ??? 金絲雀工具用于開(kāi)發(fā)人員檢查代碼,確保沒(méi)有性能問(wèn)題
- ??? 儀表板可用于審查服務(wù)性能,例如上游錯(cuò)誤率、支持服務(wù)的警報(bào)
- ??? 分布式系統(tǒng)跟蹤可跟蹤微服務(wù)生態(tài)系統(tǒng)中的性能
- ??? 聊天室、值班系統(tǒng)和工單系統(tǒng)提供有趣的工程師級(jí)別支持工作
- ??? 可操作警報(bào)-檢查正確的事情,在適當(dāng)時(shí)觸發(fā),在不需要時(shí)靜音。
- ??? Spinnaker - 允許使用多云設(shè)置進(jìn)行藍(lán)綠部署(非常強(qiáng)大)
- ??? 預(yù)生產(chǎn)清單對(duì)進(jìn)入生產(chǎn)之前每個(gè)方面進(jìn)行評(píng)分。
以下是一個(gè)SRE編纂的工具-預(yù)生產(chǎn)檢查清單。用于檢查您的服務(wù)是否已準(zhǔn)備就緒?

Netflix SRE 能力亮點(diǎn)
?? 故障響應(yīng)
Netflix工程團(tuán)隊(duì)的#1業(yè)務(wù)指標(biāo)是SPS - 每秒開(kāi)始次數(shù) - 成功點(diǎn)擊播放按鈕的人數(shù)。
事故響應(yīng)實(shí)踐旨在確保此SPS指標(biāo)的最高百分比。
以下是Netflix在其事故響應(yīng)能力中確認(rèn)的一些做法:
- 將正確的人帶入房間,并確保他們能夠解決故障
- 在事故期間記錄所有內(nèi)容,以幫助進(jìn)行事后分析
- 事后分析不一定是“無(wú)過(guò)錯(cuò)”的——某些問(wèn)題發(fā)生是因?yàn)槟硞€(gè)人做了什么,但與其懲罰他們,不如讓他們作為學(xué)習(xí)過(guò)程。
- 處理緊急情況的簡(jiǎn)短而簡(jiǎn)明的檢查清單已經(jīng)編碼在易于訪問(wèn)的手冊(cè)中。
- 開(kāi)發(fā)人員可以為其服務(wù)指定度量標(biāo)準(zhǔn),在達(dá)到一定閾值時(shí)由SRE處理。
??? 支持性能工程師
對(duì)于 Netflix 運(yùn)維來(lái)說(shuō),不僅要保證正常運(yùn)行時(shí)間,還需要確保播放的穩(wěn)定性和適當(dāng)?shù)男阅芩健?/p>
需要提供持續(xù)良好的服務(wù)表現(xiàn)而非一次性勝利——用戶應(yīng)該獲得可接受的 TTI 和 TTR。
這是這兩個(gè)術(shù)語(yǔ)的含義:
- TTI(交互時(shí)間)- 用戶可以與應(yīng)用程序內(nèi)容進(jìn)行交互,即使并非所有內(nèi)容都已完全加載或呈現(xiàn)
- TTR(渲染時(shí)間)- 屏幕上方的所有內(nèi)容都已呈現(xiàn)
SRE支持性能工程師執(zhí)行以下活動(dòng):
- 自動(dòng)縮放用于按需擴(kuò)展 - 節(jié)省資金與預(yù)購(gòu)的本地計(jì)算機(jī)相比 - 用于編碼、預(yù)計(jì)算、故障轉(zhuǎn)移和藍(lán)綠部署
- 處理涉及自動(dòng)縮放的棘手問(wèn)題,如資源欠配,以及粘性流量、突發(fā)流量和不均勻的流量分布
- 支持性能儀表板,覆蓋負(fù)載問(wèn)題、錯(cuò)誤、延遲問(wèn)題、資源飽和(例如CPU負(fù)載平均值)和實(shí)例數(shù)量。
?? 規(guī)?;\(yùn)行混沌工程
Netflix以其廣泛使用混沌工程而聞名,以確保所有上述指標(biāo)(如SPS、TTI和TTR)都朝著正確的方向發(fā)展。
什么是混沌工程?
在分布式系統(tǒng)上進(jìn)行實(shí)驗(yàn),以增強(qiáng)對(duì)該系統(tǒng)在生產(chǎn)環(huán)境中抵御動(dòng)蕩條件的能力的信心
—— Nora Jones,前Netflix高級(jí)混沌工程師
混沌工程是一種能力,它在很大程度上基于 Netflix 在 2008 年至 2010 年初的工作。它建立在像單元測(cè)試和集成測(cè)試這樣的常見(jiàn)測(cè)試價(jià)值基礎(chǔ)之上。
混沌工作通過(guò)在服務(wù)之間的調(diào)用中添加故障或延遲,從這些舊方法中提升了一個(gè)檔次。
為什么要這樣做?因?yàn)樗兄诎l(fā)現(xiàn)和解決通常在服務(wù)調(diào)用另一個(gè)服務(wù)時(shí)出現(xiàn)的問(wèn)題,例如網(wǎng)絡(luò)延遲、擁塞以及邏輯或擴(kuò)展故障。
將混沌引入 Netflix 工程,導(dǎo)致了一種文化轉(zhuǎn)變,從“如果這個(gè)失敗會(huì)發(fā)生什么”到“當(dāng)這個(gè)失敗時(shí)會(huì)發(fā)生什么”。
如何進(jìn)行混沌工程
- 使用混沌猴工具進(jìn)行優(yōu)雅重啟和降級(jí)
- 針對(duì)系統(tǒng)特定組件的有目標(biāo)性混沌,例如 Kafka - “讓我們看看刪除主題時(shí)會(huì)發(fā)生什么”
- 級(jí)聯(lián)故障檢查-查看系統(tǒng)一部分失敗如何觸發(fā)其他部分的失敗
- 以自動(dòng)化方式向服務(wù)注入故障,并限制受影響用戶數(shù)量-如果 SPS 風(fēng)險(xiǎn)低于可接受水平,則實(shí)驗(yàn)可以縮短































