最新发布《数智时代的AI人才粮仓模型解读白皮书(2024版)》,立即领取! 了解详情
写点什么

深入解析 Netflix 后端架构与云服务的系统设计

作者 | Nidhi Upreti

  • 2023-09-25
    北京
  • 本文字数:2817 字

    阅读完需:约 9 分钟

大小:1.54M时长:08:59
深入解析Netflix后端架构与云服务的系统设计

统计数据

 

在深入介绍 Netflix 的架构之前,我们首先看一些重要的统计数据,它们是系统设计的基础:

  1. Netflix 应用程序每天有大约 4000 亿个事件;

  2. 在高峰期,每秒要处理大约 800 万个事件和 17GB 数据;

  3. 有超过 2 亿名订阅用户;

  4. 订阅用户分布在全球 200 多个国家;

  5. 支持 2000+设备;

  6. 每位用户平均每天观看 5 个视频;

  7. 视频平均大小为 500 MB;

  8. 平均每天从后台上传 1000 个视频;

  9. 每天上传所需的存储空间为:1000 * 500 MB = 500 GB(大概)

  10. 5 年内所需的总存储空间为:500 GB * 5 * 365 = 912.5 TB

 

在 Netflix 上线一个视频

 

Netflix 从制作公司获得高质量的视频和内容。然而,Netflix 支持 2000 多种设备,每种设备都需要不同的分辨率和格式。

 

对于同一部电影,Netflix 要准备多种不同的视频,而且还要为每一种视频准备多个拥有不同分辨率的副本,然后根据用户的网速和设备确定向他们提供何种视频质量的视频。为了实现这一目标,Netflix 将原始视频切分成不同的小块,并使用 AWS 提供的并行工作者进程将它们转换成不同的格式(如 mp4、3gp 等)和不同的分辨率(如 4k、1080p 等)。这个过程称为转码。

 

经过转码之后,同一部电影就有了多个文件副本。它们会被传输到世界各地不同地方的每一台 Open Connect 服务器上。

 

云服务


Open Connect —— Open Connect 或 Netflix CDN 是一个分布在不同地理位置的分布式服务器网络。同一电影文件的不同副本会被传输到每个 Open Connect 服务器上。Open Connect 主要负责 Netflix 的视频流。当你点击播放按钮,Netflix 会从距离你最近的 Open Connect 服务器把视频提供给你,从而提供更快、更好的体验。此外,这还增加了整个系统的可扩展性。这些服务器被称为 Open Connect Appliances(OCA)。

 

注意:上面的 912.5 TB 并不包括存储这些副本的存储空间。

 

AWS —— 除了视频流,Netflix 几乎所有业务都使用 AWS。这包括在线存储、推荐引擎、视频转码、数据库和分析。

 

当用户点击播放按钮时,Netflix 会分析网速或连接稳定性,然后找出离用户最近、最合适的 Open Connect 服务器。Netflix 会根据设备和屏幕的大小将正确的视频格式以流的方式传输到用户的设备中。

 

Netflix 的后端架构



  • 除了视频流之外,Netflix 的所有业务都由其后端服务处理,包括上线新内容、处理视频、将视频分发到位于世界各地的服务器,以及管理网络流量。

  • 来自客户的请求被发送到 AWS Elastic 负载均衡器,后者是一个 2 层架构:

1.第 1 层:来自 ELB 的请求会首先到达这一层。该层负责基于 DNS 的轮询调度在不同的区域之间平衡负载。

