欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 八卦 > Next.js + Droplet:高并发视频内容平台部署与优化扩展实战

Next.js + Droplet:高并发视频内容平台部署与优化扩展实战

2025/4/16 14:44:49 来源:https://blog.csdn.net/DO_Community/article/details/147122792  浏览:    关键词:Next.js + Droplet:高并发视频内容平台部署与优化扩展实战

在构建在线服务时,无论你是开发者还是企业技术负责人,扩展性和稳定性始终是绕不开的核心挑战。尤其在涉及高并发访问、大量数据传输和持续内容分发的场景中,系统架构的设计直接决定了用户体验与业务成效。

本文将以视频点播(Video-on-Demand, VoD)平台为案例,深入解析一套可复用的技术方案,帮助你了解如何基于 DigitalOcean Droplets 构建、部署并扩展支持大规模访问的在线服务架构。虽然示例聚焦在 OTT(Over-the-Top) 视频平台,但这套方法同样适用于其他典型业务场景,例如:

  • 在线教育平台需支持高清视频课程播放;
  • 企业内部培训系统需要稳定传输与权限管理;
  • 创作者社区需承载高频上传与分发;
  • 电商或品牌网站希望引入视频营销内容。

通过这篇文章,你将了解如何:

  • 构建支持高质量视频流的服务体系;
  • 应对用户激增时的负载挑战,避免服务宕机;
  • 灵活管理带宽与存储,确保资源高效利用;
  • 保持系统弹性与成本可控,支持业务持续增长。

无论你正在优化现有架构,还是计划构建下一代内容平台,本文都将提供一套值得借鉴的思路和实践经验。话不多说,我们正式开始。

前提条件

  • 一个 DigitalOcean 账户,用于创建 Droplets。
  • 对 Next.js 有基本了解(如果您还需要构建一个基于 Next.js 的应用;否则,您可以直接 fork 和克隆本文提到的 GitHub 仓库进行测试)。

在我们开始构建之前,让我们首先了解像 Netflix 这样的流媒体平台是如何工作的。为了将内容交付给数百万用户,他们依赖于强大的服务器。我们也将通过 DigitalOcean Droplets 创建自己的服务器。

什么是 DigitalOcean Droplets?

DigitalOcean Droplet 是一个基于 Linux 的虚拟机(VM),运行在 DigitalOcean 的云基础设施上。可以将它看作是您在云端的虚拟服务器,可以独立使用,也可以作为更大的云基础设施的一部分使用。

每个 Droplet 都是一个完全功能的服务器,拥有自己的 CPU、RAM 和 SSD 存储。您可以根据需求选择各种配置(大小),从基础型(basic)的 1GB RAM / 1 vCPU 设置到性能更好的 32GB RAM / 16 vCPU 机器。您可以通过 DigitalOcean 的控制面板或 API 轻松调整大小、备份和管理 Droplets(我们将在本文后面部分中看到这些操作)。另外,我们也曾在博客中介绍过不同类型DigitalOcean Droplet 的配置与适用场景,可浏览往期内容进一步了解。

了解我们的视频点播应用的工作原理

设置很简单:我们有一个基于 Next.js 的前端、来自 DigitalOcean 的服务器以及访问它的客户端(用户)。

具体流程如下:

  1. 用户通过浏览器或移动设备访问应用;
  2. 所有请求由一个 DigitalOcean Droplet 处理;
  3. 这个 Droplet 运行以下内容:
    1. 提供前端和 API 的 Next.js 应用;
    2. 用于存储上传内容的视频库。

以下是流程架构图:

这个设置比 Netflix 的基础设施简单得多,后者需要多个区域的多台服务器来服务数百万用户。在后面的章节中,我们将讨论如何升级 Droplet,以处理更多的并发用户并加快视频处理速度。


在 DigitalOcean Droplet 上部署 Next.js 应用

本文示例中的视频点播平台是用 Next.js 构建的,我们将展示如何克隆它并将其托管在 Droplet 上。

1、从 GitHub fork 和克隆仓库,然后进入“设置”,在“部署密钥”下添加使用 ssh-keygen 命令生成的 SSH 密钥。

2、创建一个 $12/月的基础型(Basic)的 Droplet 来托管我们的应用。

3、Droplet 创建完成后,使用命令 ssh root@ipaddress 连接它,然后运行以下命令进行准备工作:

# 更新并安装 Node.js
sudo apt update && sudo apt upgrade -y
curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash -
sudo apt install -y nodejs nginx# 安装 PM2 进行进程管理
sudo npm install -g pm2

4、配置 Nginx 以运行 Next.js 应用:

