Netflix高级软件工程师王晓中:Netflix 云端架构

2012中国软件开发者大会(SDCC)于9月8-9日在国家会议中心召开,本次大会由CSDN、《程序员》杂志、ITEye合办。作为年度最具实战的技术盛会,大会云集了来自国内外一线互联网和企业级软件公司的实战专家,就高可用性系统架构、海量数据挖掘、开放平台服务与架构、智能推荐系统、异构计算等话题和参会者进行了深入分享与探讨。

王晓中表示,大家好,很高兴和大家做交流,我目前想介绍一下Netflix目前的云架构,另外它怎么建立了适合云计算软件开发流程和经常使用的云计算工具,此外简单介绍一下Netflix企业规划。

我是2011年加入Netflix,现在是Netflix云平台高级软件工程师,主要负责客户端嫁给,我也是开源软件Archaius创始人之一,它是一个配置软件库,欢迎大家关注它。在Netflix之前我还在SUN Microsystems和Verisign。

Netflix是成立于1997年,现在主要是致力于互联网点播流媒体播放,运营模式是按月认购的无限即时视频流,现在视频业务遍及美国、加拿大、英国,不久还会很快登陆在北欧几个国家,有近三千万全球视频流用户,在美国是每到四到五家就有一家是Netflix的用户。同时Netflix在经营DVD邮寄出租业务,如果一句话概括Netflix的特点我想说它是美国好莱坞电影和旧金山高科技的结合。公司两个团队,一个就是在好莱坞专门负责跟电影发行商谈业务,选择并且购买一些版权。另外公司总部在旧金山,负责研发。这是进入 Netflix首页的情形,Netflix网页一个很大特点就是有个性化的推荐,第一行就是TOP10,它认为这些电影中你可能最想看的10部电影是什么,他把你比较喜欢看电影的类别放在主页比较靠前的位置。我们的PPT出现一个互动环节,这是因为我七岁的女儿经常在Netflix看动画片。

在高峰期 Netflix数据量占全美网络数据2%,Netflix API请求增长非常迅速,从去年每月20亿次访问,到今年7月40亿次访问,为了能够接受美国超过访问量,我们有数以百计的服务。如果在美国提到 Netflix,尤其在科技界,人们会有两个反应,第一就是它的推拴法做得很好,另外利用云计算比较成功。我们公司所有业务都在Amazoe的公共云中,这是因为前两年公司经历了比较高速的增长,每年有超过几百万新用户增加,而且访问公司业务的流量会有突发性的增长,比如说新的iPhone或者iPad要发布的时候公司访问量猛增,这时候公司就要投入服务器达到需求,但是中小型公司不可能为了突发性业务增长购买大量设备,所以公司就自然想到了云计算。另外公司正在把业务项全球拓展,作为一个小公司不太可能全球都有投入。公司更希望把工具放在PAAS,使用云计算最大节省IT投入。使用云计算并不意味着就有一切,我明天谈我们怎么搭建我们云平台的,大家有兴趣可以来听。

为什么我们选择了Amazon,Amazon在美国是最大的公共云运营商,每小时可提供上千个新服务其,提供IAAS可同时满足软件开发和IT 操作,Amazon部署在全球的Regioes/Zones具有良好的扩展性、冗余性,适于拓展国际业务。在Regions里面有好几个Zones,同样道理,Amazon在美国建了很多的Regions,公司某些业务还可以在另外的域上继续做。Amazon在拉丁美洲、欧洲、亚洲都有,这样适应于公司国际业务的拓展。

Netflix在API为中心的云架构,Netflix所有终端设备公司大部分服务都是无状态的,可以由任何一个服务器完成,为了保证良好扩展性充分利用AWS,使用分布式NoSQL存储和横向缓存。

Netflix在使用NoSQL上的探索,Netflix选择Cassandro为主要NoSQL存储,执行CAP理论的AHP,避免 Single Point Of Failure,Cassandro写也是非常快的,它的读就慢一些,它得做一些修复工作,所以减慢了一些速度。Cassandro还可以把数据自动复制到多个数据分析。Cassandro也具有可调的一致性,它让数据速度读写非常快。当然Cassandro也存在的一些问题,除了刚才提到的数据一致性稍差一些以外,我觉得它还缺少分布式文件系统底层支持,扩展性低,很难写入一些插件增强功能。Cassandro为了保证快速地写牺牲了数据一致性,这样就不能时时起动Regair,当大规模Data Regair而过程中系统可用性降低

