如何设计一个支持三千万用户同时在线的短视频系统?

架构设计内容分享(五十二):亿级短视频,如何架构? 对象存储的出现是为解决了存储海量大数据的问题,如存储海量的视频、图片,并进行数据归档、数据备份、大数据分析等操作。对象存储一般采用key-object的扁平化存储架构,使用方便,调用API就可进行数据的多样化读写。其大容量、动态扩展、数据灾备等性能,是传统文件存储和NAS无法比拟的。MinIO是一套基于Apache License V2.0协议的轻量级、高性能开源对象存储框架,适用于图片、视频、镜像等海量非结构化数据存储。 阅读详情

短视频(short video)通常时长在15分钟以内,主要是在移动智能终端上进行拍摄、美化编辑或加特效,并可以在网络社交平台上进行实时分享的一种新型视频形式。短视频具有时间短、信息承载量高等特点,更符合当下网民手机使用行为习惯,短视频的用户流量创造了巨大的商机。

我们准备开发一个面向全球用户的短视频应用,用户总量预计20亿,应用名称:QuickTok。

视频文件和其他媒体文件相比,会更大一点,这就意味着存储短视频文件需要更大的存储空间,播放短视频也需要更多的网络带宽。因此,QuickTok的主要技术挑战是:如何应对高并发用户访问时的网络带宽压力,以及如何存储海量的短视频文件。接下来我们就来看看QuickTok的需求与技术架构。

由于篇幅限制,只能给大家展示小部分内容,
全套面试笔记及答案【点击此处】即可免费获取

10.1 需求分析

QuickTok的核心功能需求非常简单:用户上传视频、搜索视频、观看视频。我们将主要分析非功能需求。

QuickTok预计用户总量为20亿,日活用户约10亿,每个用户平均每天浏览10个短视频,由此可以预估,短视频日播放量为100亿:

\(\\small 10亿\\times10=100亿\)

平均播放QPS为11万/秒:

\(\\small 100亿\\div(24\\times60\\times60)\\approx11万/秒\)

每秒11万用户点击视频,假设用户平均观看5分钟,那么同时在观看的视频数就是:

\(\\small 11万/秒\\times5\\times60秒=3千万\)

假设每个短视频的平均播放次数200次,那么为了支撑这样体量的播放量,平均需要每秒上传视频数:

\(\\small 11万/秒\\div200=550/秒\)

每个短视频平均大小100MB,每秒上传至服务器的文件大小为:

\(\\small 100MB\\times550=55GB\)

(视频虽然不是一秒内上传至服务器的,但是这样计算依然没有问题。)

每年新增视频需要的存储空间:

\(\\small 55GB\\times60\\times60\\times24\\times365=1700PB\)

事实上,为了保证视频数据的高可用,不会因为硬盘损坏导致数据丢失,视频文件需要备份存储,QuickTok采用双副本的备份存储策略,也就是每个视频文件存储三份,需要的总存储空间:

\(\\small 1700PB\\times3=5200PB\)

而播放视频需要的总带宽:

\(\\small 11万\\times100MB\\times8bit=88Tb\)

因此,我们需要设计的短视频应用是一个每秒上传550个视频文件、11万次播放、新增165GB存储以及88Tb总带宽的高并发应用系统。这个系统呢需要是高性能的,能迅速响应用户的上传和播放操作,也需要是高可用的,能面向全球用户提供7 * 24小时稳定的服务。

10.2 概要设计

QuickTok的核心部署模型如下图。

用户上传视频时,上传请求会通过负载均衡服务器和网关服务器,到达视频上传微服务。视频上传微服务需要做两件事:一是把上传文件数据流写入视频文件暂存服务器;二是把用户名、上传时间、视频时长、视频标题等视频元数据写入分布式MySQL数据库。

视频文件上传完成后,视频上传微服务会生成一个视频上传完成消息,并将其写入到消息队列服务器。视频内容处理器将消费这个上传完成消息,并根据消息内容,从视频文件暂存服务器获取视频文件数据,进行处理。

视频内容处理器是一个由责任链模式构建起来的管道。在这个管道中,视频将会被顺序进行内容合规性审查、内容重复性及质量审查、内容标签生成、视频缩略图生成、统一视频转码处理等操作,如下图。

