關(guān)于頂級(jí)公司Netflix 的運(yùn)維揭秘,趙成老師在新書《進(jìn)化:運(yùn)維技術(shù)變革與實(shí)踐探索》中有比較詳細(xì)的分析。

眾所周知,Netflix 是業(yè)界微服務(wù)架構(gòu)的最佳實(shí)踐者,其基于公有云上的 微服務(wù)架構(gòu)設(shè)計(jì)、持續(xù)交付、監(jiān)控、穩(wěn)定性保障,都為業(yè)界提供了大量可以 遵從的原則和實(shí)踐經(jīng)驗(yàn)。
Netflix 超前提出了某些理念并付諸實(shí)踐,以至于在國(guó)內(nèi)眾多互聯(lián)網(wǎng)公司 的技術(shù)架構(gòu)上都可以看到似曾相識(shí)的影子。當(dāng)然,殊途同歸也好,經(jīng)驗(yàn)借鑒 也罷,這都不影響 Netflix 作為業(yè)界最佳實(shí)踐者的地位。
同樣,在運(yùn)維這個(gè)細(xì)分領(lǐng)域,Netflix 仍然是最佳實(shí)踐的典范。所以在本 書的開始,就讓我們一起看看世界頂級(jí)的互聯(lián)網(wǎng)公司是如何定義運(yùn)維以及如 何開展運(yùn)維工作的。

