奈飛Netflix如何同步數以億計的裝置?

banq發表於2022-04-01

Netflix 是一種線上視訊流媒體服務,以瘋狂的規模執行,2.2 億活躍使用者從多個裝置訪問他們的 Netflix 帳戶,因此 Netflix工程師必須確保使用者登入的所有不同客戶端都是同步的。
為所有使用者在所有這些裝置之間進行同步,需要 Netflix 的後端與所有各種客戶端(iOS、Android、智慧電視、網路瀏覽器、Roku 等)之間進行大量通訊,峰值時,每秒可以處理大約 150,000 個事件。

Netflix如何為所有 2 億使用者保持使用者裝置同步?
  • Netflix 的快速事件通知系統 (RENO) 及其解決的問題
  • RENO 背後的設計決策
  • RENO的架構


RENO 
Netflix 構建了他們的快速事件通知系統 RENO,有幾個關鍵的設計決策

  1. 單一事件源——RENO 必須跟蹤的所有各種事件(檢視活動、推薦等)都來自不同的內部系統。為了簡化這一點,工程師使用了一個事件管理引擎作為間接級別。這個事件管理引擎層是 RENO 的單一事件源。來自各種後端服務的所有事件都進入事件管理引擎,然後再傳遞給 RENO。
  2. 事件優先順序 - 如果一個使用者改變了他們的設定,與其他事件相比,該事件變化應該有非常高的優先順序。因此,RENO處理的每個事件型別都有一個分配給它的優先順序,然後RENO按該事件優先順序進行分片。這樣,Netflix可以根據事件的優先順序,對系統配置和擴充套件策略進行不同的調整。
  3. 混合通訊模式--RENO必須支援移動裝置、智慧電視、瀏覽器等。雖然移動裝置幾乎總是連線到網際網路並可到達,但智慧電視只有在使用時才會線上。因此,RENO必須依靠混合推送和拉動的通訊模式,伺服器試圖用推送的方式立即向所有裝置傳送所有通知。裝置將在應用生命週期的不同階段從後端拉動。單純使用拉動是行不通的,因為它使移動應用程式過於健談,而單純使用推送在裝置關閉時是行不通的。
  4. 有針對性的交付 - RENO支援裝置特定的通知交付。如果某個通知只需要傳送到移動應用程式,RENO可以只向這些裝置傳送。這大大限制了傳出的流量足跡。
  5. 管理高RPS - 在高峰期,RENO每秒提供150,000個事件。這種高負載會給下游服務帶來壓力。Netflix通過在傳送事件前增加各種閘門檢查來處理這種高負載。一些gate檢查:
    • 舊裝置 - 許多事件都是時間敏感的,因此如果事件超過其陳舊閾值,RENO 將不會傳送事件
    • 線上裝置 - RENO 使用Zuul跟蹤當前線上的裝置。它只會在裝置線上時將事件推送到裝置。
    • 重複 - RENO 檢查任何重複的傳入事件並糾正它。


    有一個事件觸發器:事件觸發來自各種後臺服務,處理諸如電影推薦、檔案變化、觀看活動等。
    每當有任何變化,就會產生一個事件。這些事件被送到事件管理引擎。

    事件管理引擎作為一箇中介層,是RENO的單一的事件來源。
    從那裡,事件被傳遞到亞馬遜SQS佇列。這些佇列是根據事件優先順序分片的。

    AWS例項叢集將訂閱各種佇列,然後處理這些佇列的事件。它們將為所有裝置生成可操作的通知。

    然後,這些通知被髮送到Netflix的外發訊息系統。這個系統負責向所有各種裝置傳送。
    這些通知也將被髮送到Cassandra資料庫。當裝置需要拉取通知時,他們可以使用Cassandra資料庫(記住這是一個推和拉的混合通訊模式)。

    由於按事件優先順序進行分片,並可向處理叢集層新增更多的機器,它是可以橫向擴充套件的。

    詳細點選標題。

    相關文章