合规且非重复的视频会经过统一转码,最终被写入分布式文件存储和CDN。这样视频上传处理就完成了,具体时序图如下。

以上就是对视频上传环节的设计,接下来我们将讨论对视频搜索及播放部分的设计,即核心部署模型图中标红的部分,如下。

视频搜索引擎会根据用户提交的视频标题、上传用户等元数据,以及视频内容处理器生成的内容标签构建倒排索引。当用户搜索视频时,系统会根据倒排索引来检索符合条件的视频,并返回结果列表。结果列表在App端向用户呈现时,会将此前视频内容处理器生成的缩略图展现给用户,使用户对视频内容有个初步而直观的感受。

当用户点击缩略图时,App开始播放视频。App并不需要下载完整个视频文件才开始播放,而是以流的方式一边下载视频数据,一边播放,使用户尽量减少等待,获得良好的观看体验。QuickTok使用MPEG–DASH流媒体传输协议进行视频流传输,因为这个协议具有自适应能力,而且支持HTTP,可以应对QuickTok的视频播放需求。

10.3 详细设计

为解决QuickTok的两个重要问题:如何存储海量视频文件?如何解决高并发视频播放导致的带宽压力?详细设计将关注视频存储系统、性能优化与CDN。

此外,“如何生成更吸引用户的缩略图”是短视频应用用户体验的一个关键问题,详细设计也会关注缩略图生成与推荐的设计实现。

10.3.1 视频存储系统设计

由需求分析可知,QuickTok每年新增5200PB的存储。因此,“如何存储海量视频文件”就是QuickTok设计的重要挑战之一。对此,我们可以尝试与[网盘]相同的存储技术方案,将视频文件拆分成若干block,使用对象存储服务进行存储。

但QuickTok最终采用了另一种存储方案,即使用Hadoop分布式文件系统HDFS进行存储。HDFS适合大文件存储的一次写入多次读取的场景,满足视频一次上传多次播放的需求;同时,它还可以自动进行数据备份(缺省配置下,每个文件存储三份),也满足我们关于数据存储高可用的需求。

HDFS适合存储大文件,大文件减少磁盘碎片,更有利于存储空间的利用,同时HDFS NameNode的访问压力也更小,所以我们需要把若干个视频文件合并成一个HDFS文件进行存储,并将存储相关的细节记录到HBase中。

举个例子,当用户上传一个视频文件,系统会自动生成一个视频ID,这里假设这个ID是123。视频内容处理器先对视频进行一系列处理,再调用视频文件存储服务来进行存储。

存储服务首先通过HDFS创建一个文件,比如/data/videos/clust0/p0/000000001,然后将视频文件数据顺序写入到HDFS中。写完后,存储服务就可以得到这个HDFS文件的全路径名(/data/videos/clust0/p0/000000001)、视频文件在HDFS中的偏移量0、文件大小99,000,000B。

然后,视频文件存储服务再将这些信息记录到HBase中,主键就是视频ID<123>,value就是。

假设另一个用户上传的视频ID为456,文件大小100,000,000B,紧随着上一个视频文件,也保存到同一个HDFS文件中。那么HBase中就可以记录主键<456>,value。

当其他用户播放视频456时,播放微服务根据主键ID在HBase中查找value值,得到HDFS文件路径/data/videos/clust0/p0/000000001,从该文件99,000,000偏移位置开始读取100,000,000Byte数据,就是视频ID 456完整的文件数据了。

10.3.2 性能优化与CDN设计

我们前面分析过,QuickTok需要的总带宽是88Tb,这是一个非常巨大的数字。如果单纯靠QuickTok自己的数据中心来承担这个带宽压力,技术挑战和成本都非常巨大。只有通过CDN将用户的网络通信请求就近返回,才能缓解数据中心的带宽压力。

App请求获取视频数据流的时候,会优先检查离自己比较近的CDN中是否有视频数据。如果有,直接从CDN加载数据,如果没有,才会从QuickTok数据中心获取视频数据流。

如果用户的大部分请求都可以通过CDN返回,那么一方面可以极大加快用户请求的响应速度,另一方面又可以较大缓解数据中心的网络和硬盘负载压力,进一步提升应用整体的性能。

通常的CDN设计,是在CDN中没有用户请求的数据时,进行回源,即由CDN请求数据中心返回需要的数据,然后缓存在CDN本地。

