作者 | Surabhi Diwan
譯者 | 明知山
策劃 | Tina
她首先介紹了 Netflix 在十年前做出的一些定價(jià)和技術(shù)選擇,那是在她任職 Netflix 之前。然后,她轉(zhuǎn)到會(huì)員歷史記錄的用例研究,這是第二個(gè)持久存儲(chǔ),可以知道任何一個(gè)人的訂閱所做的任意細(xì)粒度的變更。
“我相信你們大多數(shù)人都是 Netflix 的會(huì)員。如果不是的話,我將會(huì)在深入討論這個(gè)問題時(shí)向你們展示如何注冊。最后,我將嘗試回答一個(gè)問題:訂閱生態(tài)系統(tǒng)的演變是怎樣的?它有 2.38 億訂閱者。真的,這個(gè)過程會(huì)是怎樣的?如果你要再增加 500 萬訂閱者會(huì)是什么樣子?如果你要再增加 100 萬呢?”
會(huì)員系統(tǒng)工程
會(huì)員團(tuán)隊(duì)對會(huì)員系統(tǒng)的主要關(guān)注點(diǎn)在于 Netflix 的注冊和流媒體這一關(guān)鍵路徑。他們負(fù)責(zé)一系列不同的微服務(wù),而在會(huì)員這一塊總有幾十個(gè)。他們的中間層服務(wù)確保用戶可以無間斷訪問,承若四個(gè) 9 的可用性,直接影響著注冊流程和流媒體體驗(yàn)。
這些服務(wù)處理大量的流量,根據(jù)具體的用例,例如訂閱或定價(jià),可以擴(kuò)展到每秒處理數(shù)百萬個(gè)請求。會(huì)員團(tuán)隊(duì)討論了他們的技術(shù)決策,利用現(xiàn)成的技術(shù)來實(shí)現(xiàn)可伸縮性和可靠性。他們作為全球會(huì)員數(shù)據(jù)的權(quán)威來源,為 Netflix 的內(nèi)外部下游分析提供了便利。簡言之,他們以精確的方式應(yīng)對規(guī)?;膹?fù)雜的分布式挑戰(zhàn)。
此外,會(huì)員團(tuán)隊(duì)還負(fù)責(zé)管理 Netflix 的計(jì)劃和定價(jià)目錄,盡管它非常簡單——基本會(huì)員、標(biāo)準(zhǔn)會(huì)員、高級(jí)會(huì)員——但在用戶體驗(yàn)中起著至關(guān)重要的作用。他們優(yōu)先考慮訂閱詳情的準(zhǔn)確性,確保正確的選擇計(jì)劃、賬單國家和支付狀態(tài),確保服務(wù)質(zhì)量和會(huì)員滿意度。
他們管理著整個(gè)會(huì)員生命周期——注冊、合作伙伴渠道整合、計(jì)劃變更、續(xù)訂和賬戶關(guān)閉。他們的職責(zé)包括處理支付問題(包括賬戶保持和取消)以及在整個(gè)會(huì)員過程中適當(dāng)管理客戶數(shù)據(jù)來確保數(shù)據(jù)隱私合規(guī)性。
會(huì)員何時(shí)使用我們的流程?
這是我的團(tuán)隊(duì)所涉及的流程。我想,作為最終用戶,如果你現(xiàn)在打開 Netflix 應(yīng)用,你會(huì)關(guān)注這些東西。
流程突出了關(guān)鍵的用戶交互,例如加入成為會(huì)員和播放按鈕,這些按鈕將觸發(fā)由 Netflix 會(huì)員工程團(tuán)隊(duì)管理的后端流程。流程圖畫出了在用戶開始觀看流媒體之前確保無縫會(huì)員體驗(yàn)的各種服務(wù)。播放按鈕直接與會(huì)員系統(tǒng)交互,根據(jù)用戶選擇的計(jì)劃確定服務(wù)質(zhì)量。由于每天會(huì)啟動(dòng)數(shù)十億次的流媒體,這種交互產(chǎn)生了最高的流量。此外,賬戶頁面上的用戶操作,例如計(jì)劃變更或管理其他會(huì)員,也由會(huì)員服務(wù)提供支持。合作伙伴注冊,例如 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ù)庫支持計(jì)劃定價(jià)和代碼兌換,特別是在送禮的高峰期。會(huì)員定價(jià)服務(wù)為會(huì)員行為提供支持,例如計(jì)劃變更和添加額外的會(huì)員。
合作伙伴互動(dòng)由專門的微服務(wù)負(fù)責(zé)處理,這些微服務(wù)負(fù)責(zé)捆綁包的激活和注冊,包括與平臺(tái)(如蘋果的應(yīng)用商店)集成實(shí)現(xiàn)訂閱注冊。會(huì)員數(shù)據(jù)存儲(chǔ)在 Cassandra 數(shù)據(jù)庫中,為超過 2.38 億活躍會(huì)員的訂閱服務(wù)和歷史跟蹤提供支持。
會(huì)員團(tuán)隊(duì)的關(guān)注點(diǎn)不僅限于當(dāng)前的會(huì)員,還包括之前的會(huì)員和會(huì)員的重新加入。他們通過會(huì)員狀態(tài)和會(huì)員維持服務(wù)來管理會(huì)員狀態(tài),確保使用 Casspactor 和 Apache Spark 等工具進(jìn)行大數(shù)據(jù)處理的數(shù)據(jù)庫之間的平穩(wěn)運(yùn)行。這些數(shù)據(jù),例如消息和分析,對于下游的消費(fèi)者獲得有關(guān)注冊和收入預(yù)測的見解來說至關(guān)重要。
注冊流程
當(dāng)用戶開始 Netflix 的旅程時(shí),他們就會(huì)遇到由會(huì)員系統(tǒng)驅(qū)動(dòng)的選擇計(jì)劃選項(xiàng),這個(gè)系統(tǒng)每秒處理數(shù)百萬個(gè)請求。由于貨幣、定價(jià)和計(jì)劃選項(xiàng)存在地理上的差異,正確呈現(xiàn)這個(gè)頁面就變得至關(guān)重要。會(huì)員團(tuán)隊(duì)管理著這些規(guī)則,綠色方框代表會(huì)員服務(wù)的職責(zé),白色方框代表與姊妹團(tuán)隊(duì)的協(xié)作。
這個(gè)過程從選擇計(jì)劃開始。應(yīng)用程序從會(huì)員計(jì)劃和定價(jià)服務(wù)(由 CockroachDB 提供支持)查詢所選的計(jì)劃,獲取計(jì)劃的定價(jià)細(xì)節(jié)。確認(rèn)后,點(diǎn)擊“開始會(huì)員”,這將觸發(fā)會(huì)員狀態(tài)和歷史服務(wù)中的操作,更新相關(guān)信息(如計(jì)劃、價(jià)格級(jí)別和國家)。標(biāo)志會(huì)員激活的事件被發(fā)送出去,觸發(fā)歡迎電子郵件的消息管道,并通知下游團(tuán)隊(duì)進(jìn)行分析。盡管這個(gè)解釋很簡單,但這個(gè)過程在分布式系統(tǒng)中大規(guī)模發(fā)生,需要強(qiáng)大的錯(cuò)誤處理機(jī)制。
會(huì)員團(tuán)隊(duì)的技術(shù)足跡
Netflix 運(yùn)行在一個(gè)分布式系統(tǒng)架構(gòu)上,針對高 RPS(每秒讀請求)進(jìn)行了優(yōu)化。他們使用 gRPC 進(jìn)行 HTTP 層通信。他們的主要編程語言是 JAVA,并正在過渡到使用 Kotlin 編寫應(yīng)用程序,所有這些都與 Spring Boot 結(jié)合在一起。Kafka 在消息傳遞和與其他團(tuán)隊(duì)的通信接口中發(fā)揮重要作用,例如消息傳遞和下游分析。此外,Netflix 還在大數(shù)據(jù)方面使用了 Spark 和 Flink 進(jìn)行離線對賬任務(wù),我們將在稍后更詳細(xì)地探討。
運(yùn)維和監(jiān)控的技術(shù)選擇
除了編碼和生產(chǎn)環(huán)境部署之外,Netflix 會(huì)員工程團(tuán)隊(duì)還負(fù)責(zé)值班,及時(shí)解決關(guān)鍵故障。他們使用輕量級(jí)事務(wù),并嘗試通過使用像 Cassandra 這樣的工具確保在線系統(tǒng)的數(shù)據(jù)一致性。由 Spark 和 Kafka 提供支持的對賬作業(yè)確保了會(huì)員記錄系統(tǒng)之間的一致性,例如訂閱和會(huì)員歷史數(shù)據(jù)庫。這種準(zhǔn)確性延伸到外部系統(tǒng),保持整個(gè)生態(tài)系統(tǒng)的一致狀態(tài)。數(shù)據(jù)警報(bào)和修復(fù)作業(yè)負(fù)責(zé)監(jiān)控和糾正不一致的地方,確保每個(gè)記錄都反映最新的信息。
在可觀察性方面,日志記錄、儀表盤和分布式跟蹤有助于快速檢測和解決錯(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)異常檢測和自動(dòng)問題解決,保持會(huì)員的無間斷流媒體體驗(yàn)。
用例研究
到目前為止,我們已經(jīng)確定了 Netflix 會(huì)員工程團(tuán)隊(duì)的地位、架構(gòu)和核心運(yùn)營流程。深入研究潛在的可改進(jìn)領(lǐng)域和未來需要做好的準(zhǔn)備至關(guān)重要。將系統(tǒng)設(shè)計(jì)比作國際象棋,要掌握它就需要理解規(guī)則和策略,并分析過去的走法以便做出改進(jìn)。
從過去中學(xué)習(xí)——Netflix 定價(jià)的技術(shù)決策
十年前,Netflix 的定價(jià)架構(gòu)非常簡單,只負(fù)責(zé)一些計(jì)劃和基本功能。最開始,一個(gè)輕量級(jí)的內(nèi)存庫就可以滿足這些需求。然而,隨著 Netflix 在全球范圍內(nèi)的擴(kuò)張和業(yè)務(wù)的多樣化,這個(gè)庫的范圍和復(fù)雜性不斷增長,成為了跨多個(gè)應(yīng)用程序的關(guān)鍵部分。隨著時(shí)間的推移,由于規(guī)模的增長和依賴關(guān)系變得日益復(fù)雜,運(yùn)營方面的挑戰(zhàn)逐漸出現(xiàn),因此需要過渡到更健壯的架構(gòu)。
新的架構(gòu)利用 CockroachDB 進(jìn)行持久化,并使用 gRPC 服務(wù)來處理流量。盡管簡化了設(shè)計(jì),但遷移遺留庫是一項(xiàng)涉及到眾多工程團(tuán)隊(duì)和應(yīng)用程序的工作,需要花費(fèi)多年時(shí)間。這凸顯了面向未來的架構(gòu)決策和及時(shí)解決技術(shù)債務(wù)以避免付出高昂代價(jià)是多么的重要。
雖然新架構(gòu)是主要的解決方案,但舊庫的遺留組件仍然存在,需要持續(xù)進(jìn)行遷移。這凸顯了在技術(shù)過渡期間考慮長期影響和主動(dòng)處理遺留系統(tǒng)的必要性。
會(huì)員歷史
對會(huì)員歷史的研究深入探討了其在 Netflix 架構(gòu)中的演變和關(guān)鍵作用。最初,會(huì)員歷史是通過應(yīng)用級(jí)事件進(jìn)行跟蹤的,但對細(xì)粒度數(shù)據(jù)的需求仍然存在。隨著 Netflix 在全球范圍內(nèi)的擴(kuò)張,會(huì)員數(shù)據(jù)的復(fù)雜性和重要性不斷增長,需要更健壯的解決方案。
新架構(gòu)采用了變更數(shù)據(jù)捕獲模式,直接記錄操作數(shù)據(jù)源的增量變化。這種由 Cassandra 數(shù)據(jù)庫提供支持的追加日志系統(tǒng)提供了對會(huì)員事件的全面跟蹤能力。通過集中處理會(huì)員歷史事件流,Netflix 獲得了更好的可觀察性,并能夠在系統(tǒng)間協(xié)調(diào)數(shù)據(jù)。
這種架構(gòu)的好處是多方面地。它支持調(diào)試、事件重放以及在數(shù)據(jù)損壞情況下的無縫對賬。此外,會(huì)員歷史讓客戶服務(wù)分析變得更加豐富,為下游分析、消息傳遞和會(huì)員數(shù)據(jù)系統(tǒng)提供了數(shù)據(jù)來源。
盡管實(shí)現(xiàn)這種架構(gòu)花費(fèi)了多年時(shí)間,但其回報(bào)卻是巨大的,突顯了在架構(gòu)創(chuàng)新上投入對取得長期成功的重要性。
為未來做好準(zhǔn)備——會(huì)員訂閱生態(tài)系統(tǒng)的演變
最后,我們來深入探討訂閱生態(tài)系統(tǒng)的演變。最初,我們只做了基本的架構(gòu)選擇,并依靠 gRPC 服務(wù)和 Cassandra 數(shù)據(jù)庫這樣的現(xiàn)成組件來實(shí)現(xiàn)可伸縮性。然而,隨著用戶基數(shù)的增長,我們遇到了協(xié)調(diào)數(shù)據(jù)和容錯(cuò)性方面的挑戰(zhàn)。
為了解決這些問題,我們實(shí)現(xiàn)了一個(gè) Spark Casspactor 來管理備份和協(xié)調(diào) Hive 表中的數(shù)據(jù),實(shí)現(xiàn)更好的審計(jì)和自我修復(fù)。雖然這提高了調(diào)試能力并消除了單點(diǎn)故障,但可伸縮性仍然是一個(gè)問題。為了緩解這個(gè)問題,我們正在考慮使用 EVCache 作為緩存以實(shí)現(xiàn)更快的查找,盡管在一致性方面存在一些折衷。
這里的關(guān)鍵教訓(xùn)是沒有哪個(gè)系統(tǒng)可以無限擴(kuò)展,不斷在創(chuàng)新和架構(gòu)演進(jìn)上進(jìn)行投入是關(guān)鍵,避免遭遇系統(tǒng)限制和意外停機(jī)。
總 結(jié)
從 Netflix 的定價(jià)決策中得到的關(guān)鍵教訓(xùn)是,技術(shù)選擇必須面向未來,并在必要時(shí)積極調(diào)整或調(diào)整。同樣,會(huì)員歷史案例說明了在架構(gòu)上大膽投入可能帶來潛在的巨大回報(bào),勇敢追求重大創(chuàng)新至關(guān)重要。
會(huì)員訂閱的演變是一個(gè)持續(xù)的過程。這一持續(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 能幸免
蔡崇信反思阿里落后:我們砸了自己的腳;英特爾又“崩了”,虧損70億美元;華為切割“遙遙領(lǐng)先”,傳任正非下令禁止 | Q資訊
硅谷創(chuàng)業(yè)一年,賈揚(yáng)清講了自己的 AI 行業(yè)觀察:成本、市場增量和商業(yè)模式
新員工入職 5 年最少賺 2 億元、以前挖人現(xiàn)在撬整個(gè)團(tuán)隊(duì),AI 公司搶人大戰(zhàn)再升級(jí)!