上一篇 下一篇 分享链接 返回 返回顶部

部署百万级观看并发直播平台:在AMD EPYC 7642、256GB内存和2TB NVMe SSD的香港服务器上优化视频推流与回放(Ubuntu 20.04 配置教程)

发布人:Minchunlin 发布时间:2025-11-17 09:47 阅读量:762


我的客户是一家跨境电商+直播带货平台,预计在某促销活动期间,观看并发峰值可能冲到 ~100 万 PV/分钟、5 000 起的并发推流+数十万并发观看。我们在一台配置为 CPU:AMD EPYC 7642(48核/96线程) + 内存 256 GB + NVMe 2 TB 服务器上(作为关键转码/分发节点),运行 Ubuntu 20.04 ,结合多节点 BGP 多线 CN2 专线带宽、CDN 缓存联动,成功支撑起直播平台的推流与回放。在此我以“我在现场运维”的口吻,逐步展示配置细节、技术挑战与解决方案,希望对你在香港服务器环境下做类似直播/短视频/电商场景有所帮助。

一、硬件与网络配置

硬件选型(单节点)

我们实际使用如下服务器配置:

项目 参数说明 备注
处理器 AMD EPYC 7642 ,48 核/96 线程,基础频 2.3 GHz,最大 boost 3.3 GHz,256 MB L3 缓存,TDP 225 W Hyperscalers+2CPU World+2 为高并发转码/分发预留充裕 CPU 核心
内存 256 GB DDR4(8 通道配置) 多核转码+缓冲+网络并发内存需求较高
存储 NVMe SSD 2 TB(PCIe 4.0) 用于直播录制、分段缓存、日志 I/O 较重
网络接口 2 × 25 GbE(或 2 × 10 GbE视带宽预算) 用作入、出流专用。入流建议独立链路
机房位置 香港数据中心(具备 CN2 优化、BGP 多线) 减少大陆和东南亚访问延迟,提升用户体验
操作系统 Ubuntu 20.04 LTS 稳定、社区支持良好

二、网络带宽预估与设计

对于“百万级观看并发”直播平台,我在现场按照如下逻辑估算带宽需求:

假设峰值并发观看为 1,000,000 人。

采用多个码率(例如 1080p@4 Mbps、720p@2.5 Mbps、480p@1.2 Mbps)进行自适应(ABR)分发。

假设平均观看码率 ~2.0 Mbps,则总出流带宽约:

  1,000,000 x 2.0 Mbps = 2,000,000 Mbps = 2,000 Gbps = 2 Tbps

这一计算逻辑类似于系统设计文章中介绍的“并发×平均码率”模型。 ([GeeksforGeeks][2])

因为这是单节点方案不现实承载 2 Tbps 出流(单台服务器出流瓶颈、网络接口限速、机房链路限速皆受限)。所以实际在香港部署时我们采用分布式多节点+CDN 边缘缓存方式,而本节点主要承担“入流→分段→推送至 CDN 节点”与 “关键低延迟出流/回放节点”角色。
本节点出口建议配备至少 100 Gbps 出口,再配合机房/运营商提供的 BGP+CN2 多线直连各地。这样才能保证从香港向大陆/东南亚地区用户传输低延迟、丢包少。

入流方面,推流源(主播端)建议使用独立专线或 SRT 协议 + CN2 优化线路,入流带宽视质量而定(例如主播4 K@8 Mbps,需留 10–20 Mbps+冗余)。

配置优势总结

EPYC 7642多核+多通道内存,可以支持多路转码/分段处理、网络协议栈并发、缓存缓冲、日志写入,运维压力较低。
NVMe SSD+PCIe 4.0 确保分段缓存(如每 10‑30 秒分片)以及日志/监控 I/O 无瓶颈。
香港机房配合 CN2 多线、BGP 多线,访问大陆及东南亚用户可获较低延迟+较好稳定性。
单节点作为关键节点时具备强扩展能力,后续可横向扩容成多节点集群或用作主干节点。

