NetflixがCDNの中核にNGINXを選んだ理由

NGINX | 2015年3月25日

Netflixのオンライン動画ストリーミングサービスは、提供開始からわずか数年で、40か国の5,000万人を超える登録者に利用されるまでに成長しました。Netflixのソフトウェア開発エンジニアが、従来のモノリシックな開発プロセスから継続的デリバリーとマイクロサービスへ移行する際に採用したベストプラクティスの一部については、「Netflixにおけるマイクロサービスの導入:アーキテクチャ設計から得られた教訓」と「Netflixにおけるマイクロサービスの導入:チームとプロセスの設計から得られた教訓」ですでにご紹介しています。

nginx.conf2014でのNGINX開発者Gleb Smirnoff

この記事では、Netflixの成功を支えるもう1つの中核的な要素であるコンテンツ配信ネットワーク(CDN)、Open Connectについて説明します。すべてのOpen Connect配信アプライアンスでNGINXが稼働し、Netflixが動画サービスの爆発的な成長に対応するうえで重要な役割を果たしていることを、私たちは誇りに思います。NGINXのGleb Smirnoffは2年以上にわたりOpen Connectチームと協力してきました。そして昨年10月、ユーザーカンファレンスnginx.conf2014で、Netflixが事業のこの重要な部分を支えるためにFreeBSDとともにNGINXを選んだ理由を説明しました。

Netflixが独自のCDNを構築した理由

Netflixは当初、ストリーミング動画の配信を大手CDNベンダー3社(Akamai、Level3、LimeLight)に委託していました。サービスの普及に伴い、Netflixは、いくつかの理由から独自のCDNを構築・運用することが合理的だと判断しました。

  • From a 実務的な観点では、CDNベンダーは、Netflixの動画ストリーミングに対する顧客需要の伸びに見合うペースでインフラストラクチャを拡張することに苦慮していました。
  • From a 財務面では、ストリーミング動画の量が増えるにつれて、外部委託の費用が急速に許容できない水準に達しつつありました(多くの人気アプリケーションやWebサイトも直面している課題です)。
  • From a ビジネスの観点では、Netflixの主な収益源がDVDレンタルから動画ストリーミングへ移行しつつあることは明らかであり、主力事業の中核部分を外部委託することは合理的ではありませんでした。

何よりも重要なのは、Netflixがアプリケーション配信とユーザーエクスペリエンスをより適切に管理するため、独自のCDNを構築したことです。お客さまに最適なストリーミングメディア配信を提供するには、配信チェーンを構成する3つの基本要素を最大限に管理する必要がありました。

  • ユーザーの動画プレーヤー。Netflixの開発者は、ユーザーがNetflixコンテンツの視聴に使用するデバイス固有のアプリをすべて開発しているため、このコンポーネントはすでにNetflixの管理下にありました。
  • ユーザーとNetflixサーバー間のネットワーク。このコンポーネントを直接制御することはできませんが、Netflixは、ISPのデータセンター内にアプライアンスを設置するためのラックスペースを提供してもらう代わりに、動画ストリーミング用アプライアンスをISPに無償提供することで、ユーザーまでのネットワーク距離を最小限に抑えています。(サードパーティ製機器の設置を希望しないISPのユーザーにサービスを提供するため、アプライアンスはインターネットエクスチェンジポイント[IXP]にも設置されています。)動画ストリーミングは、TCP/IPに固有のパケット遅延や損失、到着順序の入れ替わり、予測不能なラウンドトリップ時間の変動(ジッター)の影響を特に受けやすいため、ネットワーク距離を最小限に抑えることで、こうした異常の影響を受ける可能性を低減できます。
  • 動画サーバー(Open Connect自体)。Netflixは独自のCDNを運用することで、インターネット上の異常を可能な限り補正できるよう、CDNソフトウェアを自由に調整できます。カスタムTCP接続制御アルゴリズムやHTTPモジュールを実行できるほか、サーバーやネットワークの問題を迅速に検出してクライアントを代替サーバーに振り分け、その後サーバーハードウェアにログインして「内部から」トラブルシューティングすることもできます。

Netflixは、ベンダーが提供する汎用CDNでは不可能な方法で、Open Connectを動画ストリーミング向けに最適化できました。Open Connectにより、Netflixはコストを抑えながら優れたユーザー体験を提供し、世界各地におけるアプリケーションのパフォーマンスをより詳細に把握できます。

NetflixがNGINXとFreeBSDを選んだ理由

当初からNetflixが目指していたのは、Gleb氏の言葉を借りれば、「1台のサーバーから引き出せる毎秒ギガビット数をさらに増やす」ことでした。具体的には、各アプライアンスが同時にサービスを提供できる加入者数を最大化する必要がありました。Open Connectのエンジニアは、この目標を達成するにはソフトウェアの微調整が必要になると見込んでいたため、拡張性に制限のないオープンソースソフトウェアを採用しました。

前述のとおり、Netflixは可能な場合、顧客が利用するISPのデータセンターに動画ストリーミング用アプライアンスを設置しています。アプライアンス上で稼働するソフトウェアは第三者の管理下に置かれるため、NetflixはGNU Public License(GPL)ではなく、BSD形式のライセンスを採用するプロジェクトを選択しました。

