随着我们深入研究可扩展架构,我们越来越多的接触到 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,机顶盒,家庭影院系统,手机或平板电脑。
他们支持以下编解码器中的每个标题具有不同的比特率,使它们在设备和连接上工作。
视频 – VC-1, H.264 (AVC), VC-1, H.263, H.265 (HEVC)
音频 – WMA, 杜比数字, 杜比数字+, AAC 和 Ogg Vorbis
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 全栈架构一览
大数据
Genie - 对我们的各种数据处理框架(特别是 Hadoop)的强大抽象(基于REST)。
Inviso - 详细了解我们的Hadoop作业和集群的性能。
Lipstick - 以清晰,直观的方式显示Pig job的工作流程。
Aegisthus - 允许从 Cassandra 大量获取数据用于下游分析处理。
构建和交付工具
Nebula- Netflix 内部构建基础设施。
Aminator - 用于创建EBS AMI的工具。
Asgard - 用于 Amazon Web Services(AWS)中应用程序部署和云管理的 Web 界面。
通用运行时服务和库
Eureka - 用于 Netflix 云平台的服务发现。
Archaius - 分布式配置管理。
Ribbon- 弹性和智能化的进程间和服务间通信。
Hystrix - 提供跨服务调用的可靠性,隔离运行时延迟和容错。
Karyon 和 Governator - JVM容器服务。
Prana sidecar - Prana 在实例中提供代理功能。
Zuul - 在部署的边缘节点提供可进行脚本化的代理。
Fenzo - 为云本地框架提供高级调度和资源管理。
数据持久化
EVCache 和 Dynomite - 用于大规模使用 Memcached 和 Redis。
Astyanax 和 Dyno - 以更好地使用云端数据存储的客户端库。
分析、可靠性和性能相关
Atlas - 时间序列自动测量平台
Edda - 跟踪云端变化的服务
Spectator - 将应用程序代码与 Atlas 轻松集成
Vector - 以最小的开销监控高精度主机性能指标。
Ice - 监控运营成本和云利用趋势。
Simian Army - 测试 Netflix 实例的随机故障。
安全
Security Monkey - 帮助监控和保护基于AWS的大型环境。
Scumblr - 利用全网针对性搜索定位特定安全问题。
MSL - 一种可扩展且灵活的安全消息传递协议,解决了许多安全通信用例和需求。
Falcor - 通过虚拟 JSON 图将远程数据源表示为单域模型。
Restify - 专门用于Node.js Web API服务的REST框架
RxJS - JavaScript的反应式编程库
请关注高可用架构以了解更多 Netflix 架构后续介绍。