Netflix是怎么样建立适应云计算开发流程的呢?我们假设这个流程开始就是设计编程,然后就是构建,在构建过程中Netflix提供统一的构建模版,这样的好处是大大缩短了构建时间。下一步是制作Amazon Machine,我们公司提供了很多简便的命令制作AMI,提供了一些参数,这些参数包括你要构建的名字和你认为它运行的时候需要的类型。在AMI制作好以后就把它放到测试环境中部署,任何一个AMI都需要通过测试环境部署,我们不允许AMI不经过测试环境直接部署到生产环境中,如果测试环境没有问题才可以部署到生产环境。部署到生产环境以后是使用Amazon,在部署完以后就会声称一个叫做Autoscaler,它运行在多个服务器上,而且服务器数量可以自动伸缩的。

Netflix建立在开源软件啊的基础上,从某种意义上Netflix是一个拿来主义的,当他需要开发一些新的技术时,他会优先考虑那些现成的而且是已经比较成熟的技术,当这个条件不具备的时候他就自己开发一些工具或者软件。前一段时间我们已经把Netflix比较成熟的共聚合软件放在网上,有兴趣的朋友可以到Netflix的网站上关注一下。我介绍两个非常有影响力的Netflix的工具,一个是Asgard和Simian Amy。有了Asgard部署工具以后,实际上你只要在用户界面中设置基本参数,比如需要多少服务器、什么版本的AMI,Asgard可以帮你更新软件版本,假如说你监测发现新版本有问题也可以按一个键,那么Asgard就不会再接受新的软件版本。如果这个新版本运转正常,你就可以升级到新的版本上,再观察一段时间确信没有问题就可以放弃旧版本,这样就完成了软件版本的新旧交替。

另外一个常用的工具是“猴子军”,就是因为它里边所有工具名字里边都有一个Monkey,其中Chaos Monkey是最受关注的一个产品,顾名思义就是用来捣乱的,怎么捣乱?很简单,他会速记终止ASG中的一个或多个服务器,就是云计算中运算设备是比较便宜的硬件,这些硬件都是有寿命的,也许哪一天它就停止运转了,当然你可以把它换掉,但是换的这一到两分钟内可以少了一个或者多个服务器,这可能有灾难性的影响。Chaos Monkey是不等软件发生故障就开始模拟,在硬件不确定的情况下、硬件不稳定的情况下的读取。另外一个猴子是叫Latency monkey,它是认为的把系统反应时间延迟,系统可能正常时间需要20秒,但是它把这个反应时间延长到200秒,它的目的是看一个子系统出现延迟的话会不会对整个系统出现负面影响。

Netflix的企业文化,可以说Netflix他的企业文化是比较独树一帜的,Netflix文化核心就是自由与责任,作为一个软件工程师你有充分的自由做出各项选择。Netflix每个工程师都可以在部署和生产环境做出调整改变,这些操作不需要IT人员任何操作。什么是责任,你要为你做的每个错误选择而负责,你可能因为一个错误选择造成这个系统不稳定或者其他系统不稳定,那么你要尽快想办法找出解决方案把影响降到最低,另外一个责任是尽快把这个缺陷修好并且发布一个新的软件。自由与责任最好的体现是Netflix的休假制,任何人任何时间都可以修长的假期,这也是我站在这里的原因之一,休假是你的自由,但是你相应的责任是什么,你休假之前要把你该做的事情做好。而且你的休假不能给公司带来任何负面影响,其实你已经开始休假了,如果你的系统发生问题你也有责任在任何时间任何地方解决这个问题。Netflix另外一个企业文化是期待高效员工,在Netflix如果你的表现只是足够的话你大概也就可以走了,最后一点是技术面前人人平等,Netflix工程师不分等级,没有梯子可以爬,那怎么办?大家都认真做事,这样也鼓励员工用实干或者说靠自己的努力来争取有所作为来赢得别人对你的尊重。

非常感谢CSDN和刘江老师盛情邀请让我有这个机会和大家分享,谢谢。