1. 沒(méi)有運(yùn)維的 Netflix
準(zhǔn)確一點(diǎn)來(lái)說(shuō),Netflix 是沒(méi)有運(yùn)維崗位的,和運(yùn)維對(duì)應(yīng)的崗位其實(shí)是我 們熟知的 SRE(Site Reliability Engineer)。但我們知道 SRE 不等于運(yùn)維, SRE 理念的核心是,用軟件工程的方法重新設(shè)計(jì)和定義運(yùn)維工作。
但是 Netflix 的神奇和強(qiáng)大之處在于,連 Google 都非常重視和大力發(fā)展 的 SRE 崗位,在 Netflix 卻沒(méi)有幾個(gè)。按照 Netflix 一位技術(shù)主管在 2017 年 9 月更新的博客中所描述的,在 1 億用戶、每天 1.2 億小時(shí)播放時(shí)長(zhǎng)、萬(wàn)級(jí)
微服務(wù)實(shí)例的業(yè)務(wù)體量下,Netflix 的 SRE 人數(shù)卻不超過(guò) 10 個(gè),他們稱這樣 的角色為 Core SRE。具體描述如下:
100+ Million members. 125+ Million hours watched per day. Hundreds of microservices. Hundreds of thousands of instances. Less than 10 Core SREs.
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ——Katharina Probst
不可否認(rèn),Netflix 擁有強(qiáng)大的技術(shù)實(shí)力和全球最優(yōu)秀的工程師團(tuán)隊(duì)。按 照 SRE 的理念,完全可以打造出一系列的工具產(chǎn)品來(lái)取代運(yùn)維和 SRE 的工作。 但是 Netflix 能夠做到如此極致,就不得不讓人驚嘆和好奇,它到底是怎么 做的?
2. Netflix 是如何成為行業(yè)典范的
這確實(shí)是一個(gè)很有意思的問(wèn)題,我?guī)е@樣的疑問(wèn),閱讀了大量的 Netflix 技術(shù)文章和公開的演講內(nèi)容之后,我想可以從 Netflix 的技術(shù)架構(gòu)、 組織架構(gòu)、企業(yè)文化等幾個(gè)方面來(lái)看這個(gè)問(wèn)題。
海量業(yè)務(wù)規(guī)模下的技術(shù)架構(gòu)和挑戰(zhàn)
前面提到,Netflix 在業(yè)務(wù)高速發(fā)展以及超大規(guī)模業(yè)務(wù)體量的驅(qū)動(dòng)下,引 入了更為靈活的微服務(wù)架構(gòu),而且已經(jīng)成為業(yè)界的最佳實(shí)踐典范。
引入微服務(wù)架構(gòu)后,軟件架構(gòu)的細(xì)化拆分和靈活多變,大大提升了開發(fā)人員的開發(fā)效率,繼而也就提升了業(yè)務(wù)需求的響應(yīng)和迭代速度,我想這也正是微服務(wù)思想在業(yè)界能夠被廣泛接受和采用的根本原因。
但是這樣做也并不是說(shuō)沒(méi)有一點(diǎn)代價(jià)和成本,隨之而來(lái)的便是架構(gòu)復(fù)雜度大大增加,這種復(fù)雜度已經(jīng)遠(yuǎn)遠(yuǎn)超出人的認(rèn)知能力,也就是我們已經(jīng)無(wú)法靠人力去掌控了,這也就為后續(xù)的交付和線上運(yùn)維帶來(lái)了極大的難度和挑戰(zhàn)。
這是,微服務(wù)架構(gòu)下的運(yùn)維就必須要靠通過(guò)軟件工程思路打造工具支撐體系來(lái)支持了,也就是要求微服務(wù)架構(gòu)既要能夠支持業(yè)務(wù)功能,也要能夠提供和暴露更多在后期交付和線上運(yùn)維階段所需的基礎(chǔ)維護(hù)能力。
簡(jiǎn)單舉幾個(gè)例子,比如服務(wù)上下線、路由策略調(diào)整、并發(fā)數(shù)動(dòng)態(tài)調(diào)整、 功能開關(guān)、訪問(wèn) ACL 控制、異常熔斷和旁路、調(diào)用關(guān)系和服務(wù)質(zhì)量日志輸 出等,要在這些能力之上建設(shè)我們的運(yùn)維工具和服務(wù)平臺(tái)。
講到這里,我們可以看到,在微服務(wù)架構(gòu)模式下,運(yùn)維已經(jīng)成為整體技 術(shù)架構(gòu)體系中必不可少的一部分,而且與微服務(wù)架構(gòu)相關(guān)的體系是緊密相連、 不可拆分的。
我們現(xiàn)在看到很多和 SRE 相關(guān)的文章或內(nèi)容,對(duì)于 SRE 產(chǎn)生原因的解 釋,大多是說(shuō)為了緩解開發(fā)和運(yùn)維之間的矛盾,樹立共同的目標(biāo),讓雙方能 夠更好地協(xié)作配合。這樣理解也沒(méi)有太大的問(wèn)題,但是我認(rèn)為不夠充分,或 者說(shuō)以上這些只能算是結(jié)果,不是背后的根本原因。
我理解的背后最根本的原因是,微服務(wù)架構(gòu)復(fù)雜到了一定程度,已經(jīng)遠(yuǎn)遠(yuǎn)超出單純的開發(fā)和單純的運(yùn)維職責(zé)范疇,也遠(yuǎn)遠(yuǎn)超出了單純的人力認(rèn)知掌控范圍,所以必須尋求在架構(gòu)之上的更為有效和統(tǒng)一的技術(shù)解決方案,來(lái)解決復(fù)雜度認(rèn)知的問(wèn)題。在這一套統(tǒng)一的技術(shù)解決方案之上,開發(fā)和運(yùn)維進(jìn)而產(chǎn)生了新的職責(zé)分工和協(xié)作方式。
對(duì)于目前業(yè)界火熱的 DevOps 理念及其衍生出來(lái)的一系列話題,我們可 以仔細(xì)思考一下,其實(shí)也是同樣的背景和邏輯。DevOps 想要解決的是開發(fā)和運(yùn)維之間日益嚴(yán)重的矛盾,究其根本,還是微服務(wù)架構(gòu)背后的技術(shù)復(fù)雜度在不斷提升的問(wèn)題。
Netflix 帶給我們的啟示一:在微服務(wù)架構(gòu)模式下,我們必須換一個(gè)思路 來(lái)重新定義和思考運(yùn)維,運(yùn)維一定要與微服務(wù)架構(gòu)本身緊密結(jié)合起來(lái)。
更加合理的組織架構(gòu)和先進(jìn)的工具體系及理念
前面提到,在微服務(wù)架構(gòu)模式下,運(yùn)維已經(jīng)成為整體技術(shù)架構(gòu)和體系中不可分割的一部分,兩者脫節(jié)就會(huì)帶來(lái)后續(xù)一系列的嚴(yán)重問(wèn)題。
從這一點(diǎn)上,不得不說(shuō) Netflix 的前瞻性和技術(shù)架構(gòu)能力還是很強(qiáng)的。 因?yàn)樵缭?2012 年,甚至更早之前,Netflix 就已經(jīng)意識(shí)到了這個(gè)問(wèn)題。在組 織架構(gòu)上,將中間件、SRE、DBA(DataBase Administrator,數(shù)據(jù)庫(kù)管理員)、 交付和自動(dòng)化工具、基礎(chǔ)架構(gòu)等團(tuán)隊(duì)都放在統(tǒng)一的云平臺(tái)工程(Cloud and Platform Engineering)這個(gè)大團(tuán)隊(duì)下,在產(chǎn)品層面統(tǒng)一規(guī)劃和建設(shè),從而能 夠最大程度地發(fā)揮組織能力,避免了開發(fā)和運(yùn)維的脫節(jié)。
當(dāng)然,這個(gè)團(tuán)隊(duì)不僅沒(méi)讓大家失望,還給我們帶來(lái)了很多驚喜。在業(yè)界 大名鼎鼎的 Netflix OSS 開源產(chǎn)品體系里,絕大部分的產(chǎn)品都是這個(gè)團(tuán)隊(duì)貢 獻(xiàn)的。
比如,持續(xù)交付系統(tǒng) Spinnaker;穩(wěn)定性保障工具體系 Chaos Engineering, 這里面最著名的就是那只不安分的猴子,也正是這套穩(wěn)定性理念和產(chǎn)品最大 程度地保障了 Netflix 系統(tǒng)的穩(wěn)定運(yùn)行;被 Spring Cloud 引入并得以更廣泛 傳播的 Common Runtime Service&Libraries,而且大家選用 Spring Cloud 基本 就是沖著 Spring Cloud Netflix 這個(gè)子項(xiàng)目去的。當(dāng)然還有很多其他優(yōu)秀的開 源產(chǎn)品,這里就不一一介紹了。
Netflix 帶給我們的啟示二:合理的組織架構(gòu)是保障技術(shù)架構(gòu)落地的必要 條件,用技術(shù)手段來(lái)解決運(yùn)維過(guò)程中遇到的效率和穩(wěn)定性問(wèn)題才是根本解決方案。
自由與責(zé)任并存的企業(yè)文化
上面講了這么多,看上去好像就是 SRE 常見(jiàn)的理念和套路,只不過(guò) Netflix 在開源和分享上更加開放和透明,讓我們有機(jī)會(huì)更多地了解到一些細(xì) 節(jié)。但是為什么 Netflix 會(huì)做得如此極致呢?好像我們一直沒(méi)有回答這個(gè)問(wèn)題, 說(shuō)到這里就不得不提 Netflix 的企業(yè)文化了。
Netflix 的企業(yè)文化是“Freedom & Responsibility”,也就是自由和責(zé)任 并存,高度自由的同時(shí),也需要員工具備更強(qiáng)的責(zé)任心和 Owner(責(zé)任人) 意識(shí)。
體現(xiàn)在技術(shù)團(tuán)隊(duì)中就是“You Build It,You Run It”。工程師可以隨時(shí) 向生產(chǎn)環(huán)境提交代碼或者發(fā)布新的服務(wù),但是工程師同時(shí)作為 Owner,要對(duì) 自己發(fā)布的代碼和線上服務(wù)的穩(wěn)定運(yùn)行負(fù)責(zé)。
在這種文化的驅(qū)使下,技術(shù)團(tuán)隊(duì)自然會(huì)考慮從開發(fā)設(shè)計(jì)階段到交付和線 上運(yùn)維階段的端到端整體解決方案,而不會(huì)是開發(fā)人員就只管需求開發(fā),后 期交付和維護(hù)應(yīng)該由一個(gè)叫運(yùn)維的角色去考慮。文化使然,在 Netflix 是絕對(duì) 不允許這種情況存在的,你是開發(fā)人員,你就是 Owner,你就要端到端地負(fù)責(zé)。
所以,雖然是短短兩個(gè)英文單詞——Freedom & Responsibility,卻從源 頭上決定了團(tuán)隊(duì)和員工的做事方式。
Netflix 帶給我們的啟示三:Owner 意識(shí)很重要,正確的做事方式需要引導(dǎo),這就是優(yōu)秀和極致的距離。
3. 總結(jié)
通過(guò)上面的分析,我們可以看到,Netflix 在其技術(shù)架構(gòu)、組織架構(gòu)和企 業(yè)文化等方面的獨(dú)到之處,造就了其優(yōu)秀的技術(shù)理念和最佳實(shí)踐。從運(yùn)維的 角度來(lái)說(shuō),無(wú)論是 SRE 也好,還是 DevOps 也罷,都被 Netflix 發(fā)揮到了極致。
當(dāng)然,Netflix 能做到這一點(diǎn),是需要非常強(qiáng)大的技術(shù)實(shí)力和人才儲(chǔ)備的。 當(dāng)前我們雖然沒(méi)辦法直接套用它的整套體系,但是這并不妨礙我們?cè)谀承┙?jīng) 驗(yàn)和思路上去借鑒和學(xué)習(xí)。
比如,現(xiàn)在很多公司在采用了微服務(wù)架構(gòu)后,就沒(méi)有充分考慮到后續(xù)基于微服務(wù)架構(gòu)的運(yùn)維問(wèn)題,而且在運(yùn)維團(tuán)隊(duì)的設(shè)置上,仍然脫離了整個(gè)技術(shù)團(tuán)隊(duì),更不用說(shuō)將其與中間件和架構(gòu)設(shè)計(jì)等團(tuán)隊(duì)整合拉通區(qū)建設(shè),自然也就談不上在產(chǎn)品層面上的合理規(guī)劃和建設(shè)了。
因此導(dǎo)致的問(wèn)題就是運(yùn)維效率低下,完全靠人工,線上故障頻發(fā),但是處理效率又極低,開發(fā)和運(yùn)維都處于非常痛苦的狀態(tài)中,運(yùn)維團(tuán)隊(duì)和成員也會(huì)遭遇到轉(zhuǎn)型和成長(zhǎng)的障礙。
以上這些問(wèn)題都很棘手,亟待解決。通過(guò)本節(jié)內(nèi)容,我們了解了 Netflix 技術(shù)團(tuán)隊(duì)的運(yùn)作模式和思路,不知道給你帶來(lái)了哪些啟示呢?