本周系统设计复习:
- API 分页:使数十亿产品滚动成为可能
- 设计直播系统
- NAT 如何使互联网增长成为可能
- 必须知道的系统设计构建块
设计直播系统
Mike Tyson vs. Jake Paul 上周在 Netflix 上直播。
让我们分解直播系统的典型技术栈。
直播具有挑战性,因为视频内容以近实时方式通过互联网发送。视频处理是计算密集型的。通过互联网发送大量视频内容需要时间。这些因素使直播具有挑战性。
下图解释了幕后发生什么使这成为可能。
直播系统 8 步骤
步骤 1:主播开始他们的直播。来源可以是连接到编码器的任何视频和音频来源。
步骤 2:为主播提供最佳上传条件,大多数直播平台在世界各地提供存在点服务器。主播连接到离他们最近的存在点服务器。
步骤 3:传入视频流被转码为不同分辨率,并分成几秒长的小视频片段。
步骤 4:视频片段被打包成视频播放器可以理解的不同直播流格式。最常见的直播流格式是 HLS,或 HTTP Live Streaming。
步骤 5:来自打包步骤的生成的 HLS 清单和视频块由 CDN 缓存。
步骤 6:最后,视频开始到达观看者的视频播放器。
步骤 7-8:为支持重播,视频可以选择存储在存储中,如 Amazon S3。
NAT 如何工作
网络地址转换(NAT)是使互联网增长成为可能的过程。
NAT 工作原理
- 在公司或家庭环境中,多个设备(手机、电脑等)共享一个路由器,具有单个公共 IP 地址
- 当设备想访问互联网时,它向路由器发送请求。请求包含设备的私有 IP 地址
- 路由器的 NAT 过程用路由器的公共 IP 替换私有 IP
- 修改的请求发送到互联网
- 当响应返回时,NAT 检查其记录并用正确的私有 IP 替换公共 IP。它将响应发送到正确的设备
NAT 的几个重要用途
- 它帮助节约公共 IP 地址。没有 NAT,IPv4 地址会更快耗尽,严重限制互联网的增长
- 它允许在多个设备之间共享单个公共 IP 地址
- NAT 充当基本防火墙,隐藏内部 IP 地址
- NAT 也使管理大型网络变得容易
系统设计构建块
这些分为 6 大类别:
1. 分布式计算
- 分布式消息队列:促进异步通信和解耦服务
- 分布式缓存:通过将频繁访问的数据存储在内存中提高性能
- 分布式任务调度器:管理和协调任务的执行
2. 可扩展性和性能
- 扩展服务:帮助调整服务容量以处理需求变化
- CDN:从地理位置更近的地点服务内容以提高性能并减少延迟
- 一致性哈希:在添加或移除节点时最小化键的重新映射
3. 服务管理
- 服务发现:使服务能够找到并相互通信,而无需硬编码网络位置
4. 网络和通信
- DNS:将人类可读的域名转换为 IP 地址
- 负载均衡器:在多个服务器之间分发传入网络流量
- API 网关:充当一组微服务的单一入口点
5. 数据存储和管理
- 数据库:存储和管理结构化数据
- 对象存储:帮助存储复杂对象,如图像、视频和文档
- 分片:帮助水平跨多个节点分区数据
- 复制:帮助通过将数据复制到多个节点水平扩展数据库
6. 可观察性和弹性
- 通过指标、日志和追踪获得对系统内部状态的洞察
本文为学习目的的个人翻译,译文仅供参考。
原文链接:EP139: Design a Live Streaming System。
版权归原作者或原刊登方所有。本文为非官方译本;如有不妥,请联系删除。