作者 | Surabhi Diwan
譯者 | 明知山
策劃 | Tina
她首先介紹了 Netflix 在十年前做出的一些定價(jià)和技術(shù)選擇,那是在她任職 Netflix 之前。然后,她轉(zhuǎn)到會(huì)員歷史記錄的用例研究,這是第二個(gè)持久存儲(chǔ),可以知道任何一個(gè)人的訂閱所做的任意細(xì)粒度的變更。
“我相信你們大多數(shù)人都是 Netflix 的會(huì)員。如果不是的話,我將會(huì)在深入討論這個(gè)問(wèn)題時(shí)向你們展示如何注冊(cè)。最后,我將嘗試回答一個(gè)問(wèn)題:訂閱生態(tài)系統(tǒng)的演變是怎樣的?它有 2.38 億訂閱者。真的,這個(gè)過(guò)程會(huì)是怎樣的?如果你要再增加 500 萬(wàn)訂閱者會(huì)是什么樣子?如果你要再增加 100 萬(wàn)呢?”
會(huì)員系統(tǒng)工程
會(huì)員團(tuán)隊(duì)對(duì)會(huì)員系統(tǒng)的主要關(guān)注點(diǎn)在于 Netflix 的注冊(cè)和流媒體這一關(guān)鍵路徑。他們負(fù)責(zé)一系列不同的微服務(wù),而在會(huì)員這一塊總有幾十個(gè)。他們的中間層服務(wù)確保用戶可以無(wú)間斷訪問(wèn),承若四個(gè) 9 的可用性,直接影響著注冊(cè)流程和流媒體體驗(yàn)。
這些服務(wù)處理大量的流量,根據(jù)具體的用例,例如訂閱或定價(jià),可以擴(kuò)展到每秒處理數(shù)百萬(wàn)個(gè)請(qǐng)求。會(huì)員團(tuán)隊(duì)討論了他們的技術(shù)決策,利用現(xiàn)成的技術(shù)來(lái)實(shí)現(xiàn)可伸縮性和可靠性。他們作為全球會(huì)員數(shù)據(jù)的權(quán)威來(lái)源,為 Netflix 的內(nèi)外部下游分析提供了便利。簡(jiǎn)言之,他們以精確的方式應(yīng)對(duì)規(guī)?;膹?fù)雜的分布式挑戰(zhàn)。
此外,會(huì)員團(tuán)隊(duì)還負(fù)責(zé)管理 Netflix 的計(jì)劃和定價(jià)目錄,盡管它非常簡(jiǎn)單——基本會(huì)員、標(biāo)準(zhǔn)會(huì)員、高級(jí)會(huì)員——但在用戶體驗(yàn)中起著至關(guān)重要的作用。他們優(yōu)先考慮訂閱詳情的準(zhǔn)確性,確保正確的選擇計(jì)劃、賬單國(guó)家和支付狀態(tài),確保服務(wù)質(zhì)量和會(huì)員滿意度。
他們管理著整個(gè)會(huì)員生命周期——注冊(cè)、合作伙伴渠道整合、計(jì)劃變更、續(xù)訂和賬戶關(guān)閉。他們的職責(zé)包括處理支付問(wèn)題(包括賬戶保持和取消)以及在整個(gè)會(huì)員過(guò)程中適當(dāng)管理客戶數(shù)據(jù)來(lái)確保數(shù)據(jù)隱私合規(guī)性。
會(huì)員何時(shí)使用我們的流程?
這是我的團(tuán)隊(duì)所涉及的流程。我想,作為最終用戶,如果你現(xiàn)在打開(kāi) Netflix 應(yīng)用,你會(huì)關(guān)注這些東西。
流程突出了關(guān)鍵的用戶交互,例如加入成為會(huì)員和播放按鈕,這些按鈕將觸發(fā)由 Netflix 會(huì)員工程團(tuán)隊(duì)管理的后端流程。流程圖畫(huà)出了在用戶開(kāi)始觀看流媒體之前確保無(wú)縫會(huì)員體驗(yàn)的各種服務(wù)。播放按鈕直接與會(huì)員系統(tǒng)交互,根據(jù)用戶選擇的計(jì)劃確定服務(wù)質(zhì)量。由于每天會(huì)啟動(dòng)數(shù)十億次的流媒體,這種交互產(chǎn)生了最高的流量。此外,賬戶頁(yè)面上的用戶操作,例如計(jì)劃變更或管理其他會(huì)員,也由會(huì)員服務(wù)提供支持。合作伙伴注冊(cè),例如 Xfinity 的激活,也由會(huì)員團(tuán)隊(duì)的后端服務(wù)負(fù)責(zé)編排。
我們是如何做到的?
我認(rèn)為這是謎題的核心:確定我們做什么。這確實(shí)是我們?nèi)绾巫龅降?。有點(diǎn)難以解釋。

