在2010年10月之前,几乎没有人相信,大型企业真的可以全靠云端,彻底取代数据中心。当时担任Netflix云端架构长,而现在是AWS云端架构策略副总裁的Adrian Cockcroft,他的一场演讲,从此改变了许多人的想法。而且,那是他第一次完整揭露Netflix的上云之旅。
关于这趟旅程,起点是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首次来台分享数字转型经验和云端发展策略。