​雲中奈飛(一):Netflix的上雲之旅

SammyLiu發表於2020-05-30

作者按: 

Netflix(譯為奈飛/網飛)公司自1997年創立以來,已發展成為美國最大的網際網路流媒體服務商。它從2008到2015年間長達七年的將其所有IT系統從自有資料中心遷移到AWS之上的旅程,在當時可謂前無古人的創舉,對公有云的發展、傳統企業上雲及基於雲的業務轉型等都有很大的推動和促進作用。雖然已過去多年,有些東西已略微顯得過時,但奈飛上雲的理念、步驟、做法等,對當今企業上雲及用雲仍有很大的參考價值。 

因此,在接下來的幾周內,筆者打算花上些許時間,對奈飛的上雲之旅,及其雲上執行,基於網上公開資料,從上雲歷程、雲上架構、支撐團隊、雲上安全等維度做下梳理和總結,形成系列文章。它山之石,可以攻玉。本文為這系列文章的第一篇,介紹奈飛的總體上雲歷程。

 

本文目錄

零、公司簡介....................................... 1

一、發端.............................................. 4

二、驗證.............................................. 6

三、進行.............................................. 8

四、完成.............................................. 11 

 

零、公司簡介

 

 

Netflix(https://www.netflix.com/)公司總部設在美國加利福尼亞州,是全世界最大的視訊流媒體平臺,在除中國大陸地區以外的所有國家和地區均提供視訊點播服務,相當於國內的愛奇藝、優酷和騰訊視訊等視訊網站。 

1997年,當Reed Hastings和Marc Randolph建立 Netflix時,這家公司唯一業務是DVD郵購業務。2002年上市,股票發行價為15美元;2007年開始發展流媒體業務;2013年,釋出其首部原創電視劇《紙牌屋》;2016年宣佈全球化,全世界200多個國家和地區可訂閱Netflix觀看電影電視劇。 2017年,Netflix使用者數量超過美國有線電視使用者總數。如今,Netflix的股價是419美元,已成為世界上大型的電視劇和電影製片公司之一、美國最大的網際網路流媒體服務商,在世界範圍內擁有很強的影響力,高峰時刻佔據了網際網路流媒體流量的33%。 

 

除了商業上非常成功外,Netflix在技術上也非常成功,它雖然是家娛樂公司,但實際上是一家技術公司。從2008年開始,直到2015年底,它花了整整七年時間,把公司整套IT系統搬到了AWS上。這可謂前無來者。除此之外,Netflix在分散式系統開源上具有巨大的影響力,其開源專案叫做Netflix OSS(Open Source Software),涵蓋範圍基本包括了業界絕大部分分散式系統領域,包括但不限於: 

·       公共執行時服務及庫,比如Eureka, Ribbon, Hystrix

·       大資料,比如Genie

·       構建和釋出工具,比如Asgard/Spinnaker

·       資料持久化,比如EVCache

·       可觀察性、可靠性和效能,比如Simian Army 

 

一、發端

 

Netflix的上雲之旅始於2008年8月。從公開資料來看,當時主要有兩個驅動力促使其上雲: 

(1)發生了系統當機。 

當時,Netflix的IT系統執行在高階昂貴的IBM伺服器、Oracle資料庫和SAN儲存搭建的平臺之上。某次,因為SAN儲存硬體故障導致的資料庫當機,使得Netflix的DVD配送服務不得不停止了3天。這個故障使得公司管理層開始意識到,由IT團隊利用昂貴的平臺來保證系統可用性的做法存在問題,更應該從應用層面去保障系統可用性。因此,需考慮IT系統從傳統垂直擴充套件的帶有單點故障的架構,轉向高可用、水平擴充套件的分散式架構。與此同時,他們開始思考是否可以利用剛剛出現的低成本雲基礎設施來替代昂貴傳統IT基礎設施來支撐需具備高可用性的應用。

 

 

(2)新業務帶來巨大資料中心擴容壓力。 

Netflix的傳統DVD寄送服務的服務模式下,客戶瀏覽Netflix網站選擇DVD,然後公司開始寄送。因為受到DVD來回寄送速度的限制,通常是以周為週期給客戶寄送DVD。因此,這種傳統業務模式對IT系統的業務壓力較輕。 

傳統DVD寄送業務模式

 

儘管DVD業務增長迅速,但2007年Netflix仍然決定推出第一款流媒體產品“Watch Now”來革新其業務。這種業務也是它後來蓬勃發展的關鍵因素之一。這種新服務模式下,使用者與Netflix網站之間的互動頻率是傳統DVD寄送業務下互動頻率的100倍甚至不止。 

流媒體服務模式

 

新模式下,使用者每週看的視訊數量是之前的十倍,而每個視訊對資料中心中的IT系統產生的流量則是百倍,因此每個使用者對IT系統產生的流量是之前的千倍。也就是說,只要0.1%的使用者從傳統模式轉向新模式,那IT系統的容量就必須翻倍。其實這種規律也很常見。即使使用者並沒有顯著增長,只要因為業務模式的變化,對IT系統的壓力也可能成倍增加。 

這就要求Netflix找到一種快速擴容資料中心的方法,因為根據當時的業務預測,其使用者很快就會轉向線上流媒體服務模式。時間來到2009年,隨著新業務的發展,Netflix面臨兩個選擇:自建資料中心,或利用其業務競爭對手亞馬遜於2006年才釋出的AWS雲。前者需要大量前期資金投入,並且未來的容量需求無法預測且是變化不定的,而後者則是在視訊流領域的最大競爭對手Amazon的雲上開展業務。Netflix決定選擇後者。他們認為,相比在不實際產生業務價值的資料中心上做前期巨大投入,將資金投入在視訊內容和開發人員身上會更有價值。

 

 

二、驗證

於是這一年(2009年),Netflix開始研究利用AWS雲來開展業務的各種風險,包括業務競爭風險、規模性風險、商業風險和公關風險等。就業務競爭風險,Netflix與AWS溝融了AWS是如何與Amazon Premier做業務分離的。然後開展實驗去驗證AWS上的資源快速擴容能力。Netflix還與AWS簽訂了首批企業許可協議,這種協議下Netflix不需要通過授權信用卡方式來使用AWS資源,而信用卡授權是當時大多數人在AWS上消費時使用的主要方式。 

隨著兩家合作訊息的傳開,2010年4月,紐約時報還發表了一篇關於Netflix和AWS業務的文章,說兩者將進行業務合作。請注意其中的“peculiar(特有)“一詞,表示那時候企業上雲是新聞,而上到競爭對手的雲上更是新聞。 

 

當時Netflix還諮詢了一些業界專家,專家們認為這種做法非常瘋狂,因為當時很少有企業這麼做,而且企業業務上雲在當時還是一個非常不成熟的策略。但Netflix決定堅持下去,成為首批上雲企業客戶之一。 

接下來,Netflix實驗性地將一些沒有真正面向客戶的應用遷移到AWS上。首先從電影編碼開始,當時其只有資料中心沒有足夠的容量來容納編碼伺服器。有一次Netflix申請3000臺伺服器,結果AWS一個小時內就交付了,這就驗證AWS資源交付的彈性和及時性。而且隨著這項工作的完成,不用的機器即被釋放,這證明了雲端計算的“按需使用和付費”特徵。

接下來驗證視訊服務QoS日誌上雲。隨著進入資料中心資料庫的流量越來越多,這些流量正在溢位,而且自己的機房缺乏足夠的儲存空間來儲存想要的資訊。於是,Netflix利用S3來儲存資料,利用EMR來處理資料。Netflix是Hadoop早期使用者之一,曾與AWS合作將Hive作為基於EMR的處理選項。

 

 

到2010年,可行性驗證基本完成,Netflix認為上雲看起來是可行的。於是2011年,Netflix作出決定,不再擴容自有IDC。

 

三、進行

 

Netflix開始真正地要在AWS雲上起飛了。從最簡單的API服務開始,然後是最簡單的Web網頁,然後是更多的API和網頁。

 

到2010年底,Netflix成功地將網站前端都遷移到了AWS上,但後端依然在自有資料中心內。

 

使用者訪問流量還是進入其自有資料中心,但是有選擇地將部分流量利用HTTP Redirect將請求轉向AWS Cloud。這其實也就是我們現在常常提到的金絲雀模式,通過匯入部分使用者到新環境上來驗證和逐步地完成系統遷移。

 

 

接下來是資料遷移。2010年的主要工作之一,是將主資料系統放在資料中心,將副本放在雲中,並將資料從本地持續地同步到雲中。

 

 

2011年,Netflix決定將所有資料放到雲上。其中一個問題是如何做資料備份。Netflix沒有采用當時常見的利用本地資料中心中的磁帶來備份雲中資料的做法,而是充分利用了S3的安全性和永續性,用不同的賬戶在不同的AWS區域中建立S3儲存桶,然後將生產資料匯入生產區域S3儲存桶,再經過壓縮和加密並傳送到容災區域的桶中。利用不同的賬戶,主要是從安全形度考慮。後來,AWS釋出了Glacier後,Netflix利用它來做長期歸檔的資料儲存。

 

 

 

到2015年,除了計費和賬單系統外,其餘所有系統都已經遷移到AWS上了。到2016年1月4日,Netflix完成了最後這兩個系統的遷移,詳細資訊請參加其公司部落格https://netflixtechblog.com/netflix-billing-migration-to-aws-451fba085a4。

 

 

四、完成

 

2016年2月,Netflix宣佈其上雲遷移工作全部完成。這一年,Netflix的使用者數是2008年開始上雲遷移時候的8倍,而使用者的月度觀看視訊數則有幾千倍的增長,使用者遍佈全球超過130個國家,Netflix也成為了一家國際化視訊服務提供商。

 

到2017年,除了CDN由其自建外,Netflix使用AWS來滿足其幾乎所有計算和儲存需求,包括資料庫、分析、建議引擎、視訊轉碼等數百種功能。而且,Netflix系統的可用性在持續增加,正在不斷接近99.99%的既定目標。

  • Netflix的視訊服務在高峰時段佔據了高達37%的Internet流量。相比之下,YouTube 僅佔到15.6%,網頁瀏覽約 6%, Facebook約2.7%, Amazon Instant Video 約2.0%。

  • 在AWS上共利用超過10萬個 EC2 Instances 的80萬CPU Cores,且在此基礎上有約 20% 的波動。

  • 在每個服務區域上的 AWS Elastic Load Balancing 的流量超過 50Gbps

  • 在 S3 上儲存和管理超過15億個物件的 60 PB 的資料。其中每天要丟棄超過 400TB 的過期資料以及新增 600TB 的資料。

 

2016年Netflix在AWS上的系統架構:

儘管降低成本支出並不是Netflix上雲的主要出發點之一,但是實際上,現在每個視訊的播放成本是當初利用自有資料中心的幾分之一,這是一種非常可觀的額外收益。這主要歸功於雲的彈性,使得Netflix可以持續地優化例項型別,近乎實時地增加或減少所用的資源,而不需要維持大規模的備用容量,以及公有云的規模不斷擴大帶來的單位成本下降。 

那為什麼需要7年時間才能完成上雲遷移呢?這是因為全業務上雲是一項艱鉅的工作,需要做好多的艱難決策。可以想到的是,最簡單的方式是將所有系統緣分不斷地搬到雲上,但是隨著系統一起搬過去的還有你在傳統資料中心中遇到的所有問題和限制。因此,Netflix選擇了一條另外的道路,重構所有系統,徹底改變公司IT運營方式,將單體應用改變為微服務架構應用、重構資料模型、使用NoSQL資料庫。將過去那種預算嚴格受控制、版本釋出嚴格受管控、花幾周時間來做物理容量擴容的傳統方式,改變為持續整合和釋出、技術團隊獨立做決策、基於鬆耦合DevOps環境的新方式。這種方式使得Netflix花了七年時間才完成上雲之旅,但是正是這種轉變,也使得它成為了一家國際化的網路視訊服務提供商。 

 

參考資料:

  • 覆盤Netflix發展史:如何用20年成為一家千億美元公司?,克魯斯2018年5月14日。https://www.gelonghui.com/p/179693

  • Completing the Netflix Cloud Migration,https://media.netflix.com/en/company-blog/completing-the-netflix-cloud-migration,2016.1

  • YouTube video,Globally Distributed Cloud Applications at Netflix,October 2012,Adrian Cockcro

  • Migrating to Cloud - Lessons from Netflix, Brought Up to Date,Adrian Cockcroft,https://media.netflix.com/en/company-blog/completing-the-netflix-cloud-migration

  • Companies Slowly Join Cloud-Computing,By Brad Stone and Ashlee Vance,https://www.nytimes.com/2010/04/19/technology/19cloud.html

 

感謝您的閱讀,歡迎關注我的微信公眾號:

相關文章