會(huì)員團(tuán)隊(duì)管理著會(huì)員計(jì)劃和定價(jià)目錄,在全球范圍內(nèi)存儲(chǔ)和管理計(jì)劃,在不同地區(qū)有不同的變化。這個(gè)服務(wù)還需要管理基于特定位置的產(chǎn)品規(guī)則。他們利用兩個(gè) CockroachDB 數(shù)據(jù)庫(kù)支持計(jì)劃定價(jià)和代碼兌換,特別是在送禮的高峰期。會(huì)員定價(jià)服務(wù)為會(huì)員行為提供支持,例如計(jì)劃變更和添加額外的會(huì)員。
合作伙伴互動(dòng)由專門(mén)的微服務(wù)負(fù)責(zé)處理,這些微服務(wù)負(fù)責(zé)捆綁包的激活和注冊(cè),包括與平臺(tái)(如蘋(píng)果的應(yīng)用商店)集成實(shí)現(xiàn)訂閱注冊(cè)。會(huì)員數(shù)據(jù)存儲(chǔ)在 Cassandra 數(shù)據(jù)庫(kù)中,為超過(guò) 2.38 億活躍會(huì)員的訂閱服務(wù)和歷史跟蹤提供支持。
會(huì)員團(tuán)隊(duì)的關(guān)注點(diǎn)不僅限于當(dāng)前的會(huì)員,還包括之前的會(huì)員和會(huì)員的重新加入。他們通過(guò)會(huì)員狀態(tài)和會(huì)員維持服務(wù)來(lái)管理會(huì)員狀態(tài),確保使用 Casspactor 和 Apache Spark 等工具進(jìn)行大數(shù)據(jù)處理的數(shù)據(jù)庫(kù)之間的平穩(wěn)運(yùn)行。這些數(shù)據(jù),例如消息和分析,對(duì)于下游的消費(fèi)者獲得有關(guān)注冊(cè)和收入預(yù)測(cè)的見(jiàn)解來(lái)說(shuō)至關(guān)重要。
注冊(cè)流程
當(dāng)用戶開(kāi)始 Netflix 的旅程時(shí),他們就會(huì)遇到由會(huì)員系統(tǒng)驅(qū)動(dòng)的選擇計(jì)劃選項(xiàng),這個(gè)系統(tǒng)每秒處理數(shù)百萬(wàn)個(gè)請(qǐng)求。由于貨幣、定價(jià)和計(jì)劃選項(xiàng)存在地理上的差異,正確呈現(xiàn)這個(gè)頁(yè)面就變得至關(guān)重要。會(huì)員團(tuán)隊(duì)管理著這些規(guī)則,綠色方框代表會(huì)員服務(wù)的職責(zé),白色方框代表與姊妹團(tuán)隊(duì)的協(xié)作。

