佳木斯湛栽影视文化发展公司

主頁 > 知識庫 > 淺析在線影視點播巨頭Netflix的信息處理架構

淺析在線影視點播巨頭Netflix的信息處理架構

熱門標簽:百度競價排名 Linux服務器 地方門戶網(wǎng)站 鐵路電話系統(tǒng) AI電銷 網(wǎng)站排名優(yōu)化 服務外包 呼叫中心市場需求

Netflix是一家在線影片租賃提供商,該公司連續(xù)五次被評為顧客最滿意的網(wǎng)站,在過去的7年中,Netflix流媒體服務從偶爾有數(shù)千用戶在線觀看發(fā)展到了數(shù)百萬用戶平均每月觀看超過20億個小時的規(guī)模。Netflix之所以能夠如此成功,離不開對用戶行為數(shù)據(jù)的收集與分析,那么Netflix會收集哪些數(shù)據(jù),這些數(shù)據(jù)會用來做什么,其處理架構又是什么呢?

事實上,當用戶開始在Netflix的網(wǎng)站上觀看電影或者電視節(jié)目的時候,Netflix的數(shù)據(jù)系統(tǒng)會創(chuàng)建一個“觀看會話(view)”,描述該會話的所有事件信息都會被收集起來。該觀看會話數(shù)據(jù)架構能夠應對從用戶體驗到數(shù)據(jù)分析的諸多場景,其中最主要的場景有三個:

用戶看了哪些視頻?系統(tǒng)需要知道每一個用戶的所有觀看歷史,以便于為用戶推薦相關的視頻內容,同時在頁面上的“最近觀看”一欄中顯示觀看歷史。用戶所看的內容對于用戶興趣的衡量,產(chǎn)品和內容的決定非常重要。
用戶從哪里離開了視頻?對于每一個電影或者電視節(jié)目,Netflix會記錄每一個用戶都看到了哪里,從哪個時間點離開的。這使得Netflix的用戶能夠在同一個或者另一個設備上繼續(xù)觀看視頻。
當前帳戶現(xiàn)在還在觀看哪些視頻?家庭成員間的帳戶共享使得任何人可以在任何時候觀看自己喜歡的視頻,但是這也意味著當帳戶同時在線數(shù)超限的時候,必須要有人放棄觀看。針對這種場景,Netflix的觀看會話數(shù)據(jù)系統(tǒng)會收集每一個會話的周期性信號以便于決定某個成員是否還在觀看相關視頻。
這些場景的實現(xiàn)離不開強大而穩(wěn)定的數(shù)據(jù)處理系統(tǒng),Netflix目前的系統(tǒng)架構由早期的單數(shù)據(jù)庫應用程序演變而來,當時的主要需求是能夠低延遲地為用戶提供視頻服務,同時還能夠處理來自于數(shù)百萬Netflix流設備的快速增長的數(shù)據(jù)集。在過去3年多的時間里,Netflix一直在不斷地改進該架構,現(xiàn)在這套系統(tǒng)每天能夠處理千億左右的事件。

當前的架構圖如下:

整個架構最主要的接口是觀看會話服務,它分為有狀態(tài)層和無狀態(tài)層兩部分。有狀態(tài)層在內存中存有所有活動視圖的最新數(shù)據(jù)。通過對用戶帳戶ID進行mod N的模運算,數(shù)據(jù)被簡單地劃分為N個有狀態(tài)的節(jié)點。當有狀態(tài)的節(jié)點上線的時候,系統(tǒng)會通過一個位置選擇流程決定哪部分數(shù)據(jù)屬于它們。所有的持久化數(shù)據(jù)都存儲在Cassandra中,在Cassandra之上有一個Memcached用來保證低延遲的讀取路徑,但是采用這種方式會話數(shù)據(jù)有可能會過時,同時如果一個有狀態(tài)的節(jié)點出現(xiàn)了錯誤,那么1/n的瀏覽數(shù)據(jù)將不能讀寫。無狀態(tài)層的引入正是為了解決這一問題,它提升了系統(tǒng)的可用性,當有狀態(tài)的節(jié)點無法訪問的時候,該層會將過時的數(shù)據(jù)反饋給用戶。

但是即使是做了諸多改進,以上架構依然存在一些缺陷:

雖然有狀態(tài)層使用一個簡單的、服從熱點分布的分片技術,但是Cassandra層并不服從這些熱點;同時,如果將其從一個AWS Region移動到多個AWS Region上運行,那么必須定制一種機制來實現(xiàn)分布在不同Region上的狀態(tài)層之間的狀態(tài)通信,極大地增加了系統(tǒng)的復雜性。
對于觀看會話服務,它封裝了會話數(shù)據(jù)的收集、處理和提供功能,隨著系統(tǒng)的演變,功能的增多,該服務的責任也越來越多,增加了運維的難度。
雖然Memcached提供了非常好的吞吐量和延遲特性,但是使用一種能夠為一等數(shù)據(jù)類型和操作(例如append)提供原生支持的技術能夠更好地滿足相關需求。
為了擴展系統(tǒng)滿足下一個數(shù)量級的需要,Netflix正在重新思考自己的基礎架構,新系統(tǒng)在設計時考慮的主要設計原則包括:

可用性比一致性更重要。
微服務。對于有狀態(tài)架構中柔和在一起的組件,根據(jù)它們的主要目的分離成單獨的服務——或收集、處理或提供數(shù)據(jù)。將狀態(tài)管理功能托管到持久化層,讓應用程序層無狀態(tài),同時組件之間通過事件隊列解耦。
混合持久化。使用多種持久化技術,利用每一種方案的優(yōu)勢。使用Cassandra實現(xiàn)高容量、低延遲的寫。使用Redis實現(xiàn)高容量、低延遲的讀。
遵循以上原則的新架構實現(xiàn)如下:

當然,這個架構圖也僅僅是Netflix目前的設計圖,至于實現(xiàn)到何種程度了,我們還未可知。Netflix表示對關鍵系統(tǒng)進行重新架構以使其能夠擴展到下一個數(shù)量級是一項非常困難的工作,需要長時間的開發(fā)、測試和驗證,同時遷移也不是那么容易。但是以這些架構原則為指導,Netflix相信他們正在構建的下一代系統(tǒng)能夠滿足自己大規(guī)模、快速增長的需要。

標簽:銅川 崇左 衡水 湖南 仙桃 蘭州 湘潭 黃山

巨人網(wǎng)絡通訊聲明:本文標題《淺析在線影視點播巨頭Netflix的信息處理架構》,本文關鍵詞  ;如發(fā)現(xiàn)本文內容存在版權問題,煩請?zhí)峁┫嚓P信息告之我們,我們將及時溝通與處理。本站內容系統(tǒng)采集于網(wǎng)絡,涉及言論、版權與本站無關。
  • 相關文章
  • 收縮
    • 微信客服
    • 微信二維碼
    • 電話咨詢

    • 400-1100-266
    松滋市| 观塘区| 镇沅| 文昌市| 广汉市| 资中县| 通城县| 霞浦县| 洛宁县| 东辽县| 军事| 元谋县| 永泰县| 石林| 建始县| 东辽县| 道孚县| 松滋市| 台北县| 高平市| 乐业县| 綦江县| 临猗县| 开平市| 商南县| 西青区| 麦盖提县| 乌兰察布市| 重庆市| 长春市| 苏尼特右旗| 龙南县| 靖江市| 奈曼旗| 馆陶县| 西安市| 永吉县| 盐边县| 手游| 涟水县| 鹤庆县|