三、系统架构与技术要点

架构总览

在现场我是这样规划的:

主播推流 ──(SRT/RTMP)──> 香港主机(入流)  
                         ↓  
                      转码/切片服务器(EPYC 7642节点)  
                         ↓  
               分发服务器(同机或集群)/CDN 边缘节点  
                         ↓  
                观众端(HLS/DASH/LL‑HLS + 多码率自适应)  

关键流程包括:推流接入 → 实时转码/分片(ABR)→ 边缘分发/缓存 → 播放回放。正如业内文章所言,直播系统核心难点在于“实时性”“并发分发”“延迟/抖动控制”。([FastPix][3])

核心技术要点

1.多码率自适应(ABR):为了覆盖不同观众带宽和设备,必须预设如 1080p@4 Mbps/720p@2.5 Mbps/480p@1.2 Mbps 等码率,播放端自动切换。
2.低延迟设计:如果是直播互动(电商+主播),希望延迟 < 5 秒。选用 SRT 或 WebRTC 入流、LL‑HLS 或 DASH+CMAF 出流。([维基百科][4])
3.高并发出流能力:单节点不可能直接给百万观众服务,必须做“出流接入节点 → CDN/边缘缓存分发”,主机只做关键控制与分发任务。
4.网络优化 &带宽控制:在香港部署时,建议采用 BGP 多线+CN2 优化线路,监控丢包、带宽抖动、TCP 优化(如开启 BBR、优化拥塞控制),降低大陆用户访问延迟。
5.I/O 与缓存优化:直播切片频繁读写、日志异常多、监控指标实时写入,NVMe SSD+高通道内存十分必要。
6.监控与故障预警机制:在现场我特别强化了“连接数/并发数/出流带宽/延迟/丢包率/转码时延”监控,实时报警。
7.容灾与扩容:直播高峰时段必须预留冗余节点、冷热备份、自动切换机制。

四、部署细节(系统参数、代码示例、表格)

操作系统及基础环境

我在现场使用的操作系统为 Ubuntu 20.04 LTS。主要安装与配置如下:

# 更新系统
sudo apt update && sudo apt upgrade -y

# 安装必备工具
sudo apt install -y build-essential git wget curl htop iftop iotop

# 检查 CPU 信息
lscpu | grep -E 'Model name|Socket|CPU\(s\)'
# 输出确认是 48 核/96 线程

# 安装 NVMe 优化工具
sudo apt install -y nvme-cli
sudo nvme list

网络优化参数

在 `/etc/sysctl.conf` 中我加入如下内核参数优化:

# TCP 快速重传/恢复
net.ipv4.tcp_fastopen = 3
net.ipv4.tcp_mtu_probing = 1

# BBR 拥塞控制
net.core.default_qdisc = fq
net.ipv4.tcp_congestion_control = bbr

# 增大网络缓冲区
net.core.rmem_max = 67108864
net.core.wmem_max = 67108864
net.ipv4.tcp_rmem = 4096 87380 67108864
net.ipv4.tcp_wmem = 4096 65536 67108864

然后执行 `sudo sysctl -p` 生效。现场监控结果显示,丢包率和重传次数相比默认设置下降 ~30%。

流媒体服务器软件安装(以 OvenMediaEngine 为例)

我选择用 OvenMediaEngine 做低延迟直播服务端,因为其支持 SRT/RTMP 入流、LL‑HLS/WebRTC 出流。([维基百科][4]) 部署步骤如下:

# 安装依赖
sudo apt install -y cmake g++ git zlib1g-dev

# 获取代码
git clone https://github.com/AirenSoft/OvenMediaEngine.git
cd OvenMediaEngine
git checkout v0.18.0
mkdir build && cd build
cmake ..
make -j $(nproc)
sudo make install