2.第 2 层:该层包含一组负载均衡实例。这些实例在同一区域内的多个实例之间通过轮循方式实现负载均衡。

  • ELB 将此请求转发到 API 网关。Netflix 使用运行在 AWS EC2 实例上的 ZUUL 作为 API 网关。ZUUL 是由 Netflix 开发的一个库,主要用途包括:动态路由、监控和安全。ZUUL 根据查询参数、URL 和路径进行路由。

  • Netflix 基于一系列服务构建。使用服务集合构建应用程序的方式被称为微服务架构。在这种架构中,服务之间相互独立。

  • 从设备和网站发起的所有请求都要经过 ZUUL 才能到达 Netflix 流媒体应用程序的后端。ZUUL 根据用户请求将其路由到特定的服务。例如,如果用户试图登录,则将请求发送到身份验证服务。

  • Netflix 架构具有复杂的分布式结构。这种结构有很多优点,也存在一些依赖关系。例如,一台服务器可能要依赖于另一台服务器的输出才能工作。这些服务器之间的依赖关系可能会导致延迟,如果其中一台服务器停止工作,还可能导致单点故障。

  • 对于上述问题,Netflix 使用了 Hystrix。Hystrix 是 Netflix 开发的一个功能非常强大的库,它能使微服务之间彼此隔离,从而将失败数降至最低。Hystrix 是通过隔离服务之间的访问点来实现的。Hystrix 的用途包括:快速失败和快速恢复、准实时监视、预警和操作控制,减少通过第三方客户端库访问(通常通过网络)依赖项时可能产生的延迟和故障,避免复杂分布式系统中的级联故障。

  • 用户活动和历史数据会被发送到流处理管道,用于后续的电影推荐。

  • 这些数据还会被发送到 AWS、Hadoop、Cassandra 等大数据处理工具做进一步处理。

 

Netflix 使用的数据库

 

Netflix 使用了两种不同的数据库:

  1. MySQL

  2. Cassandra

 

MySQL


对于账单信息、用户信息和交易信息等数据,因为需要遵从 ACID,所以 Netflix 使用 MySQL 来存储。Netflix 的 MySQL 采用了主-主设置,部署在 Amazon 的大型 EC2 实例上。

 

在主-主设置中,主主节点的写入会被复制到另一个主节点。只有当主主节点和远程主节点的写操作都确认后,才会发送写入确认信息。这确保了数据的高可用性。

 

Netflix 为每个节点(本地和跨区域)设置了读副本,确保了高可用性和可扩展性。

 

Cassandra


Netflix 使用 Cassandra 是因为它的可扩展性、无单点故障和跨区域部署。总之,一个全局 Cassandra 集群就可以既为应用程序提供服务,又跨多个地理位置异步复制数据。

 

Netflix 的 Cassandra 数据模型:

  1. 50+ Cassandra 集群

  2. 500+ 节点

  3. 日备份数据量 30TB

  4. 单节点每秒写入次数 250k

 

Kafka 和 Apache Chukwa 在 Netflix 的应用


如上所述,Netflix 基于一系列微服务构建,这些微服务共同为用户提供许多服务。

 

通常,在微服务架构中,一定的失败率是可以接受的。不过,有些失败可能会导致更大的问题。任何一个微服务调用的失败都可能导致大量计算不同步,并可能导致数据差个几百万美元。那还会导致可用性问题和盲点,让你无法有效地追踪数据并回答用户关于什么导致了数据不匹配的问题。

 

上述问题的解决方案是重新考虑服务的交互方式,将一系列同步请求替换为异步事件交换。这样做有以下好处:

1. 我们的基础设施变成了天生异步的;

2. 我们的应用程序变成了松耦合的,错误的可追溯性得到改进。

 

Netflix 使用 Apache Kafka 来满足事件消息流处理需求。

 

Apache Kafka 以发布/订阅模型为基础。Netflix 的服务将它们的更改作为事件发布到消息总线上,然后由另一个对该消息感兴趣的服务消费,用于调整其自身的状态。

 

这使我们能够跟踪服务状态更改是否同步,如果不同步,那么它们需要多长时间才能完成同步。在管理大型服务依赖图时,这种洞察非常有用。

 

基于事件的通信和去中心化消费帮助我们克服了在大型同步调用图中经常看到的问题(如上所述)。

 

Apache Chukwa


Apache Chukwa 是一个开源的数据收集系统,可用于监控复杂的分布式系统。Chukwa 收集来自不同微服务的事件,并将其写入 Hadoop 文件序列格式。Chukwa 还为 Kafka 提供流量,以便将事件上传到不同的目标,如 S3、Elastic 搜索等。

 

ElasticSearch


Netflix 使用 Elastic 搜索来提供客户支持服务、数据可视化和错误检测。例如,如果用户不能播放视频,那么播放团队将使用 Elastic 搜索来查找问题的原因。它还用于跟踪资源使用情况及检测注册或登录问题。

 

