随着我们深入研究可扩展架构,我们越来越多的接触到 Netflix。 他们的技术非常开放。 这篇文章是我们与 Bryan一起完成。所有信息是从互联网上收集而来。欢迎在留言中补充更多 Netflix 架构的资料。
我们看到的 Netflix 架构在可扩展方面可取之处
Netflix 由 Marc Randolph 和 Reed Hastings 于 1997 年在加州 Scotts Valley 成立,由 30 名员工和 925 名租赁用户组成,现在是全球领先的互联网电视网络,在 50 个国家拥有超过 6,900 万用户每月享受超过 100 亿小时的电视节目和电影。 他们对于技术非常透明,并在网上发布了很多信息。 我们收集并分享了我们认为最可取的一些点:
可扩展文化
NetFlix 有一个关于企业文化的著名演讲。 这些概念是关于重新思考人力资源。 他们很多可扩展人力的理念在这个演讲中得到了完整的表述。 下面是其中一些示例幻灯片和演示文稿。这给我们了解 Netflix 的企业文化提供了一些重要的背景,我们从中可以了解他们如何扩展他们的软件栈,以及它为什么工作。
部署在 Amazon 云上的架构
Netflix 的基础架构架设在 Amazon EC2 上,视频数据存储在 Amazon S3 上。根据视频分辨率和音频质量,每个电影被编码成超过 50 个不同版本存储在不同的 EC2 上。 亚马逊上存储了超过1PB的数据。 这些数据被发送到 CDN 以将内容就近提供给各地的 ISP。
Netflix 在后端使用了一些开源软件,包括 Java,MySQL,Gluster,Apache Tomcat,Hive,Chukwa,Cassandra 和 Hadoop。
多设备支持
Netflix 上的巨大数量的编解码器和比特率组合意味着“同一个视频在传送到所有流式平台之前,需要进行120次不同规格的编码”。
虽然 Netflix 使用自适应比特率流技术来调整视频和音频质量以匹配客户的下载速度,但它们还为用户提供了在其网站上选择视频质量的能力。
您可以从任何提供 Netflix 应用程序的互联网连接设备立即观看,例如计算机,游戏机,DVD或蓝光播放器,HDTV,机顶盒,家庭影院系统,手机或平板电脑。
他们支持以下编解码器中的每个标题具有不同的比特率,使它们在设备和连接上工作。
Netflix 开放连接 CDN
Netflix 开放连接 CDN 适用于拥有超过 10 万订阅者的大型 ISP。 专门构建的低功耗高存储密度设备,在 ISP 的数据中心内缓存 Netflix 内容,以降低互联网传输成本。 此设备运行 FreeBSD 操作系统,nginx 和 Bird Internet 路由守护程序。
NetFlix 在巴黎的开放连接 CDN – 图片版权 @dtemkin twitter,相关视频地址见 [2] 。
可扩展及推荐算法
2009 年,Netflix 进行了一场名为 Netflix 奖的竞赛。他们开放了一堆匿名数据,允许团队尝试并开发更好的推荐算法。他们当时的系统从获胜的队伍的算法中获得了10.06% 的提升。 Netflix 后来也计划组织一次新的 Netflix 奖竞赛,但最终因为 FTC 的隐私问题未能举办。
Netflix 推荐系统由许多算法组成。在生产系统中使用的两个核心算法是受限玻尔兹曼机(Restricted Boltzmann Machines, RBM)和被称为 SVD++ 的矩阵因子分解的形式。这两种算法使用线性混合来产生单个较高精度预估。
受限的玻尔兹曼机(RMB)已经被修改为在协同过滤方式工作的神经网络。每个用户都有一个代表电影用户额定输入节点的 RBM。
SVD++ 是SVD(奇异值分解)的不对称形式,其利用诸如 RBM 的隐式信息。它是由 Netflix 奖竞赛的获胜团队开发的。
在他们的工程博客上,Netflix 团队介绍了如何实现一个个性化主页 [3]
开源项目
团队的开源项目在 https://netflix.github.io/。
Netflix 有一个优秀的工程博客,他们也有一篇介绍 Netflix 开源演变的博客。[4]
Netflix 全栈架构一览
大数据
构建和交付工具
通用运行时服务和库
数据持久化
分析、可靠性和性能相关
安全