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