這個(gè)過(guò)程從選擇計(jì)劃開(kāi)始。應(yīng)用程序從會(huì)員計(jì)劃和定價(jià)服務(wù)(由 CockroachDB 提供支持)查詢所選的計(jì)劃,獲取計(jì)劃的定價(jià)細(xì)節(jié)。確認(rèn)后,點(diǎn)擊“開(kāi)始會(huì)員”,這將觸發(fā)會(huì)員狀態(tài)和歷史服務(wù)中的操作,更新相關(guān)信息(如計(jì)劃、價(jià)格級(jí)別和國(guó)家)。標(biāo)志會(huì)員激活的事件被發(fā)送出去,觸發(fā)歡迎電子郵件的消息管道,并通知下游團(tuán)隊(duì)進(jìn)行分析。盡管這個(gè)解釋很簡(jiǎn)單,但這個(gè)過(guò)程在分布式系統(tǒng)中大規(guī)模發(fā)生,需要強(qiáng)大的錯(cuò)誤處理機(jī)制。
會(huì)員團(tuán)隊(duì)的技術(shù)足跡
Netflix 運(yùn)行在一個(gè)分布式系統(tǒng)架構(gòu)上,針對(duì)高 RPS(每秒讀請(qǐng)求)進(jìn)行了優(yōu)化。他們使用 gRPC 進(jìn)行 HTTP 層通信。他們的主要編程語(yǔ)言是 JAVA,并正在過(guò)渡到使用 Kotlin 編寫(xiě)應(yīng)用程序,所有這些都與 Spring Boot 結(jié)合在一起。Kafka 在消息傳遞和與其他團(tuán)隊(duì)的通信接口中發(fā)揮重要作用,例如消息傳遞和下游分析。此外,Netflix 還在大數(shù)據(jù)方面使用了 Spark 和 Flink 進(jìn)行離線對(duì)賬任務(wù),我們將在稍后更詳細(xì)地探討。
運(yùn)維和監(jiān)控的技術(shù)選擇
除了編碼和生產(chǎn)環(huán)境部署之外,Netflix 會(huì)員工程團(tuán)隊(duì)還負(fù)責(zé)值班,及時(shí)解決關(guān)鍵故障。他們使用輕量級(jí)事務(wù),并嘗試通過(guò)使用像 Cassandra 這樣的工具確保在線系統(tǒng)的數(shù)據(jù)一致性。由 Spark 和 Kafka 提供支持的對(duì)賬作業(yè)確保了會(huì)員記錄系統(tǒng)之間的一致性,例如訂閱和會(huì)員歷史數(shù)據(jù)庫(kù)。這種準(zhǔn)確性延伸到外部系統(tǒng),保持整個(gè)生態(tài)系統(tǒng)的一致?tīng)顟B(tài)。數(shù)據(jù)警報(bào)和修復(fù)作業(yè)負(fù)責(zé)監(jiān)控和糾正不一致的地方,確保每個(gè)記錄都反映最新的信息。
在可觀察性方面,日志記錄、儀表盤(pán)和分布式跟蹤有助于快速檢測(cè)和解決錯(cuò)誤,這在 Netflix 龐大的微服務(wù)生態(tài)系統(tǒng)中扮演著至關(guān)重要的角色。生產(chǎn)警報(bào)跟蹤操作指標(biāo),確保最佳的服務(wù)水平。操作數(shù)據(jù)還為機(jī)器學(xué)習(xí)模型提供動(dòng)力,用于增強(qiáng)異常檢測(cè)和自動(dòng)問(wèn)題解決,保持會(huì)員的無(wú)間斷流媒體體驗(yàn)。
用例研究
到目前為止,我們已經(jīng)確定了 Netflix 會(huì)員工程團(tuán)隊(duì)的地位、架構(gòu)和核心運(yùn)營(yíng)流程。深入研究潛在的可改進(jìn)領(lǐng)域和未來(lái)需要做好的準(zhǔn)備至關(guān)重要。將系統(tǒng)設(shè)計(jì)比作國(guó)際象棋,要掌握它就需要理解規(guī)則和策略,并分析過(guò)去的走法以便做出改進(jìn)。
從過(guò)去中學(xué)習(xí)——Netflix 定價(jià)的技術(shù)決策
十年前,Netflix 的定價(jià)架構(gòu)非常簡(jiǎn)單,只負(fù)責(zé)一些計(jì)劃和基本功能。最開(kāi)始,一個(gè)輕量級(jí)的內(nèi)存庫(kù)就可以滿足這些需求。然而,隨著 Netflix 在全球范圍內(nèi)的擴(kuò)張和業(yè)務(wù)的多樣化,這個(gè)庫(kù)的范圍和復(fù)雜性不斷增長(zhǎng),成為了跨多個(gè)應(yīng)用程序的關(guān)鍵部分。隨著時(shí)間的推移,由于規(guī)模的增長(zhǎng)和依賴關(guān)系變得日益復(fù)雜,運(yùn)營(yíng)方面的挑戰(zhàn)逐漸出現(xiàn),因此需要過(guò)渡到更健壯的架構(gòu)。
新的架構(gòu)利用 CockroachDB 進(jìn)行持久化,并使用 gRPC 服務(wù)來(lái)處理流量。盡管簡(jiǎn)化了設(shè)計(jì),但遷移遺留庫(kù)是一項(xiàng)涉及到眾多工程團(tuán)隊(duì)和應(yīng)用程序的工作,需要花費(fèi)多年時(shí)間。這凸顯了面向未來(lái)的架構(gòu)決策和及時(shí)解決技術(shù)債務(wù)以避免付出高昂代價(jià)是多么的重要。