但QuickTok考虑到了短视频的特点:大V、网红们发布的短视频会被更快速、更广泛地播放。因此针对粉丝量超过10万的用户,系统将采用主动推送CDN的方法,以提高CDN的命中率,优化用户体验,如图:

从图中可以看出,视频内容处理器进行完视频处理后,一方面会将视频存储到前面说过的视频存储系统中,另一方面又会调用CDN推送服务。然后,CDN推送服务将调用大数据平台,获取视频上传者的活跃粉丝数、粉丝分布区域等数据。如果是10万粉丝以上的用户发布了短视频,CDN推送服务会根据其粉丝活跃的区域,将视频推送到对应区域的CDN服务器上。

短视频的完播率通常不足30%,所以QuickTok也不需要将完整视频推送到CDN,只需要根据视频发布者的历史播放记录,计算其完播率和播放期望进度,然后将短视频切分成若干chunk,将部分chunk推送到CDN即可。

业界一般共识,视频应用CDN处理的带宽大约占总带宽的95%以上,也就是说,通过合理使用CDN,QuickTok数据中心需要处理的带宽压力不到4Tb。

10.3.3 缩略图生成与推荐设计

用户可以通过App主页、搜索结果页、视频推荐页等页面看到视频列表,其中每个视频都需要有个缩略图。用户点击缩略图,就开始播放视频。

缩略图通常是由视频的某一帧画面缩略而生成的。事实上,缩略图的选择会极大地影响用户点击、播放视频的意愿。一个10分钟的视频大约包含3万帧画面,选择哪一帧画面,才能使用户点击视频的可能性最大?以及,针对不同的用户分类,是否选择不同的缩略图会产生更高的点击率?

我们需要通过大数据平台的机器学习引擎来完成缩略图的生成和推荐,如下图。

……

支持三千万用户同时在线的短视频系统设计学习:QuickTok 架构全解析 摘要:QuickTok短视频系统采用分层架构设计,支持三千万用户同时在线、11万播放QPS和年增5200PB存储。核心通过分片上传、责任链处理管道、HDFS+HBase合并存储、CDN主导分发等关键技术,实现高并发低延迟播放和海量视频存储。系统采用异步解耦设计,95%播放流量由CDN承载,结合DASH流媒体协议和个性化缩略图推荐,提升用户体验。多地域部署和容错机制保障99.99%可用性,数据驱动优化使点击率提升25%。该架构兼顾性能、成本和扩展性,满足持续增长的业务需求。 阅读详情

相关推荐

【Java】如何设计一个支持三千万用户同时在线的短视频系统?

短视频(short video)通常时长在15分钟以内,主要是在移动智能终端上进行拍摄、美化编辑或加特效,并可以在网络社交平台上进行实时分享的一种新型视频形式。短视频具有时间短、信息承载量高等特点,更符合当下网民手机使用行为习惯,短视频的用户流量创造了巨大的商机。我们准备开发一个面向全球用户的短视频应用,用户总量预计20亿,应用名称:QuickTok。视频文件和其他媒体文件相比,会更大一点,这就意味着存储短视频文件需要更大的存储空间,播放短视频也需要更多的网络带宽。

alen101的博客 1220

短视频系统设计:如何支持三千万用户同时在线看视频?

我们在缩略图生成部分,使用了大数据和机器学习的一些技术,如果你不熟悉,可能会觉得有点困难。但是现在人工智能和机器学习几乎是稍具规模的互联网系统的标配,架构师作为整个系统的设计者、技术负责人,可能对算法的细节无法做出具体的优化,但是对于算法在整个架构中的作用、相关数据的处理和流转必须非常熟悉,才能设计出满足业务需要的架构方案。

Java全能学习+面试指南 764

Java仿抖音短视频小程序开发

网上找到了很多资源,可是都是缺少的,难得找了全面的教程,视频+代码分享

应用apache+tomcat的方式,是否可以支持3000人同时在线访问

 一个棉花电子商务网站,每天在交易时的同时在线人线平均2500人左右,主要是在线观看实时行情。同时,网站提供大量的信息发布,论坛,在线电子商务等功 能。准备应用J2EE来实现,应用apache+tomcat的方式,是否可以支持3000人同时在线访问。如果不行,有什么好的建议,最好是免费的应用 服务器 问题 一个支持3000用户同时在线的系统,关键点已经不紧紧是软件的问题了,还在于硬件配置上。