# 创建 Nginx 配置
sudo nano /etc/nginx/sites-available/video-on-demand

添加以下内容:

server {listen 80;server_name yourip;location / {proxy_pass http://localhost:3000;proxy_http_version 1.1;proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection 'upgrade';proxy_set_header Host $host;proxy_cache_bypass $http_upgrade;}
}

启用站点并重启 Nginx:

sudo ln -s /etc/nginx/sites-available/video-on-demand /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl restart nginx

如果 Nginx 配置正确,当你运行 sudo nginx -t 命令时,你会看到以下输出:

接下来的步骤是克隆 GitHub 仓库。我们复制下图中显示的 SSH 链接,然后运行以下命令来启动并运行它:

https://github.com/Haimantika/video-on-demand

# 设置应用
git clone git@github.com:Haimantika/video-on-demand.git
cd frontend
npm install
npm run build

最后一步是通过 IP 地址访问应用,为此我们将使用 PM2。你可以通过命令 npm install -g pm2 安装它,然后使用以下命令通过 PM2 运行应用:

# 使用 PM2 启动
cd /var/www/video-on-demand/frontend
pm2 start npm --name "video-on-demand" -- start
pm2 save
pm2 startup

如果你想了解更多关于在 DigitalOcean Droplet 上部署 Next.js 应用的内容,可以参考教程 在 DigitalOcean Droplet 上部署 Next.js 应用。

现在我们的点播视频应用已经在基础 Droplet 上运行了。让我们了解它如何表现,以及何时可能需要升级。一个很好的例子是为什么服务器配置很重要,比如 Mike Tyson 和 Jake Paul 的比赛,Netflix 遭遇了缓冲、卡顿和崩溃等问题。虽然上传内容与直播的工作方式不同,但服务器配置至关重要,尤其是在处理大量观众激增以及防止崩溃和缓冲问题时。

添加负载均衡器

通常,扩展像这样的应用的第一步是添加负载均衡器。由于它能够分配传入流量并为应用提供单一入口点,因此更容易扩展。要为你的 Droplet 添加负载均衡器,请按照教程《如何创建区域负载均衡器》中提到的步骤操作。

当你成功为 Droplet 添加负载均衡器后,你会在控制面板中看到以下内容:

通过这种方式,你现在可以更好地管理流量,提高响应时间,实现 SSL 终止和健康监控。

处理更多上传的垂直扩展

虽然负载均衡器在分配流量方面表现出色,但你需要垂直扩展来处理更多的上传和视频处理任务。垂直扩展意味着将现有的 Droplet 升级为更大的配置,类似于升级计算机的硬件。这可以提供更高的 CPU 性能来处理上传任务,更多的 RAM 来处理并发请求,以及更快的磁盘 I/O 来存储视频。此外,垂直扩展在处理大文件上传方面表现更好,并且在访问库时具有更快的响应时间。

让我们通过示例和基准测试来理解这一点,并比较基础 Droplet 和高级 Droplet 的性能。

基准测试我们的视频点播应用

在本节中,我们将看到应用在不同 Droplet 配置上的性能表现。我们将比较两种 Droplet 的性能:普通 Intel(1 个 vCPU/2 GB 内存)价格为每月 12 美元,以及高级 Intel(2 个 vCPU/4 GB 内存)价格为每月 32 美元。

以下是我们在升级前和升级后的对比:

要了解如何调整 Droplet 的大小,请参考教程《如何调整 Droplet 的大小以实现垂直扩展》。

为了进行基准测试,我们将使用以下指标:

  1. CPU 性能测试(sysbench)
  2. 磁盘性能测试(fio)
  3. 网络速度测试(speedtest-cli)
  4. 并发用户负载测试(Apache Benchmark)
  5. 首字节时间(TTFB)

CPU 性能测试(sysbench)

这衡量服务器处理计算任务的处理能力和效率。

为了测试 Droplet 的 CPU 性能,我们将使用以下命令:

sudo apt update && sudo apt install -y sysbench
sysbench cpu run --threads=4 --time=30

比较结果如下:

指标基础 Intel(12 美元)高级 Intel(32 美元)提升幅度
每秒事件数413.50958.682.32 倍
总事件数(30 秒)12,40828,7662.32 倍
平均延迟9.64 毫秒4.16 毫秒响应时间快约 57%
95 百分位延迟14.21 毫秒10.27 毫秒稳定性提高 28%
最大延迟22.63 毫秒33.53 毫秒峰值更高,但平均值更好
线程公平性(标准差)1.87115.63高级 Droplet 分配工作更好

从表中可以看出,高级 Droplet 的 CPU 性能约快 2.3 倍,平均响应时间降低 57%,在高负载下具有更好的稳定性。由于视频点播应用通常处理高流量和 CPU 密集型任务(如视频处理),升级 Droplet 可显著提高性能。

磁盘性能测试(fio)

这评估存储的读写速度和 IOPS(每秒输入/输出操作数),用于视频上传和存储。

为了进行磁盘性能测试,我们将使用以下命令:

sudo apt install -y fio
fio --name=randrw --rw=randrw --bs=4k --size=1G --numjobs=4 --runtime=60s

基础 Intel 和高级 Intel Droplet 的对比结果如下:

指标基础 Droplet(1 个 vCPU)高级 Droplet(2 个 vCPU)提升幅度
读取速度21.9 MiB/s (22.9 MB/s)38.9 MiB/s (40.8 MB/s)约快 77%
写入速度21.9 MiB/s (22.9 MB/s)39.0 MiB/s (40.9 MB/s)约快 78%
平均 IOPS1414.822501.28约高 76.7%
平均延迟(微秒)9.64 毫秒4.16 毫秒约低 57%(更好)
磁盘利用率32.59%61.01%高级 Droplet 资源利用率更高

从表中可以看出,高级 Intel Droplet 在获取视频、视频上传和存储操作方面表现更好,并且每秒可以处理更多的 I/O 操作,这对于视频密集型应用来说是理想的。

网络速度测试(speedtest-cli)

这测试上传/下载速度和延迟,用于视频流传输。

为了进行网络速度测试,我们运行以下命令:

sudo apt install -y speedtest-cli
speedtest-cli

在基础 Intel Droplet 和高级 Intel Droplet 上运行时,我们得到以下结果:

指标基础 Intel高级 Intel提升幅度
延迟(Ping)3.398 毫秒2.019 毫秒约低 40.6%(更好)
下载速度1449.83 Mbit/s4976.82 Mbit/s约快 3.4 倍
上传速度976.40 Mbit/s1939.47 Mbit/s约快 2 倍

对于需要快速内容交付的视频点播应用,高级 Intel Droplet 带来了更好的结果,因为它具有 3.4 倍的下载速度、2 倍的上传速度和更低的延迟。

并发用户负载测试(Apache Benchmark)

并发负载测试模拟多个用户,以衡量服务器处理同时连接的能力。

我们使用以下命令对应用进行了 100 个用户的负载测试:

sudo apt install -y apache2-utils
ab -n 1000 -c 100 http://yourdomain.com/video.mp4

测试结果如下:

指标基础 Droplet(12 美元)高级 Droplet(32 美元)提升幅度
每秒请求数8.06 [#/秒]3716.82 [#/秒]吞吐量显著提高
每请求时间(平均)12402.048 毫秒26.905 毫秒响应时间大幅缩短
每请求时间(并发)124.020 毫秒0.269 毫秒高效处理并发请求
传输速率404.28 KB/秒1622.48 KB/秒数据传输速度更快
处理时间333 / 11845 / 151856 / 14 / 36处理时间减少
等待时间290 / 11706 / 151005 / 11 / 35请求等待时间最少

这表明,高级 Intel Droplet 更快,能够高效处理高负载,而基础 Intel Droplet 在并发流量下表现不佳,不适合扩展到更多用户。

首字节时间(TTFB)

这是为了衡量服务器开始向用户发送数据的速度。

为了测试首字节时间,我们使用以下命令:

curl -o /dev/null -s -w "%{time_starttransfer}\\n" http://yourdomain.com/video.mp4

基础 Droplet 的 TTFB 为 3.5299 秒,而高级 Droplet 的 TTFB 为 0.8217 秒。这意味着高级 Droplet 在响应初始请求方面快了 4 倍。

结论

我们的基准测试结果显示,从基础 Droplet 升级到高级 Droplet 后性能显著提升。高级 Droplet 表现出:

  • 视频处理的 CPU 性能快 2.3 倍
  • 视频存储的磁盘操作快 77%
  • 内容交付的下载速度快 3.4 倍
  • 更好地处理并发用户
  • 初始响应时间快 4 倍

这些改进转化为更好的用户体验,特别是在处理多个视频上传或同时为许多用户交付内容时。

以上就是本次教程内容。DigitalOcean云服务以简单易用和价格实惠而广受开发者青睐,欢迎免费试用。同时,如果你是亚洲地区的企业,如果在使用DigitalOcean时遇到技术问题,或者是希望迁移到DigitalOcean,或做多云部署需要建议​,欢迎直接联系DigitalOcean中国区独家战略合作伙伴卓普云。​

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词