關於這趟旅程,起點是2008年8月的一次SAN儲存設備故障事件,足足讓Netflix的關鍵資料庫系統當機2天,當時因為無法查詢訂單資料,一連3天,沒有寄出任何一片顧客租借的DVD影片。大家都在問Netflix怎麼了!Netflix是全美最大的DVD租片服務公司,顧客透過網站租片,過兩天就會在自家郵箱收到,看完再用回郵信封寄回。
這次事件讓Netflix開始反省,就算砸大錢,買來業界最高階的Oracle資料庫系統,搭配最頂級的硬體設備設備,為何還是會出錯?當時Adrian Cockcroft是網站工程團隊的總監,他開始意識到:「服務可用性的主角應該是應用程式,而不是硬體。」而順著這個思路進一步發現,其實,Netflix不見得需要昂貴的硬體,而是可以考慮租用便宜的雲端環境,也許就夠了。
這並不是Netflix獨到的經驗,很多企業資訊主管遇到當機事件時,都會有同樣的反省。但是,「得等到出現外在危機的壓力,企業才會真的願意採取行動,我們也是。」Adrian Cockcroft事後回憶。
Netflxi在2010年4月公開上雲計畫,所有人都不看好,直到年底公開了這張AWS架構圖後,才讓大家意識到,大型企業真的也可以上雲。
全球布局的外部壓力浮現,才下定決心上雲端
這個來自外部的壓力,出現在2009年。Netflix除了租片服務,從2007年也開始在美國提供線上影片串流服務,當年2月,Netflix宣布累計出借了10次億份DVD,但他們的串流服務人數,遲遲沒有突破1千萬用戶。
之後,Netflix在2010年進軍國際市場,而為了解決DVD全球寄送的問題,Netflix決定改變,開始主推線上串流服務。這也讓Adrian Cockcroft開始思考,新業務帶來的挑戰有多大。
原有的DVD出租生意,顧客大約每周使用一次Netflix網站來租片,須等到DVD寄到顧客手上看完後,顧客才會再次上站來租片,寄送的時間,往往決定了顧客下次何時再上線挑片的頻率,而這個頻率大約是每人每周一次。
但是,線上串流服務的挑戰完全不同,Netflix串流服務顧客每天大約可以可以觀賞5到6段影片,租片量是DVD租片的10倍以上,而影片還提供個人化瀏覽服務,顧客會花更多時間上站選片,甚至顧客看到一半停下來,網站還要記住他當時所看到的進度,下次再繼續播放。根據Adrian Cockcroft估計,串流顧客與Netflix官網的互動(瀏覽)頻率,大約是租片顧客的100倍。
換言之,租片量10倍成長,顧客互動次數增加100倍,兩者相乘,租片顧客改用串流服務後,每周帶來Netflix資料中心的流量成長,是過去的1千倍。只要有0.1%的用戶改用串流服務,Netflix資料中心承受的流量規模,就要翻倍。
轉移前端系統時,Netflix的策略是,先從最簡單的網頁開始轉移,一次只將網站上的一頁服務搬上雲端。這是Netflix第一個搬上AWS的網頁。(資料來源:Adrian Cockcroft)
IT未來要考慮全球顧客的參與度
從IT營運模式的改變來看,Adrian Cockcroft指出,過去IT只需考慮到,以員工人數來決定系統的擴充規模,但未來IT要考慮全球顧客的參與度,以此決定擴充規模。這個數位轉型壓力是根本性的變革,從服務數百、數千人,到服務全球顧客,而且要提供24小時服務。
2009年時,Netflix有兩個選擇,第一是雇用一個世界級資料中心維運團隊,未來需要多少用量,就預先建置多少資料中心。第二個選擇是使用Netflix競爭對手AWS提供的雲。當時的Amazon Prime影片串流服務,是Netflix最大的競爭者。「選擇自己蓋資料中心,還是租用競爭對手的服務,改把錢花在內容和開發者身上。」Adrian Cockcroft表示,這是當年經營高層最頭痛的抉擇。
還有一個難題,促使Netflix最後決定上雲端。那就是進軍全球市場後,Netflix串流服務也會整合到多種播放裝置上,不只是電腦,還增加了iPhone、Wii、PS3和Xbox的版本,未來的成長規模幾乎難以預測。如何滿足至少是1千倍的擴充需求?Netflix決定開始認真評估,了解搬上雲端的風險。
首先,考慮AWS業務和Amazon Prime服務的關連,後來Netflix高層也直接聯繫Amazon創辦人,確定兩者各自獨立運作。其次是要測試AWS的能耐,評估AWS的擴充能力,能否勝過自行建置資料中心的速度。後來,Netflix簽署AWS 第一個企業授權契約,直接上網用信用卡刷卡就完成這件事。
直到2010年4月,Netflix開始公開即將上雲的消息,Adrian Cockcroft表示,大家都覺得他們瘋了,因為他們是第一家這麼做的大企業。不過,早在2009年,Adrian Cockcroft率領的網站工程團隊,就展開上雲轉移的作業。而這個過程的第一步,是先檢視那些不會直接面對顧客的系統,決定先將影片編碼(Movie Encoding)伺服器放上AWS的EC2。因為,這類影片編碼服務需要大量機器來運算,但現有資料中心的空間並不足以擴充。
選定搬遷的目標後,下一步就是要測試EC2的擴充能力,Adrian Cockcroft表示,那次一口氣向AWS提出要求,想在一小時內要取得3千臺EC2虛擬機器,後來,真的拿到了,也才讓Netflix相信,雲端真的可行;接著,就真的把影片編碼的實體主機關了,全部搬上EC2。影片編碼的處理,租用了數千臺EC2實例來組成運算農場,當時還用了不少Windows環境的影片轉碼軟體,處理了上萬部影片,而為此而儲存在S3的資料量,已經高達PB級。
除了影片編碼,第二步則是改將大量的網站存取日誌放上雲端,尤其是所有串流服務的日誌。Netflix有太多想紀錄追蹤的資訊,都改用S3來儲存,這些日誌資料每天的成長量也是TB級。最後,利用Hadoop來分析,還和AWS合作整合Hive SQL來設計資料超市,再整合到Netflix內部資料中心的BI系統上。
2010年初,Netflix就決定不再蓋資料中心了,並且在年初開始也把串流服務的後端系統搬上雲,例如像是DRM金鑰管理、用戶重播書籤服務、高可用設計的「播放」按鈕服務等。
Netflix還決定要在2010年底前,要把前端系統和用戶端設備的API服務,也都搬上雲端。當時,多數後端系統仍部署在資料中心內,不過,前端上雲後,機房就可用於擴充後端系統。
過去IT只考慮服務員工數,來決定系統規模,但未來IT要考慮全球顧客的參與度,來決定擴充力道,這個數位轉型壓力,是根本性的變革。──雲端教父 Adrian Cockcroft
2010年底官網前端系統全面上雲
「我們沒有備案!一定要在年底前將網站前端搬上AWS。」那時,Netflix每次經營會議時,都會秀出一張圖,上面有一臺準備起飛的飛機,代表著Netflix,軌道盡頭就是樹林,「到了年底,沒有飛上雲端,就會撞上樹林。」Adrian Cockcroft強調。在2010年12月初,完成官網最後幾頁的轉移,過程沒有發生任何一次當機,Netflix順利飛上了雲端。
原本,Adrian Cockcroft一開始設計了一個漸進式轉移的作法,但他的老闆直接指示:「全部砍掉重練!頂多留下你覺得有用的10~20%,你不要的程式碼,一行都不要留。」他希望趁著重新設計的機會,要求Adrian Cockcroft設計可符合未來5年需求、兼顧效率和生產力的新架構。「因為,我們不想成為一味節省成本的公司,而要追求業務速度。」Adrian Cockcroft表示。
除了重新打造新架構,在轉移前端系統時,Adrian Cockcroft的策略是,先從最簡單的網頁開始轉移,逐次將網站上的一頁服務搬上雲端,並且先從最簡單的API服務開始轉移,其次是轉移對應的頁面,然後再進行下一個API和下一個頁面。同樣的作法,先套用到其他服務頁面,再來,才是轉移其他不同資料來源的頁面。
因為是一頁一頁地轉移上雲端,因此,他們也採取雙軌系統並行。用戶先登入位於資料中心的舊版官網網頁、後端系統和登入服務,再挑選合適網頁,切換成由雲端提供服務的版本給顧客。一旦出現問題,可以馬上切換回來,因為採取標準HTTP轉址來切換,因此,顧客不會察覺。
在資料轉移的策略上,原有系統資料都儲存在Oracle資料庫中,先利用Oracle遠端副本功能,在雲端建立一份副本資料庫,多數用戶只是需要查詢資料,就先由雲端資料庫來提供,只有用戶需要更新記錄時,才連回資料中心的Oracle資料庫來修改。
2011年決定全面上雲端後,新的挑戰是如何備份。過去,Netflix採用磁帶進行離線備份,來保存系統記錄。上了雲端後,Adrian Cockcroft不想把資料再運回本地端資料中心來備份,因此,改而不同的服務區域,建立不同的AWS帳號,利用不同帳號的S3服務,來提供另一個備份。
此外,所有系統記錄資料不會刪除,而是採取每90天自動執行清除程式,將資料壓縮備份到歸檔區的S3帳號,因為可預期這些資料存取頻率不高,壓縮資料的時候,也以縮小容量為主,而不用考慮解壓縮速度來節省空間。後來AWS推出了超便宜的歸檔服務Glacier,就有更彈性的備份策略可用。
後來,Netflix發現,上雲的決定是正確的作法。因為拓展到全球市場後,光是2009年第三季到2010年第三季,一年內串流服務就成長了145%,從原有的1千萬名用戶,增加到1,600萬人。更大的挑戰是,到了冬天,大家都待在家裡看電視,從感恩節到聖誕節期間的串流影片需求,將會大爆發。2011年時,Netflix就決定,全面上雲,連後端和全部資料都要搬上去,不過,仍有少數資料轉移不易,例如,當時有些支付法規遵循的要求,規定資料必須落地。結果,他們花了7年時間,直到2016年1月,Netflix才完成所有雲端轉移工作,並且關閉了資料中心的最後一臺機器。
數位轉型三階段:速度、規模,以及策略
從Netflix上雲的經驗,Adrian Cockcroft歸納,企業數位轉型的途徑可分成三階段。第一,是先追求速度,採用新架構,例如將所有JAR元件都微服務化,就不用每隔兩周得關機10分鐘來更新,或是統一服務設計模式,而不是共用一套標準程式碼,同時,還將複雜糾纏的服務API,改為功能分明的分層式架構。這些設計,後來讓Netflix的雲端架構,成為微服務架構的經典參考範本。
「有了速度,下一步才追求規模。」他解釋,例如,透過水平式擴充架構,滿足越來越多服務上雲後的運算需求,還要提高利用率。數位轉型的最後一個階段,就是策略性轉型,目標是徹底取代資料中心,將關鍵應用搬上雲端。
Netflix租用了超過10萬個EC2虛擬機器,來服務遍布全球130多國市場的上億名用戶。根據Netflix統計,從2007年12月到2015年12月為止,每月串流服務播放總時數,成長了1千倍以上。正是因為當年上雲端的決定,才能支撐起這樣的千倍的發展速度。
Profile
雲端教父 Adrian Cockcroft
1982年:進入劍橋顧問公司擔任軟體工程師,一待就是6年,專責開發即時嵌入式訊號處理和控制系統,後來還兼職擔任Unix系統首席管理員。
1988年:進入昇陽電腦,任職長達16年,直到2004年才離開昇陽,他不只熟諳雲端技術和軟體技術,更是高效能電腦技術的專家,最後成為昇陽高效能工業計算(HPTC)部門的首席架構師。在昇陽期間,也有多本高效能電腦的相關著作,例如他是《Sun Performance and Tuning:Java and Internet》第二版一書的第一作者,這是暢銷的HPC調校參考書之一。
2004年:離開昇陽後,9月轉而進入eBay工作,主要參與多項創新計畫,也是eBay Research Lab創始團隊成員之一。早在iPhone和Android問世之前,Adrian Cockcroft就開始研發自製手機和先進行動應用。
2007年:進入Netflix,擔任網站工程團隊總監,負責Netflix首頁開發,以及打造個人化選片服務,尤其是研發背後的演算法,也參與了Netflix Java系統重構計畫,也就是SOA架構的導入。
2008年8月:一場SAN儲存設備大當機,Netflix開始考慮採用雲端。Adrian Cockcroft是關鍵評估者之一。
2009年:Netflix開始展開雲端轉型之旅,先將內部系統搬上雲端AWS,例如影片編碼。
2010年:進一步將網站前端系統全部放上AWS。
2010年4月:Netflix開始宣布上雲端計畫。
2010年12月:正式完成官網上雲端轉移。
2011年:開始將後端系統搬上雲端。
2013年:Netflix也大方公開了這套轉型上雲端的經驗,甚至打包自己開發的工具和架構設計範本,開源推出了NetflixOSS平臺,這也成了設計雲端原生架構的最佳實務參考之一。
2014年:Adrian Cockcroft離開Netflix,轉而進入Battery Ventures創投擔任技術院士,從更宏觀的角度,來觀察科技產業、網路新創、創新技術的發展。
2016年1月:Netflix最後一批資料搬上雲端,完成了為期7年的雲端之路。
2016年10月:Adrian Cockcroft進入AWS擔任雲端架構策略副總裁,不只帶領AWS的開源推動工作,也開始到各國分享自己一路參與雲端架構發展的經驗。
2018年6月:Adrian Cockcroft首次來臺分享數位轉型經驗和雲端發展策略。
資料來源:當年,雲端教父如何成功讓Netflix成為第一間完全上雲的大型企業