longminbo的专栏 1万+

java精仿抖音短视频开发源码android stdio完整源码

java开发抖音视频源码! 安装说明: 安卓语言是:android stdio 苹果语言是:OC 环境是:php5.6 数据库是:sql5.5 伪静态设置:thinkphp 上手有难度,自测一下吧!!

(完整版)从零开始教你玩转ComfyUI-保姆级部署教程-手把手带你ComfyUI工作流搭建

ComfyUI就像拥有一支神奇魔杖,可以轻松创造出令人惊叹的AI生成艺术。从本质上讲,ComfyUI是构建在Stable Diffusion之上的基于节点的图形用户界面(GUI),而Stable Diffusion是一种最先进的深度学习模型,可以根据文本描述生成图像。但ComfyUI真正特别之处在于,它如何让像你这样的艺术家释放创造力,将你最疯狂的想法变为现实。想象一下有一块数字画布,你可以通过连接不同的节点来构建自己独特的图像生成工作流,每个节点代表一个特定的功能或操作。

php源码 4万+

如何用java怎么制作一个短视频

请注意,在创建短视频时,您需要考虑视频制作、编辑、剪辑、动画、特效和音频方面的需求,这同样需要手动编辑或使用外部 API 或服务才能完成。因此,真正制作出令人满意的短视频通常需要多科专业技能的协作,并使用多种不同的编程语言和工具。Java音视频框架:例如FFmpeg(一个开源解决方案,主要用于音频和视频流点播和转换),JCodec(一个Java视频编码/解码库),Xuggler等。Java图形库:例如JavaFX或Java2D,这些库可以让您绘制2D和3D图形,从而处理视频数据和效果。

qq_35216414的博客 1719

AutoDL上传数据详细步骤(自己用的步骤,可能没有其他大佬用的那么高级)

AutoDL上传数据详细步骤(自己用的步骤,可能没有其他大佬用的那么高级)

孟孟单单的博客 7万+

短视频系统设计:支持三千万用户同时在线看视频

通过本文的详细介绍,您应对如何设计一个支持三千万用户同时在线看视频的短视频系统有了全面的了解。我们讨论了需求分析、系统架构设计、视频存储设计、视频传输设计、负载均衡与高可用性、缓存策略、性能优化与监控、安全性与防护措施等方面。通过合理利用这些技术手段,可以构建一个高效、稳定和可靠的短视频系统,满足高并发和高可用性的需求。

lssffy的博客 1580

k8s RoCE 部署: k8s-rdma-shared-dev-plugin + macvlan cni

写给自己的入门篇 文章目录前言一、创建 k8s 集群二、启用 primary network三、启用 secondary networkk8s-rdma-shared-dev-pluginMultus CNISecondary CNIMulti-Network CRD四、启用 pod五、在 pod 中启动 RoCE 流量总结 前言 写给自己的扫盲篇。后续会在原理方面持续更新 一、创建 k8s 集群 k8s 集群的创建有多种方法,可以按照官方文档的说明来.

sunshuying1010的博客 9776

OpenCV学习笔记(25)基于MFC和OpenCV的摄像机定标与立体匹配测试程序(20140505更新)

最近整理了一下这两年一直在用的摄像机定标与立体匹配测试程序,将代码进行了重构,界面也做了调整,分享出来方便有需要的朋友使用。当然我的编程能力有限,程序可能还有各种bug,请大家多多包涵。相关问题欢迎留言或email联系讨论,谢谢! ==================================================================================源码

晨宇思远 5万+

高并发短视频系统设计:架构、存储与性能优化全解

在本文中,我们详细介绍了如何设计一个支持三千万用户同时在线看视频的短视频系统,重点包括以下几个方面:理解短视频系统的核心模块。精确估算用户需求,面对高并发的挑战。搭建基础架构,实现视频上传、播放、搜索等核心功能。采用消息队列和分布式系统实现高效的并发处理。采用HDFS分布式文件系统存储海量视频文件。设计数据高可用机制,确保数据安全性和一致性。通过缓存、异步处理、CDN和限流机制,提升系统性能和稳定性。使用动态调整视频质量的方法,合理管理系统带宽。生成高质量缩略图,提升用户点击率。

逆流的小鱼 4175