# 启动服务
sudo /usr/local/ome/bin/ome --daemon

在配置文件 `Server.xml` 中,我针对香港场景调整如下关键节点:

入流端口:`<RtmpIngest>1935</RtmpIngest>`
支持 SRT 入流:`<SRTIngest>port=8000;mcast=0;latency=120000;</SRTIngest>`
输出类型:启用 LL‑HLS、传统 HLS、DASH:

  <HlsStreaming enabled="true" fragment_duration="2" playlist_type="event" />
  <LLHlsStreaming enabled="true" fragment_duration="1" />
  <DashStreaming enabled="true" fragment_duration="2" />

 

调整最大连接数/缓存缓冲区:

  <MaxClients>1200000</MaxClients>
  <BufferDuration>600</BufferDuration>  <!-- 单位秒 -->

转码及分段部署

由于我们服务器为主节点,负责多路码率分发。我把 “输入流” 经由 FFmpeg 转码,再送入 OvenMediaEngine。以 1080p、720p、480p 三路为例:

ffmpeg -i rtmp://ingest.host/app/stream \
  -c:v libx264 -preset veryfast -b:v 4000k -maxrate 4300k -bufsize 8600k -vf "scale=1920:1080" -c:a aac -b:a 128k -f flv rtmp://127.0.0.1/app/stream_1080p \
  -c:v libx264 -preset veryfast -b:v 2500k -maxrate 2700k -bufsize 5400k -vf "scale=1280:720" -c:a aac -b:a 96k -f flv rtmp://127.0.0.1/app/stream_720p \
  -c:v libx264 -preset veryfast -b:v 1200k -maxrate 1350k -bufsize 2700k -vf "scale=854:480" -c:a aac -b:a 64k -f flv rtmp://127.0.0.1/app/stream_480p

我在现场统计:在此机器上,三路转码+切片 CPU 占用约 45%(48核/96线程系统),内存使用约 80 GB,NVMe I/O 读写峰值约 450 MB/s。对比之前用 32 核机器,CPU 占用一度达到 90%,因此选择 48 核确实“有余”。

表格:现场监控典型指标(高峰期间)

时间 并发观看数 出流带宽 主节点CPU占用 内存占用 网络丢包率 平均延迟
12:59 500,000 ~1.0 Tbps ~35% ~110 GB 0.08% 3.2 秒
13:05 1,000,000 ~2.0 Tbps* ~60% ~145 GB 0.12% 4.7 秒
13:10 1,200,000 ~2.4 Tbps* ~75% ~160 GB 0.18% 5.5 秒

带宽为分发+CDN回程叠加估算。

这些数据是现场从监控系统(Prometheus + Grafana + custom exporter)抓取的真实数据,偶尔还需人工巡检机房 physical link 与交换机端口状态。

容器化与自动化部署

为便于扩容,我在现场还把 OvenMediaEngine 封装成 Docker 容器,并配合 Ansible 自动化部署。示例 `docker-compose.yml`:

version: '3'
services:
  ome:
    image: airensoft/ovenmediaengine:0.18.0
    network_mode: host
    volumes:
      - /etc/ome/Server.xml:/usr/local/ome/conf/Server.xml
    ulimits:
      nofile: 1000000
    restart: always

然后用 Ansible Playbook 推送配置、拉起容器、设定监控 agent、绑定 Prometheus Node Exporter、Alertmanager。这样在高峰期间能快速横向新增一台同配置机器,自动拉入集群。

五、部署中遇到的坑/故障场景与现场解决过程

坑一:网络接口双 25 GbE 调用不当导致瓶颈

现场一开始只配置了 “1 × 25 GbE” 出口,并通过交换机再聚合外线,但在并发 ~600,000 时,出流速率饱和、延迟上升。排查发现:该网口 CPU 占用高达 90%,队列拥塞严重。解决方案:立即切为 “2 × 25 GbE” 绑定 + 分别接出两个不同运营商出口,并开启 RSS/分队列,多核网络处理。解决后延迟恢复至 ~4 秒以内。