原文链接:

https://medium.com/@nidhiupreti99/understanding-system-design-of-netflix-backend-architecture-and-cloud-services-b077162e45bc

相关阅读:

没有CTO的Netflix:为什么程序员都愿意来?

Netflix 的 CEO:为什么我们愿意高薪雇佣程序员?

不要让框架影响你最初的架构设计

混合云的多活架构指南

2023-09-25 15:2410625

评论

发布
暂无评论
发现更多内容

17个新手常见错误,送给初学Python的你!,憋个大招

程序媛可鸥

Python 程序员 面试

30余种加密编码类型的密文特征分析,差点挂在第四面

程序媛可鸥

Python 程序员 面试

4万字【Python高级编程】保姆式教学,330页PDF10万字的知识点总结

程序媛可鸥

Python 程序员 面试

90后,要有多少存款才正常?答案太扎心了,阿里P8大佬整理

程序媛可鸥

Python 程序员 面试

k8s组件的梳理(1),Python篇

程序媛可鸥

Python 程序员 面试

python pandas库统计分析基础必备知识汇总,2021Python网络编程总结篇

程序媛可鸥

Python 程序员 面试

Python 实现七大排序算法,Python中高级面试必知必会

程序媛可鸥

Python 程序员 面试

Python 深度集成的神器级 IDE,从此告别Excel!,成为阿里P7Python架构师到底有多难

程序媛可鸥

Python 程序员 面试

架构实战营 毕业设计项目

樰巳-堕~Horry

架构实战营 「架构实战营」

Python 基础教程:动态类型模型(1),阿里巴巴Python面试题答案

程序媛可鸥

Python 程序员 面试

2022美赛单变量深度学习LSTM 时间序列分析预测,作为Python开发者

程序媛可鸥

Python 程序员 面试

36,Python基础开发与实践

程序媛可鸥

Python 程序员 面试

CSDN终于破2万粉了,几百块钱的课程可白嫖,就是宠粉,Python笔试面试题

程序媛可鸥

Python 程序员 面试

k8s组件的梳理,Glide的缓存机制

程序媛可鸥

Python 程序员 面试

Kafka 常用命令总结,给Python程序员的一些面试建议

程序媛可鸥

Python 程序员 面试

kudu参数优化设置,让集群飞起来~,2021年Python开发陷入饱和

程序媛可鸥

Python 程序员 面试

10个Python set 常用操作函数!,oppoPython面试题

程序媛可鸥

Python 程序员 面试

28,2021最新Python面试笔试题目分享

程序媛可鸥

Python 程序员 面试

Girlfriend含苞待笑——一次性处理上百份文档,Python开发实战讲解

程序媛可鸥

Python 程序员 面试

python DataFrame数据格式化(设置小数位数,百分比,Python常用面试题

程序媛可鸥

Python 程序员 面试

Python 命令行参数详解,Pythonui基础

程序媛可鸥

Python 程序员 面试

Apple任意代码执行漏洞,为了跳槽强刷1000道Python真题

程序媛可鸥

Python 程序员 面试

Kafka server,Python面试

程序媛可鸥

Python 程序员 面试

Python 使用 PyQt5 开发的关机小工具分享,为什么阿里的程序员成长如此之快

程序媛可鸥

Python 程序员 面试

【C语言】 扫雷游戏(保姆级的实现过程)

謓泽

3月月更

百度希壤元宇宙平台上线首个汽车数字展厅,领克探索汽车营销新方式

百度大脑

Python 三十个实践、建议和技巧,各种风格的Python面试题进来了解一下

程序媛可鸥

Python 程序员 面试

Python 基础教程:动态类型模型,超通俗解析

程序媛可鸥

Python 程序员 面试

Redis的数据类型实践

javaadu

Redis 核心技术与实战 Redis 数据结构

一个配件、一块面料,制造企业流水线因为AI变了新模样

百度大脑

Python GUI编程:关于 tkinter 怎么才能写出更好看的界面

程序媛可鸥

Python 程序员 面试

深入解析Netflix后端架构与云服务的系统设计_多云/混合云_InfoQ精选文章