机器学习势能(MLPs) 第一章 基础理论与核心概念 第二章 数据生成与训练集构建

密度泛函理论(DFT)作为现代计算材料科学的基石,通过求解Kohn-Sham方程在电子结构层面提供可靠的势能面信息。然而,其计算复杂度随体系电子数呈O(N3) 至O(N4) 增长,对于包含数百个原子的体系,单点计算往往需消耗数小时至数天的计算资源。这一瓶颈严重限制了分子动力学模拟的时间尺度,传统DFT-MD通常仅能覆盖皮秒量级,远不足以观测扩散、相变等慢动力学过程。经验力场通过解析函数形式描述原子间相互作用,实现了经典力学的计算效率,但其参数化过程高度依赖物理直觉与经验调参。

VectorShift的博客 182

Java面试题及答案总结(2025版持续更新)

接下来的内容,将基于最新面试实况,为你揭示如何在新时代的Java面试中展现真正的工程实力。37.微信抢红包的功能是如何实现的,如果让你来做你怎么设计?18.如果让你设计一个支持千万级流量的架构,你会怎么设计?7.设计一个支持10WQPS的评论中台,你会怎么设计?10.如何设计一个支持三千万用户同时在线的短视频系统?5.字节二面:如何设计一个支持10万QPS的会员系统。他们真正想考察的,是你如何将这些技术原理,转化为。16.如何设计一个支持5亿用户规模的网约车系统?

m0_50180963的博客 978

【导航理论&实战篇】四足机器人弹簧倒立摆(SLIP)动力学模型

认知有限,望大家多多包涵,有什么问题也希望能够与大家多交流,共同成长!本文先对四足机器人动力学模型-VMC、SLIP和浮动机体模型做个简单的介绍,具体内容后续再更,其他模块可以参考去我其他文章四足机器人弹簧加载倒立摆(SLIP)动力学模型是一种用于描述和分析四足机器人在运动过程中动态特性的理论模型。这种模型将四足机器人的腿部简化为弹簧,而机器人的身体则被视为一个倒立摆,这样的抽象使得研究者能够更容易地分析和控制机器人的运动。提示:以下是本篇文章正文内容。

qq_35635374的博客 805

【YOLOv8系列】YOLOv8的webUI界面设计;通过Streamlit实现YOLOv8的可视化交互界面设计

但是我为了避免重复性的工作,且为了避免重复安装之前(安装pytorch和yolov8时)已经安装好的库,因此写了一个python脚本进行安装;需要提前在有网络连接的电脑上下载所有必要的依赖项,然后将这些文件传输到离线的机器上进行安装。脚本将自动跳过已安装的包,并安装其余的 .whl 文件。在离线的机器上,切换到包含下载好的文件的目录。证明我们的streamlit安装成功了。证明你的streamlit安装成功了。第一步:在有网络连接的电脑上下载。第二步:将下载的文件传输到离线机器。文件)传输到离线的机器上。

AnChenliang_1002的博客 1566

SpringBoot一个接口实现任意表的 Excel 导入导出

往期热门文章: 1、100 行代码搞定了 RPC 原理,大家随便问! 2、新一代搜索引擎,据说是 ES 的15倍? 3、简化Maven项目依赖:优雅去除未使用Jar包! 4、Redis Plus 来了,性能炸裂! 5、如何设计一个支持三千万用户同时在线的短视频系统? 原文:juejin.cn/post/7356508172419481663Java的web开发需要excel的导入导出工具,所以需...

Java后端技术 147

Python面试题及详细答案150道(126-135) -- 数据库交互篇

本文介绍了Python中操作MySQL、SQLite数据库及ORM框架的核心技术。主要内容包括:1. 使用pymysql连接MySQL数据库,演示了连接配置、SQL执行和事务管理;2. ORM原理及主流框架SQLAlchemy和Django ORM的示例;3. 通过sqlite3模块操作轻量级SQLite数据库;4. 数据库事务的ACID特性解析。这些内容涵盖了Python数据库开发的关键知识点,适合准备前后端面试的开发者复习核心概念和实际应用。

大剑师兰特的GIS世界 1727
上一篇: 2025年Java后端高频八股文专题(含答案)
下一篇: 需要设计一款基于LBS的交友系统,如何设计地理空间邻近算法?
Java阿福
博客等级 码龄2年 61粉丝 14原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值