在構建在線服務時,無論你是開發者還是企業技術負責人,擴展性和穩定性始終是繞不開的核心挑戰。尤其在涉及高并發訪問、大量數據傳輸和持續內容分發的場景中,系統架構的設計直接決定了用戶體驗與業務成效。
本文將以視頻點播(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 的服務器以及訪問它的客戶端(用戶)。
具體流程如下:
- 用戶通過瀏覽器或移動設備訪問應用;
- 所有請求由一個 DigitalOcean Droplet 處理;
- 這個 Droplet 運行以下內容:
- 提供前端和 API 的 Next.js 應用;
- 用于存儲上傳內容的視頻庫。
以下是流程架構圖:
這個設置比 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 的大小以實現垂直擴展》。
為了進行基準測試,我們將使用以下指標:
- CPU 性能測試(sysbench)
- 磁盤性能測試(fio)
- 網絡速度測試(speedtest-cli)
- 并發用戶負載測試(Apache Benchmark)
- 首字節時間(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.50 | 958.68 | 2.32 倍 |
總事件數(30 秒) | 12,408 | 28,766 | 2.32 倍 |
平均延遲 | 9.64 毫秒 | 4.16 毫秒 | 響應時間快約 57% |
95 百分位延遲 | 14.21 毫秒 | 10.27 毫秒 | 穩定性提高 28% |
最大延遲 | 22.63 毫秒 | 33.53 毫秒 | 峰值更高,但平均值更好 |
線程公平性(標準差) | 1.87 | 115.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% |
平均 IOPS | 1414.82 | 2501.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/s | 4976.82 Mbit/s | 約快 3.4 倍 |
上傳速度 | 976.40 Mbit/s | 1939.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 / 15185 | 6 / 14 / 36 | 處理時間減少 |
等待時間 | 290 / 11706 / 15100 | 5 / 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中國區獨家戰略合作伙伴卓普云。?