ドロップレットを使用してオンデマンドビデオプラットフォームを拡張する
紹介
あなたのスクリーンタイムは通常どのようなもので構成されていますか?仕事の時間、ソーシャルメディア、一部の一気見でしょうか?この記事では、一気見の世界に深く入り込み、OTT(Over-the-Top)プラットフォームがどのように機能するかの包括的な概要を提供し、あなたのニーズに合わせたオンデマンドビデオアプリケーションを構築するプロセスを案内します。さらに、DigitalOcean Dropletsを使用してアプリケーションをスケールする方法を探求し、ユーザーにとってシームレスで効率的なストリーミング体験を確保します。
オンデマンドビデオプラットフォームを構築することは、コンテンツクリエイター、教育者、ビジネスにとってゲームチェンジャーとなる可能性があります。それは、より広いオーディエンスにリーチし、エンゲージメントを高め、コンテンツをよりターゲットにした効果的な方法で収益化するユニークな機会を提供します。しかし、高品質のストリーミングサービスに対する需要が高まるにつれて、それを支えるためのスケーラブルで信頼性のあるインフラストラクチャの必要性も高まります。ここで、DigitalOcean Dropletsが登場し、オンデマンドビデオアプリケーションの展開と管理のための柔軟でコスト効果の高いソリューションを提供します。
この記事の終わりまでに、DigitalOcean Dropletsを使用してオンデマンドビデオプラットフォームを設計、展開、スケールする方法をしっかりと理解できるようになり、次のような一般的な課題を克服できるようになります。
- バッファリングや遅延なしで高品質のビデオストリーミングを確保する
- ダウンタイムなしで大量の同時ユーザーを処理する
- ストレージと帯域幅の要件を効率的に管理する
- 成長する需要に応えるためにアプリケーションを拡張しながら、コストを抑える
カスタムのビデオオンデマンドソリューションを構築したい開発者であれ、オンラインプレゼンスを拡大したいビジネスオーナーであれ、この記事はオンラインビデオストリーミングの競争の激しい世界で成功するために必要な知識とツールを提供します。
前提条件
- 自分のDropletsを立ち上げるためのDigitalOceanアカウント。
Next.jsの実務経験(Next.jsアプリケーションを作成したい場合は必要ですが、そうでなければ、単にこのリポジトリをフォークしてクローンし、試すことができます)。
始める前に、Netflix のようなストリーミングプラットフォームがどのように機能するかを理解しましょう。まず、何百万人ものユーザーにコンテンツを配信するために、彼らは強力なサーバーに依存しています。また、私たちも DigitalOcean のドロップレットを使用して自分たちのサーバーを立ち上げます。
DigitalOceanのドロップレットとは何ですか?
DigitalOcean Dropletは、DigitalOceanのクラウドインフラストラクチャ上で動作するLinuxベースの仮想マシン(VM)です。クラウド内の独自の仮想サーバーのように考えて、単独で使用するか、より大きなクラウドベースのインフラストラクチャの一部として使用できます。
各ドロップレットは、独自のCPU、RAM、およびSSDストレージを備えた完全に機能するサーバーです。ニーズに基づいて、基本的な1GB RAM/1 vCPUの設定から強力な32GB RAM/16 vCPUのマシンまで、さまざまな構成(サイズ)から選択できます。デジタルオーシャンのコントロールパネルやAPIを通じて、ドロップレットを簡単にリサイズ、バックアップ、および管理できます(この記事の後半で詳細を見ます)。
私たちのビデオオンデマンドアプリケーションがどのように機能するかを理解すること
セットアップはシンプルです:私たちはNext.jsのフロントエンドを持ち、DigitalOceanのサーバーとそれにアクセスするクライアント(私たち)があります。
さらに説明すると:
- ユーザーはブラウザやモバイルデバイスを通じてアプリケーションにアクセスします。
- すべてのリクエストは、単一のDigitalOceanドロップレットによって処理されます。
水滴が流れる:
- フロントエンドとAPIを提供するNext.jsアプリケーション
- アップロードされたコンテンツを保存するためのビデオライブラリ
こちらは流れをより良く理解するための図です。
このセットアップは、何百万ものユーザーに対応するために複数の地域にわたって複数のサーバーを必要とするNetflixのインフラストラクチャよりもシンプルです。後のセクションでは、より多くの同時ユーザーを処理し、動画をより速く処理するために、私たちのドロップレットをどのようにアップグレードできるかを議論します。
DigitalOcean Droplet上にNext.jsアプリケーションをデプロイする
この例でのオンデマンド動画プラットフォームは Next.js を使用して構築されており、これを複製してDroplet上にホストする方法をお見せします。
-
GitHubからリポジトリをフォークしてクローンし、設定に移動してデプロイ鍵の下に、ssh-keygenコマンドを使用して生成したSSHキーを追加します。
次のステップでは、アプリケーションをホストするために基本的な12ドルのドロップレットを作成します。
Dropletが作成されたら、
ssh root@ipaddressのコマンドを使って接続し、次のコマンドを実行して準備を整えます:
Update and install 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
Install PM2 for process management
sudo npm install -g pm2
- Dropletで
Next.jsアプリケーションを実行する前に、Nginxを設定する必要があります。そのためには、以下のコマンドを使用できます。
Create Nginx config
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;
}
}
- サイトを有効にする:
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リンクをコピーし、その後、次のコマンドを実行して動作させます。
Set up application
git clone git@github.com:Haimantika/video-on-demand.git
cd frontend
npm install
npm run build
- 最後のステップは、IPアドレスを使ってアプリケーションにアクセスすることであり、そのためにPM2を使用します。次のコマンド
npm install -g pm2を使ってインストールできます。その後、以下のコマンドを使ってPM2でアプリケーションを実行します:
Start with PM2
cd /var/www/video-on-demand/frontend
pm2 start npm --name "video-on-demand" -- start
pm2 save
pm2 startup
DigitalOcean DropletsでNext.jsアプリケーションを展開することについて詳しく知るには、DigitalOcean DropletへのNext.jsアプリケーションの展開に関するチュートリアルを参照してください。
基本的なDropletでオンデマンド動画アプリケーションが稼働している今、そのパフォーマンスを理解し、アップグレードが必要な時期を考えましょう。サーバー構成の重要性を示す一つの素晴らしい例が、マイク・タイソン対ジェイク・ポールの試合です。この試合では、Netflixがバッファリング、フリーズ、クラッシュといった問題を抱えていました。アップロードされたコンテンツはライブストリーミングとは異なる方式で作動しますが、大規模な視聴者の急増に対応し、クラッシュやバッファリングの問題を防ぐためには、サーバー構成が極めて重要です。
ロードバランサーを追加する
このようなアプリケーションをスケールアップするための最初のステップは、通常、ロードバランサーを追加することです。ロードバランサーは、受信トラフィックを分散し、アプリケーションへの単一のエントリーポイントを提供するため、スケールがしやすくなります。ドロップレットにロードバランサーを追加するには、チュートリアル「リージョナルロードバランサーの作成方法」に記載されている手順に従ってください。
ロードバランサーをドロップレットに正常に追加すると、コントロールパネルに次のように表示されます:
これにより、より良いトラフィック管理、改善された応答時間、SSLの終端処理、および健康監視が実現します。
垂直スケーリングによるアップロードの増加への対応
ロードバランサーはトラフィックの分散には優れていますが、より多くのアップロードやビデオ処理を扱うには垂直スケーリングが必要です。垂直スケーリングとは、既存のドロップレットをより大きなサイズにアップグレードすることであり、コンピュータのハードウェアをアップグレードすることに似ています。これにより、アップロード処理のためのCPUパワーが向上し、同時リクエストを処理するためのRAMが増え、ビデオストレージのためのディスクI/Oがより早くなります。さらに、垂直スケーリングは大容量ファイルのアップロードに優れており、ライブラリアクセスの応答時間も速くなります。
これを例を挙げて理解し、私たちのアプリケーションを基本的なドロップレットとプレミアムドロップレットでベンチマークしましょう。
オンデマンドアプリケーションのベンチマーキング
このセクションでは、私たちのアプリケーションが異なるドロップレットサイズでどのように動作するかを見ていきます。通常のインテル(1 vCPU/2 GB)は月額12ドル、プレミアムインテル(2 vCPUs/4 GB)は月額32ドルで、そのパフォーマンスを比較します。
これが以前のもので、アップグレードしたものです:
ドロップレットのサイズ変更を学ぶためには、垂直スケーリングのためのドロップレットサイズ変更に関するチュートリアルを参照してください。
基準として、以下の指標を使用します:
- CPUパフォーマンステスト(
sysbench)。 - ディスクパフォーマンステスト(
fio)。 - ネットワークスピードテスト(
speedtest-cli)。 - 同時ユーザー負荷テスト(Apache Benchmark)。
- 最初のバイトまでの時間 (TTFB).
CPUパフォーマンステスト(sysbench)
これは、サーバーの処理能力と計算タスクを処理する効率を測定します。
DropletsのCPUパフォーマンスをテストするために、次のコマンドを使用します:
sudo apt update && sudo apt install -y sysbench
sysbench cpu run --threads=4 --time=30
両方を比較すると、これが得られたものです:
| メートル | 基本的な情報($12) | プレミアムインテル($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 | プレミアムドロップレットは、作業をよりよく分配します。 |
このことから、プレミアムドロップレットはCPU性能において約2.3倍速く、平均応答時間は57%低いことがわかります。これにより、パフォーマンスが向上し、高負荷時の安定性も向上します。ビデオオンデマンドアプリケーションは通常、高トラフィックを処理し、CPU集約型のタスク(ビデオ処理など)を持つため、ドロップレットをアップグレードすることで性能が大幅に向上します。
ディスクパフォーマンステスト(fio)
これはビデオのアップロードとストレージのためのストレージの読み取り/書き込み速度とIOPSを評価します。
ディスクパフォーマンステストを行うために、次のコマンドを使用します。
sudo apt install -y fiofio --name=randrw --rw=randrw --bs=4k --size=1G --numjobs=4 --runtime=60s
基本インテルとプレミアムインテルのドロップレットの比較は次のとおりです。
| メートル | 基本的なドロップレット (1 vCPU) | プレミアムドロップレット (2 vCPUs) | 改善 |
|---|---|---|---|
| 読み速度 | 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% | プレミアムでのリソース利用の増加 |
上記の表から、プレミアムインテルドロップレットは、動画の取得、動画のアップロードおよびストレージ操作において、より良いパフォーマンスを発揮し、1秒あたりの入出力操作も処理できるため、動画が多いアプリケーションに理想的であることが明らかです。
ネットワークスピードテスト(speedtest-cli)
これはビデオストリーミングのアップロード/ダウンロード速度とレイテンシをテストします。
ネットワーク速度テストを行うために、以下のコマンドを実行します:
sudo apt install -y speedtest-cli
speedtest-cli
基本的なインテルのDropletとプレミアムインテルのDropletで実行したところ、以下の結果が得られました:
| メートル | 基本情報 | プレミアムインテリジェンス | 改善 |
|---|---|---|---|
| ピング | 3.398 ミリ秒 | 2.019 ミリ秒 | 約40.6%低い(良い) |
| ダウンロード速度 | 1449.83 メガビット/秒 | 4976.82 メガビット/秒 | ~3.4倍速い |
| アップロード速度 | 976.40 メガビット/秒 | 1939.47 メガビット/秒 | ~2倍速い |
ビデオオンデマンドのような、より迅速なコンテンツ配信を必要とするアプリケーションでは、プレミアムインテルDropletがより良い結果をもたらします。なぜなら、それは3.4倍速いダウンロード速度、2倍速いアップロード速度、そして低いレイテンシを持っているからです。
同時ユーザー負荷テスト (Apache Benchmark)
同時負荷テストは、複数のユーザーをシミュレートしてサーバーの同時接続処理能力を測定します。
私たちは、次のコマンドを使用して100人のユーザーでアプリケーションの負荷テストを行いました。
sudo apt install -y apache2-utils
ab -n 1000 -c 100 http://yourdomain.com/video.mp4
以下の結果が得られました:
| メートル | 基本のドロップレット ($12) | プレミアムドロップレット($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 | リクエストの最小待機時間 |
これは、プレミアムインテルドロップレットがより高速で高負荷を効率的に処理できるのに対し、ベーシックインテルドロップレットは同時トラフィックでパフォーマンスが劣るため、より多くのユーザーへのスケーリングには適していないことを示しています。
最初のバイトまでの時間 (TTFB)
これはサーバーがユーザーにデータを送信し始めるまでの速さを測定するために行われます。
最初のバイトまでの時間をテストするために、次のコマンドを使用します:curl -o /dev/null -s -w "%{time_starttransfer}\\n" http://yourdomain.com/video.mp4.
基本のドロップレットのTTFBは3.5299秒で、プレミアムドロップレットのTTFBは0.8217秒です。これは、プレミアムドロップレットが初期リクエストに対して4倍速く応答することを意味します。
結論
私たちのベンチマーク結果は、基本的なDropletからプレミアムDropletにアップグレードした際に、パフォーマンスの大幅な改善があることを示しています。プレミアムDropletは次のように示します:
- ビデオ処理のためのCPU性能は2.3倍速くなりました。
- ビデオストレージのためのディスク操作が77%速くなります。
- コンテンツ配信のためのダウンロード速度が3.4倍速くなります。
- 同時ユーザーのより良い処理。
- 初期応答時間が4倍速くなります。
これらの改善は、特に複数の動画アップロードを処理したり、多くのユーザーに同時にコンテンツを提供したりする際に、ユーザーエクスペリエンスを大幅に向上させるものです。
こちらは、雫やビデオ処理についてもっと学ぶために参考にできるいくつかのリソースです。
- DigitalOcean Dropletのドキュメント。
- ビデオ処理のベストプラクティス。
- DigitalOceanでプレミアムドロップレットを立ち上げる。
- ビデオオンデマンドアプリケーションのGitHubリポジトリ。