Netflixが選定した具体的なオープンソースプロジェクトは次のとおりです。

  • FreeBSD:高速性と安定性で知られているため、オペレーティングシステムとして採用。開発者コミュニティが活発で、ベンダーとの連携にも積極的です。
  • NGINXをストリーミングメディアサーバーとして採用しました。実績ある速度と安定性は、Netflixが稼働開始のための調整を行うことなく、Open Connectをできるだけ早く立ち上げたいと考えていたため、重要な要素でした。CDNの稼働後、Netflixはトラフィックパターンを分析し、NGINXの設定を微調整できるようになりました。NGINXには、オープンソースソフトウェアとしてBSD形式のライセンスで配布されている一方、コア開発者全員がNGINX, Inc.の正社員であるという利点もあります。同社は商用製品であるNGINX Plusにエンタープライズクラスのサポートを提供しています。この点で、OSSと商用ソフトウェア双方の優れた特長を兼ね備えています。カスタムモジュールを実行できるNGINXの柔軟なフレームワークもNetflixにとって魅力的であり、Open Connectチームは動画ストリーミングのニーズに特化したモジュールを開発しました。

FreeBSDとNGINXを組み合わせることで、さらに次のメリットが得られます。

  • NGINXのイベント駆動型設計は、その卓越したパフォーマンスを支える鍵の1つです。また、FreeBSDの「kqueue」イベント通知システムコールは、多重化I/Oに最適なAPIの1つです。
  • 変更を加えることなく、NGINXはsendfileシステムコールとaio_readシステムコールを併用できます。これらのシステムコールにより、ディスクI/Oでのブロッキングを回避し、優れたパフォーマンスを実現します。

NGINX PlusとNGINXでアプリケーションデリバリーも最適化

NGINXは当初から、柔軟に適応し、アプリケーションデリバリのあらゆる側面をサポートできるよう設計されています。Netflixのようなアプリケーションを法人のお客さまが容易に導入できるよう、NGINX PlusはWeb配信、負荷分散、コンテンツキャッシュ、メディアストリーミングを1つの使いやすいパッケージに統合しています。他の大手企業がNGINX Plusを活用し、パフォーマンス、セキュリティ、拡張性を備えたアプリケーションデリバリをどのように実現しているかについては、導入事例をご覧ください。

F5はお客さまと緊密に連携し、それぞれのアプリケーションデリバリーアーキテクチャでNGINX Plusを最大限に活用するためのガイダンスを提供しています。F5の「サポート」チームと「プロフェッショナルサービス」チームが、アーキテクチャに関するガイダンス、インストール、設定、アップデートなどを支援します。詳しくは「お問い合わせ」をご利用ください。

録画映像

共有
タグ: F5 NGINX, Tech

関連するブログ記事

チュートリアル:NGINXを使用してアプリケーション向けにOpenTelemetryを構成する
NGINX | 2024/01/18

チュートリアル:NGINXを使用してアプリケーション向けにOpenTelemetryを構成する

OpenTelemetryを使用してNGINXサーバーの状態と健全性をより明確に把握することで、問題のトラブルシューティングを行い、Webアプリケーションのパフォーマンスを向上できます。

AkitaのNGINX Plus認定モジュールでAPIエンドポイントの問題を特定・修正
NGINX | 2023/05/31

AkitaのNGINX Plus認定モジュールでAPIエンドポイントの問題を特定・修正

Akita SoftwareのAPIオブザーバビリティ向け新しいNGINX Plus Certified Moduleを活用して、APIエンドポイントの問題をより迅速に特定し、修正できます。

JavaプロジェクトをスキャフォールディングしてKubernetesネイティブアプリを構築する方法
NGINX | 2023/02/09

JavaプロジェクトをスキャフォールディングしてKubernetesネイティブアプリを構築する方法

Red HatのシニアプリンシパルデベロッパーアドボケイトであるDaniel Oh氏が、Javaプロジェクトをゼロから構築するためのひな形を作成し、Kubernetesネイティブアプリケーションとしてビルドする方法を解説します。

F5 NGINXaaS for Azureのご紹介:Microsoft Azureでネイティブに利用できるSaaS型ロードバランシング
NGINX | 2022/05/24

F5 NGINXaaS for Azureのご紹介:Microsoft Azureでネイティブに利用できるSaaS型ロードバランシング

NGINXaaS for Azureは、NGINX PlusをAzureネイティブのSaaSとして利用できるサービスです。NGINXの設定を容易にリフト&シフトできるため、クラウド導入とモダンアプリの展開を加速できます。

SELinuxでNGINXおよびNGINX Plusを使用する
NGINX | 2018/08/17

SELinuxでNGINXおよびNGINX Plusを使用する

Red Hat Enterprise Linux(RHEL)および関連ディストリビューションでSecurity-Enhanced Linux(SELinux)を有効にすると、デフォルト設定によりNGINXとNGINX Plusの一部の操作が制限されます。この記事では、すべての機能を利用できるようにSELinuxの設定を変更する方法について説明します。

NGINX PlusによるAWS Auto Scalingグループの負荷分散
NGINX | 2017/03/06

NGINX PlusによるAWS Auto Scalingグループの負荷分散

新しいnginx-asg-sync統合ソフトウェアにより、NGINX PlusはAWS Auto Scalingグループの負荷を直接分散できるため、クラウドでの負荷分散がさらに柔軟になります