<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Netflix基于AWS架構(gòu)體系

          共 3215字,需瀏覽 7分鐘

           ·

          2022-04-10 18:05

          Netflix是世界最大的收費(fèi)視頻網(wǎng)站,其整個架構(gòu)體系都是搭建在AWS之上,可以看做是一個云原生架構(gòu)。

          同時相信大家都聽過SpringCloud體系下的一大撮Netflix相關(guān)的微服務(wù)組件,而了解Netflix是如何使用這些組件,對于進(jìn)一步掌握這些組件也很有必要。

          先全局看下Netflix架構(gòu):


          架構(gòu)主要包含三部分:

          1. Open Connect(Netflix CDN);

          2. 后臺;

          3. 客戶端;

          客戶端:定義為播放 Netflix 適配的用戶界面,如 TV、XBox、筆記本、智能手機(jī)。用戶點(diǎn)擊播放之后,任何功能都由 CDN 實現(xiàn)。

          CND:是分布式服務(wù)器系統(tǒng),根據(jù)用戶地理位置,網(wǎng)頁、服務(wù)器的起點(diǎn)。當(dāng) Netflix 的視頻被轉(zhuǎn)碼后,CDN 將 Netflix 視頻存儲到世界各地。

          視頻播放流程

          當(dāng)用戶打開Netflix應(yīng)用時,所有的請求都是由AWS來完成。譬如登錄,推薦,主頁,用戶歷史記錄和客服等。當(dāng)用戶點(diǎn)擊視頻的播放按鈕,Netflix應(yīng)用會自動判定最佳的Open Connect服務(wù)器,最好的格式和比特率,以便讓視頻從附近的OCA流暢地傳出。Netflix應(yīng)用相當(dāng)?shù)闹悄?,它能不間斷地尋找流媒體服務(wù)器和比特率,并自動替換到能為用戶帶來更好體驗的服務(wù)器。

          ELB

          Netflix對ELB進(jìn)行如下設(shè)置:首先是區(qū)域間的負(fù)載平衡,然后是實例間的負(fù)載平衡。這是因為ELB的設(shè)置是有兩級負(fù)載平衡方案:

          1. 基于域名服務(wù)的循環(huán)負(fù)載平衡;

          2. 同一區(qū)域內(nèi)多個負(fù)載實例平衡;

          ZUUL

          作為邊緣應(yīng)用網(wǎng)關(guān),將所有設(shè)備、網(wǎng)站請求導(dǎo)向后臺的流媒體服務(wù)。

          Zuul 實現(xiàn)了動態(tài)路由、監(jiān)控、彈性、安全。(基于 Netty 實現(xiàn))。

          Hystris

          延遲與容錯代碼庫,可以防止級聯(lián)錯誤、實時監(jiān)控配置變動、基于并行請求緩存、基于請求崩潰自動批處理。

          媒體處理

          Netflix花費(fèi)很多時間驗證視頻。視頻驗證包括查找數(shù)字工件,顏色變化,由于前面轉(zhuǎn)碼步驟的數(shù)據(jù)丟失造成的幀丟失。在視頻被驗證后,就會被送入Netflix稱作的媒體管道。處理幾兆尺寸的一個文件并不現(xiàn)實,所以管道的第一步是把一個文件分割成若干個小塊。接下來視頻塊被接通到管道,這樣編碼會并行處理。

          Archer

          Archer是具有映射-規(guī)約風(fēng)格的媒體處理平臺。Archer使用容器,這使得用戶能夠處理操作系統(tǒng)級別的依賴性。該平臺可以進(jìn)行通常的媒體處理步驟。開發(fā)人員需要寫三個功能:分離,映射,收集。任何編程語言都可以使用。Archer創(chuàng)建的目的就是大規(guī)模進(jìn)行簡單媒體處理。這意味著平臺知道媒體格式,并給予流行媒體模式優(yōu)先處理。

          微服務(wù)

          Netflix使用微服務(wù)架構(gòu)來驅(qū)動所有的APIs。每個API調(diào)用其他的微服務(wù)來獲取所需的數(shù)據(jù)和提供響應(yīng)??煽啃匀绾螌崿F(xiàn)呢?一是以來Hystris,第二是分離關(guān)鍵服務(wù)。

          關(guān)鍵微服務(wù)

          依照Netflix的設(shè)計,當(dāng)遇到級聯(lián)失敗時,至少用戶還可以點(diǎn)擊并播放推薦的視頻。實現(xiàn)這一功能的微服務(wù)被稱為關(guān)鍵微服務(wù)。關(guān)鍵微服務(wù)對其它服務(wù)沒有很多依賴性。

          無狀態(tài)服務(wù)

          Netflix的一個設(shè)計目標(biāo)是無狀態(tài)服務(wù)。也就是說任一服務(wù)器失敗的話都無關(guān)緊要。在失敗的情況下請求可以被路由到另外一服務(wù)實例,或者啟動一個新的服務(wù)器來取代失敗的服務(wù)器。

          有狀態(tài)服務(wù),數(shù)據(jù)庫(部署在EC2上的MySQL)

          有狀態(tài)信息主要通過MySql存儲。基于主機(jī)的“同步復(fù)制協(xié)議”,確保主機(jī)上寫操作完成的定義是寫操作在主機(jī)和遠(yuǎn)程終端都完成。單個節(jié)點(diǎn)的數(shù)據(jù)丟失不會造成數(shù)據(jù)的丟失。ETL工作的讀流量被導(dǎo)向讀操作副本,以便于主數(shù)據(jù)庫免于繁重的批處理操作。在主數(shù)據(jù)庫失敗的情況下,故障轉(zhuǎn)移會在已經(jīng)有了復(fù)制的次節(jié)點(diǎn)上進(jìn)行。當(dāng)次節(jié)點(diǎn)能夠勝任主數(shù)據(jù)庫的工作時,route53上DNS的條目就會指向新的次節(jié)點(diǎn)。

          KV緩存

          當(dāng)一個節(jié)點(diǎn)失敗后,節(jié)點(diǎn)上的緩存也會跟著失敗,這樣就會有性能損失,除非所有數(shù)據(jù)都有緩存。Netflix的解決方案是使用KV緩存,一個基于Memcached的封裝。不是簡單的封裝,是有冗余度的分片集群。在存操作時,所有的分片都被更新。在讀操作的情況下,是從最近的緩存或節(jié)點(diǎn)讀取數(shù)據(jù)。當(dāng)最近的節(jié)點(diǎn)失敗,則會從其它的節(jié)點(diǎn)讀取。KV緩存每天能夠處理三千萬的請求,并具有毫秒級的線性擴(kuò)展性。

          Cassandra

          Cassandra用來存儲用戶的閱讀歷史數(shù)據(jù)的。Netflix的Cassandra集群也經(jīng)歷了重新設(shè)計。重新設(shè)計的理念是:更小的存儲,在用戶閱讀量增加情況下的一致的讀寫性能。對應(yīng)的解決方案就是:

          1. 壓縮舊的數(shù)據(jù)。

          2. 數(shù)據(jù)被分成兩類。

          實時閱讀歷史(LiveVH):頻繁被更新的少量的最近閱讀的數(shù)據(jù),這部分?jǐn)?shù)據(jù)未被壓縮的形式存儲。

          壓縮閱讀歷史(CompressedVH):很少被更新的大量的舊的閱讀數(shù)據(jù),這部分?jǐn)?shù)據(jù)被壓縮以減少存儲空間。壓縮閱讀歷史被存儲在基于行密匙的單個列里。

          Apache Chukwa

          一個開源的監(jiān)控大規(guī)模分布式系統(tǒng)的數(shù)據(jù)采集系統(tǒng)。基于Hadoop HDFS和映射-規(guī)約架構(gòu)。其繼承了Hadoop的可擴(kuò)展性和穩(wěn)健性。Apache Chukwa還包含功能強(qiáng)大的顯示、監(jiān)控、分析功能。Kafka的路由服務(wù)負(fù)責(zé)把數(shù)據(jù)從Kafka 的前端移動到不同的目標(biāo)節(jié)點(diǎn):也就是S3、Elasticsearch、次級Kafka。這個路由服務(wù)叫Apache Samza。當(dāng)Chukwa把流量發(fā)給Kafka,既可以是全部數(shù)據(jù)流,也可以是過濾流。

          Elastic Search

          Elastic search在Netflix被越來越廣泛的應(yīng)用。如一個用戶想要播放一個視頻但卻沒有成功,該用戶向客服反饋??头ㄟ^elastic search來查詢數(shù)據(jù)(日志)來深入研究問題出在哪里,并給與用戶反饋。

          AWS應(yīng)用自動縮放功能 - TITUS

          Titus的目的是快速啟動可靠的部署應(yīng)用程序?qū)?yīng)的容器。

          主要目的如下:

          • 允許容器化的應(yīng)用與AWS,Netflix個其它云服務(wù)無縫連接;

          • 可操作性上能夠保證系統(tǒng)能運(yùn)行關(guān)鍵任務(wù)載荷和SLA;

          • 可擴(kuò)展性上保證成千上萬的主機(jī)上能夠運(yùn)行成千上萬個容器,來實現(xiàn)眾多的運(yùn)行實例;

          Titus是一個基于Apache Mesos開發(fā)的框架,是連接眾多主機(jī)資源的集群管理系統(tǒng)。

          1. Titus包括一個可復(fù)制的,提供領(lǐng)導(dǎo)選擇的調(diào)度器。該調(diào)度器叫做Titus Master。

          2. Titus Master負(fù)責(zé)將容器實例放置到EC2虛擬機(jī)的一個大池子里。該EC2虛擬機(jī)亦叫Titus Agents,負(fù)責(zé)管理單個容器的生命周期。

          3. Zookeeper管理領(lǐng)導(dǎo)選擇,Cassandra存儲Titus Master的數(shù)據(jù)。

          Titus的主要功能是實現(xiàn)容器的自動縮放。

          自動縮放是怎樣工作的呢?例如,一個用戶在東岸打開Netflix,Netflix 的服務(wù)自動擴(kuò)大業(yè)務(wù)的服務(wù)實例來滿足該用戶的視頻需求。

          功能實現(xiàn)是基于AWS自動縮放引擎實現(xiàn)的。其能夠計算一個Titus服務(wù)的期望容量,把容量信息傳遞給Titus,從而使得Titus能夠根據(jù)容量來啟動或停止容器來調(diào)整實例載荷。

          該方案有幾個優(yōu)勢:

          第一,充分利用經(jīng)過檢驗的AWS自動縮放引擎。

          第二,Titus用戶可以使用已經(jīng)熟悉的EC2。

          第三,應(yīng)用能夠縮放自己的指標(biāo)(譬如每秒請求和容器CPU利用率)和AWS的指標(biāo)(譬如SQS隊列深度)。

          第四,用戶能夠從AWS對自動縮放的完善中獲益。

          Titus的一個大的挑戰(zhàn)是啟動AWS自動縮放引擎調(diào)用Titus控制平臺。為了解決這個問題,Netflix充分利用AWS的API網(wǎng)關(guān)。

          AWS的API網(wǎng)關(guān)是一個提供API訪問的服務(wù),同時也提供了后臺服務(wù)來調(diào)用Titus。

          API網(wǎng)關(guān)提供了供AWS訪問的API,以調(diào)整資源載荷和載荷狀態(tài),以便后臺實現(xiàn)可擴(kuò)展的資源。當(dāng)Titus服務(wù)配置了自動縮放策略,Titus便在AWS上創(chuàng)建了一個可縮放目標(biāo)。

          完。希望對你有用。

          瀏覽 149
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  欧美VA亚洲VA日韩vA | 成人性爱网站在线免费观看 | 亚洲骚B 亚洲色8 | 久久国产乱子伦免费精品 | 大香焦在线999 |