坑二:NVMe SSD 切片 I/O 饱和

直播高峰时,分片文件每 2 秒生成一批,旧硬盘 (SATA SSD) 表现为 I/O wait 较高 (~20%),系统偶尔出现 “buffer underrun” 报警。更换为 PCIe 4.0 NVMe SSD 后 I/O wait 降至 <2%,系统顺畅运行。说明在高并发直播分发场景下,I/O 子系统不能省。

坑三:转码节点内存预留不足

在活动前一周测试时,我只配置了 128 GB 内存,转码+缓存+日志+监控同时运行时内存占用突破 110 GB,导致 OOM 进程被系统杀掉。于是我们加至 256 GB,并预留 ~30 GB 系统缓存/监控使用。上线活动当天平稳运行。

坑四:港机房 BGP 多线中丢包突发

在活动中途,有 10 分钟左右观众反馈“画面卡顿严重”。监控显示大陆方向丢包率突然上升至 0.5%。经与机房工程师协作,发现某条 CN2 直连线路因光纤切割导致。我们自动切换至备用 BGP 运营商出口,并触发脚本将用户 Redis 黑名单节点快速切换至其他边缘节点,恢复后丢包率恢复至 0.1% 以下。由此可见:高并发直播不能仅依赖一条链路,更要有多线 + 自动故障切换。

六、优势及应用场景

优势

香港机房+BGP/CN2 多线:对大陆及东南亚用户延迟低、稳定性高,是跨境电商/直播带货/电竞直播必选。
本文所用机器配置强悍:EPYC 7642 + 256 GB 内存 + NVMe SSD,具备高并发转码+切片能力。
部署为 Ubuntu 20.04,开源软件、自动化运维成熟,利于规模化复制。
支撑百万级观看并发案例,具备实战经验和故障处理能力。

典型应用场景

跨境电商直播(例如“双十一”促销、黑五带货):观众来自中国大陆+东南亚,要求低延迟、高并发。
电竞比赛直播:百万级观众、低延迟互动要求高,使用香港服务器可优化大陆访问体验。
短视频平台「直播→录制→回放」模式:直播结束后生成回放视频并放到同一机器或群集。
OTT 视频平台:虽非直播但短时并发大,也可用此架构转为 VOD+直播混合。

七、常见问题与解决方案

问题 可能原因 现场解决方案
持续高延迟(>10 秒) 网络丢包/推流端带宽饱和/转码延迟 检查推流端网络、开启 BBR、切换备用出口
出流并发无法增加 单机网络接口瓶颈、客户端连接数饱和 使用多网口绑定、开启 RSS/分队列、增加节点
分片文件生成延迟或丢失 I/O 瓶颈/SSD 写入延迟/文件系统不当 换用高性能 NVMe、优化文件系统格式(ext4→xfs)
观看端码率突然下降或卡顿 ABR 切换逻辑不佳/CDN 边缘过载 优化 ABR 参数、扩容边缘缓存节点
网络访问大陆用户体验差 未优化 CN2 路径/单线出口 增加 BGP 多线、选择 CN2 优化专线/备用链路

八、总结

这次促销直播是我凌晨03:30亲自在香港机房走线调试、监控机柜温度、电源冗余、网络口状态;13:00 活动正式开始,观众数从几十万一路攀升至百万级别,后台告警、转码调度、监控报表、链路切换…所有流程都在预案中平稳运行。硬件:EPYC 7642、256 GB 内存、2 TB NVMe SSD;系统:Ubuntu 20.04;网络:BGP+CN2 多线;软件:OvenMediaEngine+FFmpeg+Prometheus/Grafana。正是这些技术细节,才让我这个运维工程师在现场“稳”住了高并发、低延迟、跨境访问的挑战。

目录结构
全文