高可扩展性一直是信息产业相关的公司在快速发展过程中所需要面对的问题。MaxCDN的首席执行官、ScaleScale的创始人Chris Ueland近日给出了关于NetFlix高可扩展性背后的技术架构的报告,本文主要总结和介绍Chris提到的企业文化和架构设计方面,希望读者可以从中有所借鉴。
随着我们越来越深入的研究扩展性的问题,我们越来越关注Netflix。他们很愿意分享他们的故事。此文章是在Bryan的帮助下,根据互联网上的信息整理得来。如果你希望阅读此方面信息,我们会继续追加相关内容。否则,文章就到此为止了!——Chris
Netflix 是由Marc Randolph和Reed Hastings在1997创建的。公司位于加州的斯科茨谷,初始拥有30个固定员工和925个临时工。目前,作为世界上领先的互联网电视网络,Netflix每月为50个国家的6千9百万订阅者提供了超过百亿小时的TV节目和电影。该公司非常透明,放置了很多的信息在网上。例如,Netflix的总体技术架构可以分为应用与数据、业务工具、基础服务、研发和Open Connect CND五个大类。如上图所示,每一个大类都包含了若干核心工具或项目。
Chris收集并分享了他认为最有意思的内容:Netflix技术栈高可扩展性的秘密主要包含高可扩展性的企业文化、倚重多种Amazon服务、支持多种设备、自身研发的Netflix Open Connect CDN以及高可扩展算法等。
Netflix有一份有关企业文化的著名演讲。该演讲包含了Netflix对于HR的重新思考。而这些想法正是指导了Netflix以后在人员方面的扩展。以下为该演讲的部分内容。从中,读者可以理解Netflix如何扩展其软件栈,而这些软件栈为什么可以很好的工作。
如上图所示,Netlfix注重的是员工的实际工作成果,而非工作时间。不管员工付出努力的多少,只要成果能够获得公司认可,Netflix就愿意给予较高的薪水或奖金。
而且,Netflix更多的希望员工能够参与到策略或者决策中,清楚知道项目的来龙去脉和自己在项目中的定位。
点此 ,读者可阅读演讲的全文。
Netflix的框架运行在Amazon EC2中,其数字电影的主要拷贝存储在Amazon S3中。根据视频分辨率和音频质量,Netflix需要将每一个电影利用云端编码为50多个版本。因此,共计超过1PB的数据存储在Amazon中。这些内容通过内容传输网络(CDN)发送到不同ISP中。
Netflix在其后端采用了包括Java、MySQL、Gluster、Apache Tomcat、Hive、Chukwa、Casandra和Hadoop等在内的很多开源软件。
在Netflix,不同编译码器和比特率的组合意味着,相同内容需要经过120次不同的编码才能被发送到流平台中。
尽管Netflix采用了自适应的比特率技术来调整视频和音频质量,以适应客户的下载速度,他们还额外提供了在网站中手动选择视频质量的选项。
用户可以通过计算机、DVD、蓝光播放器、HDTV、家庭影院系统、手机和平板电脑等任何包含Netflix应用的联网设备来观看视频。
为了适应不同设备和连接速度,Netflix提供了以下编解码方式:
Netflix Open Connect CDN用于拥有超过10万个订阅者的大型ISP。为了减少网络传输代价,ISP的数据中心中专门包含了低功耗、高存储密度的Netflix内容缓存器。该缓存器运行FreeDSB操作系统、nginx和Bird互联网路由程序。
点此 可观看有关Open Connect的视频。
在2009年,Netflix举行一场名为 Netflix Prize 的竞赛。该竞赛提供了大量匿名数据供参赛团队参考并推导出更好的算法。最终,Netflix利用此竞赛的获奖作品将其算法效率提高了10.06%。本来,Netflix准备再次举行类似的比赛。但是,因为FTC担心用户隐私可能被泄露,比赛最终并未举行。
Netflix的推荐系统包含了很多算法。在其产品系统中所使用的两个核心算法就是Restricted Boltzmann Machines(RBM)和SVD++。这两个算法通过线性混合的方式形成了一个超高精度的评估系统。其中,RBM是被修改用于协同过滤的神经网络技术。每个用户拥有一个RBM,其中的输入节点就代表了他所点评过的电影。而SVD++是SVD (Singular Value Decomposition)的一种非对称形式,使用类似于RBM的隐形信息。该算法正是由Netflix Prize竞赛的获胜团队所研发。读者可以 点此 阅读Netflix工程博客中有关定制化主页的内容。
Netflix拥有专门的 GitHub网址 ,并维护了一个专门的工程博客(有关 Netflix开源改革的文章 就包含在其中)。其工具涵盖大数据、开发和传输、通用运行时服务和库、数据存储和持久化、性能分析和安全方面等等,感兴趣的读者可以参考InfoQ稍后发出的专门谈论Netflix开源工具的文章。
Chris的文章公开后,引起了网友的相关热烈讨论。其中,读者广泛反应的问题就是该文章缺少对 Spring 、 Node.js 、 Guice 、 Docker 、 Groovy编程语言 以及 ElasticBox 等相关框架或工具的分析。
感谢杜小芳对本文的审校。
给InfoQ中文站投稿或者参与内容翻译工作,请邮件至editors@cn.infoq.com。也欢迎大家通过新浪微博(@InfoQ,@丁晓昀),微信(微信号: InfoQChina )关注我们,并与我们的编辑和其他读者朋友交流(欢迎加入InfoQ读者交流群 (已满),InfoQ读者交流群(#2) )。