Netflix是一家成立于1997年的在线影片租赁提供商,其一开始的主要业务是通过提供超大数量的DVD,然后通过邮寄的方式提供给客户。从2009年开始,Netflix逐渐把她的IT系统迁移到AWS云平台,并开始进行业务转型——从DVD租赁演变为在线视频供应商。目前,在高峰期间Netflix的互联网下载流量已经占到北美地区的三分之一,而支撑Netflix的整个IT系统基本上构建在AWS之上。Netflix是一个典型的利用互联网和云计算大胆创新,并成功对传统业务进行改造的例子。
Netflix认为云计算技术将使IT成为一种日用品类型的服务,因此很早就决定利用云计算生态系统的快速发展来获得推动力。公有云服务和开源的各种工具让Netflix在扩展能力和灵活性上受益匪浅。一方面,使用AWS让Netflix可以更加专注在更贴近业务的创新上,而不是把精力花费在底层数据中心的构建和运维上面;另一方面,AWS云平台让他们能够快速推出新的产品和服务,加快创新速度,并从容应对各种访问量的变化,提升服务质量。
在过去4年多时间的实践中,Netflix不仅仅在AWS云平台上提供了在线视频服务,他们同时还开发了他们自己的平台层服务和许多开源项目。这些开源项目Netflix非常慷慨地在http://netflix.github.com网站上进行分享。另外,他们还积极地通过他们的技术博客网站http://techblog.netflix.com跟大家分享他们在AWS云平台上的各种最佳实践。他们提倡的许多最佳实践与我们AWS一直推荐的实践也非常一致。这里有一些Netflix推荐的最佳实践:
实践 1:考虑到可能的故障而设计
在AWS云平台上进行架构设计的一个经验法则是要作为一个悲观主义者来设计云计算应用架构——假设会出问题。因为我们知道硬件总会发生故障,服务器会发生宕机,唯一不确定的就是在什么时候发生而已,所以我们在应用架构上要进行高可用设计。比如:我们需要有一个清晰的数据备份和恢复机制,并自动化这个流程。在构建应用服务时要构建能够在重启时继续运行的服务进程,系统的状态可以通过从消息队列重新读取信息来恢复。另外在处理应用会话时要避免基于内存的会话或有状态的上下文,把这些数据放到持久性的数据存储中。这样做的好处就是能够让应用利用云平台的弹性能力进行横向伸缩。Netflix为检验他们在AWS上服务的高可用性专门做了测试工具,比如Chaos Monkey等。
实践2:基于云的产品设计
为充分利用AWS云平台的特性,Netflix完全根据云平台的特性进行了应用设计。这也是我们推荐的一种用户采纳云计算方式。比如,Netflix对他们的应用进行了松耦合设计,他们的服务和组件之间都通过标准服务接口或通过消息队列连接。Netflix的视频服务具有非常强的时间周期性,因此充分利用AWS云平台的Auto Scaling就显得非常重要。
实践 3:基于云的大数据分析
大数据和云计算可以说是“天生一对”,为更好的了解用户观看视频的各种行为习惯等问题,Netflix有非常强的大数据分析需求。AWS云平台可以在数据生成、数据收集和存储、数据的分析和计算等方面为Netflix的大数据分析业务提供支持。比如,Netflix不需要自己管理Hadoop群集,而只需要使用AWS提供的EMR(Elastic MapReduce)服务就可以使用基于Hadoop的大数据分析服务了。Netflix还在AWS平台上开发了Genie项目,专门简化其基于EMR、Hive、Pig等平台上的数据分析和挖掘。
实践4:灵活的开发和管理模式
为更好的基于云平台开发和运维好一个应用服务,Netflix不仅仅在应用架构上进行重新设计,他们在团队组织架构上也进行了调整,以更好的适应云服务的模式。他们新的模式给开发人员更多的灵活度和责任感。一方面开发/运维与业务部门结合更紧密,另一方面他们把运维工作变得分散和自动化。
总之,Netflix充分利用AWS云平台的服务,不仅创建了一个全新的视频业务,另外还得到了巨大发展。Netflix的视频流从2009年到2013年增长了约100倍,与传统模式相比他们的视频流服务成本降低了87%,充分利用了AWS云平台的弹性和规模效应。
下面的资料是我在Top100Summit(全球软件案例研究峰会)上的演讲稿,其主要内容是根据Netflix提供的资料和他们在AWS Re:Invent上的演讲材料编辑而成,供大家参考。
http://share.csdn.net/slides/1213