雖然新架構(gòu)是主要的解決方案,但舊庫(kù)的遺留組件仍然存在,需要持續(xù)進(jìn)行遷移。這凸顯了在技術(shù)過(guò)渡期間考慮長(zhǎng)期影響和主動(dòng)處理遺留系統(tǒng)的必要性。
會(huì)員歷史
對(duì)會(huì)員歷史的研究深入探討了其在 Netflix 架構(gòu)中的演變和關(guān)鍵作用。最初,會(huì)員歷史是通過(guò)應(yīng)用級(jí)事件進(jìn)行跟蹤的,但對(duì)細(xì)粒度數(shù)據(jù)的需求仍然存在。隨著 Netflix 在全球范圍內(nèi)的擴(kuò)張,會(huì)員數(shù)據(jù)的復(fù)雜性和重要性不斷增長(zhǎng),需要更健壯的解決方案。
新架構(gòu)采用了變更數(shù)據(jù)捕獲模式,直接記錄操作數(shù)據(jù)源的增量變化。這種由 Cassandra 數(shù)據(jù)庫(kù)提供支持的追加日志系統(tǒng)提供了對(duì)會(huì)員事件的全面跟蹤能力。通過(guò)集中處理會(huì)員歷史事件流,Netflix 獲得了更好的可觀察性,并能夠在系統(tǒng)間協(xié)調(diào)數(shù)據(jù)。
這種架構(gòu)的好處是多方面地。它支持調(diào)試、事件重放以及在數(shù)據(jù)損壞情況下的無(wú)縫對(duì)賬。此外,會(huì)員歷史讓客戶服務(wù)分析變得更加豐富,為下游分析、消息傳遞和會(huì)員數(shù)據(jù)系統(tǒng)提供了數(shù)據(jù)來(lái)源。
盡管實(shí)現(xiàn)這種架構(gòu)花費(fèi)了多年時(shí)間,但其回報(bào)卻是巨大的,突顯了在架構(gòu)創(chuàng)新上投入對(duì)取得長(zhǎng)期成功的重要性。
為未來(lái)做好準(zhǔn)備——會(huì)員訂閱生態(tài)系統(tǒng)的演變
最后,我們來(lái)深入探討訂閱生態(tài)系統(tǒng)的演變。最初,我們只做了基本的架構(gòu)選擇,并依靠 gRPC 服務(wù)和 Cassandra 數(shù)據(jù)庫(kù)這樣的現(xiàn)成組件來(lái)實(shí)現(xiàn)可伸縮性。然而,隨著用戶基數(shù)的增長(zhǎng),我們遇到了協(xié)調(diào)數(shù)據(jù)和容錯(cuò)性方面的挑戰(zhàn)。
為了解決這些問(wèn)題,我們實(shí)現(xiàn)了一個(gè) Spark Casspactor 來(lái)管理備份和協(xié)調(diào) Hive 表中的數(shù)據(jù),實(shí)現(xiàn)更好的審計(jì)和自我修復(fù)。雖然這提高了調(diào)試能力并消除了單點(diǎn)故障,但可伸縮性仍然是一個(gè)問(wèn)題。為了緩解這個(gè)問(wèn)題,我們正在考慮使用 EVCache 作為緩存以實(shí)現(xiàn)更快的查找,盡管在一致性方面存在一些折衷。

這里的關(guān)鍵教訓(xùn)是沒(méi)有哪個(gè)系統(tǒng)可以無(wú)限擴(kuò)展,不斷在創(chuàng)新和架構(gòu)演進(jìn)上進(jìn)行投入是關(guān)鍵,避免遭遇系統(tǒng)限制和意外停機(jī)。
總 結(jié)
從 Netflix 的定價(jià)決策中得到的關(guān)鍵教訓(xùn)是,技術(shù)選擇必須面向未來(lái),并在必要時(shí)積極調(diào)整或調(diào)整。同樣,會(huì)員歷史案例說(shuō)明了在架構(gòu)上大膽投入可能帶來(lái)潛在的巨大回報(bào),勇敢追求重大創(chuàng)新至關(guān)重要。
會(huì)員訂閱的演變是一個(gè)持續(xù)的過(guò)程。這一持續(xù)挑戰(zhàn)讓 Diwan 想起了計(jì)算機(jī)科學(xué)領(lǐng)域的一句名言:
計(jì)算機(jī)科學(xué)領(lǐng)域只有兩件難事:緩存失效和命名。
查看英文原文:
https://www.infoq.com/articles/managing-memberships-netflix/
AI 面試的“酷刑”,只有中高級(jí)管理層和 CEO 能幸免
蔡崇信反思阿里落后:我們?cè)伊俗约旱哪_;英特爾又“崩了”,虧損70億美元;華為切割“遙遙領(lǐng)先”,傳任正非下令禁止 | Q資訊
硅谷創(chuàng)業(yè)一年,賈揚(yáng)清講了自己的 AI 行業(yè)觀察:成本、市場(chǎng)增量和商業(yè)模式
新員工入職 5 年最少賺 2 億元、以前挖人現(xiàn)在撬整個(gè)團(tuán)隊(duì),AI 公司搶人大戰(zhàn)再升級(jí)!






