オンラインで少しでも時間を過ごしたことがあれば、何かをストリーミングした可能性はかなりあります。
ストリーミングは、インターネットで最もよく知られているアプリの最も一般的な用途の XNUMX つであり、YouTube、Spotify、Netflix、またはその他の XNUMX のアプリを介して行われます。
ただし、ストリーミングがいかに一般的であるかを考えると、当然のことと考えるのは簡単です。 例: ストリーミングとは正確には何ですか?
インターネット経由でコンピューターやモバイル デバイスに送信され、リアルタイムで再生される、ライブまたは録画されたメディア マテリアルは、ストリーミングと呼ばれます。
一般的なストリーミング素材には、ポッドキャスト、Web キャスト、映画、テレビ番組、ミュージック ビデオなどがあります。
音楽、ビデオ、およびその他の種類のメディア アイテムは、連続したデータ パケットで計画および転送されるため、即座にストリーミングできます。
ストリーミングに必要なのは、適切なデバイス、ストリーミング サービスまたはアプリへのアクセス、高速で信頼性の高い高速インターネット接続だけです。
注: 例としてビデオ ストリーミング サービスを使用します。
この投稿では、ストリーミング サービスのシステム設計と、ビデオ ストリーミング アプリケーションを開発する際に考慮すべき重要な要素について詳しく見ていきます。
システム要件
世界で最も人気のある動画ストリーミング サービスには、YouTube と Netflix があります。 ユーザー エクスペリエンスを向上させるために、アーキテクチャには多くの要素が含まれています。
このようなサービスには、人気の映画、請求、AI ベースのレコメンデーション システム、および後で見る機能が含まれますが、本質的な要素に集中します。
コア品質
私たちのコンセプトには次の機能が含まれています。 ビデオストリーミング サービス:
- コンテンツの作成者は動画を投稿できます。
- 視聴者は多くのデバイスを使用して動画を視聴できます (モバイル、テレビなど)。
- ビデオでは、ユーザーはコメント、いいね、または嫌悪感を抱くことができます。
- ビデオのタイトルを使用して検索できます。
- これらの統計をユーザーに表示するために、システムはビュー、好きなもの、嫌いなものを保存できます。
システムの目的
- 視聴者が動画をリアルタイムで視聴できるように、バッファリングを行うべきではありません。
- ビデオのストレージは信頼できるものでなければなりません。 アップロードした動画を失うべきではありません。
- ユーザーの増加に伴い、システムはスケーラブルでなければなりません。
- 低遅延と高可用性がシステムの特徴であるべきです。 この状況では、新しく送信されたムービーを見る前にユーザーがしばらく待っても問題ないため、一貫性はそれほど重要ではありません。
システムは定期的に強力なトラフィックを管理する必要があるため、単一のサーバーでは大量のデータを処理できません。 システムにサービスを提供するために、サーバーのグループが使用されます。
XNUMX つのサーバーがクラッシュしても、クライアントの速度に顕著な影響はありません。
高レベルのアーキテクチャ
ビデオ ストリーミング プログラムは、次の XNUMX 種類の要求のいずれかを受け入れることができます。
- アップロード (書き込み)
- 検索 (読み取り)
- 見る (読む)
読み取りクエリ (検索と表示) は、書き込み要求 (アップロード) よりも数倍頻繁に発生することが多いため、それぞれのクエリはサーバーの個別のクラスターによって処理されます。
このプログラムは読み取りが集中するため、アップロードよりも多くのサーバーをセットアップして読み取り要求を処理する必要があります。
クライアントによって行われた各リクエストは、 ロードバランサ 受け取ったとき。
アップロードサービス
ビデオを処理するアップロード サービスは、ビデオを Open Connect サーバーにアップロードし、すべてのユーザーがアクセスできるようにし、アップロード リクエストを実行します。
検索サービス
ロード バランサーは検索要求を検索マイクロサービスに送信し、検索マイクロサービスはそれを Netflix のエラスティック検索に送信します。 クライアントはエラスティック検索の回答を受け取ります。
信じられないほどスケーラブルな全文オープンソース検索エンジンであるエラスティック検索は、Netflix で何百万ものビデオを検索するために使用されています。
エラスティック検索は、Netflix がカスタマー サービス オペレーションを分析するために使用されます。
サービスを見る
ビュー リクエストの大部分は、ロード バランサーまたは Netflix のサーバーには送信されません。 代わりに、ユーザーはローカル ISP に接続し、最も近い Open Connect サーバーから直接フィードを受けます。
ただし、要求されたビデオにアクセスできない場合は、ロード バランサーとビュー マイクロサービスに送信されます。
ビデオはメタデータ データベースで検索され、メタデータで指定されたパスから取得され、クライアントに送信されます。
もちろん、この手法にはレイテンシが含まれます。そのため、実質的にすべてのビュー リクエストが Open Connect 経由で提供されます。
動画をアップロードする
YouTube の主な目的は、映画やビデオをアップロードすることです。 ビデオ ストリーミング サービスは、消費者がビデオにアクセスできるようにする前に、多くの障害を克服する必要があります。
バラバラに保つ
提出された各ビデオは、単一の巨大なファイルとして保持されるのではなく、多数の小さなファイルに分割されます。
コンテンツ プロデューサーは巨大な動画を送信できるため、これは不可欠です。 単一の大きなファイルは、処理またはストリーミングに時間がかかる場合があります。
視聴者は、ビデオが保存され、断片的に利用できる場合、再生するために完全なビデオをダウンロードする必要はありません。
チャンク間の待ち時間がほとんどなく、ユーザーがスムーズに視聴できるようにするために、クライアントはまずサーバーに最初のチャンクをリクエストし、次にそのチャンクの再生中に次のチャンクをリクエストします。
処理キュー
各ビデオには多数のチャンクがあり、Netflix は複数の同時ワーカーを使用してそれらを分析するため、処理キューが必要です。 それらをキューに追加することで、これがより簡単になります。
ジョブはワーカー (または次に説明するエンコーダー) によって収集され、さまざまな形式にエンコードされてから、分散ファイル ストレージに格納されます。
ビデオ符号化
ビデオ チャンクを複数の形式に変換して保存し、視聴者が最適なテクノロジーとインターネット接続を使用してアクセスできるようにすることが重要です。
ビデオは、視聴者がラップトップ、電話、テレビ、またはその他のガジェットで見ることができます。 デバイスごとに最適なフォーマットは異なります。
同様に、さまざまな視聴者がさまざまな帯域幅を利用してインターネットにアクセスできます。
一部の視聴者は、インターネット接続の速度または帯域幅に応じて、高解像度の映画を簡単にストリーミングできますが、帯域幅が少ない視聴者は、低品質のビデオをより簡単にストリーミングできます.
オープンコネクト
ブラウザーを使用して Netflix.com をリクエストすると、ISP (インターネット サービス プロバイダー) は、コンピューターと Netflix サーバー間の接続を確立するように求められます。
ISP がお客様に代わって Netflix の IP アドレスに連絡し、結果を返します。 東京のような遠隔地の視聴者は、これらのサーバーが米国に集中しているため、信号の送受信に大幅な遅延が発生します。
ビデオでは、大量のデータを視聴者に送信する必要があるため、遅延ははるかに懸念されます。送信された場合、ストリーミングが遅延し、ユーザー エクスペリエンスが損なわれます。
Netflix は巧妙な手法を使用して問題を解決します。 これは、オープン コネクト (OC) として知られています。 Open Connect は、Netflix が使用する CDN (Content Delivery Network) です。
オンライン情報をキャッシュし、ユーザーと素材の間の物理的な距離を縮めることで消費者に迅速に配信するために、CDN は分散サーバーと関連するデータ センターのネットワークです。
ロードバランシング
A 単一のアプリケーション サーバーは、毎秒到着する大量の要求 (アップロード、検索、および表示要求を含む) を処理できません。
複数のサーバーが関係しているため、多数のサーバーにワークロードを効果的に分散するために、ロード バランサーを配置する必要があります。
Netflix は、サーバーの障害を処理し、追加のサーバーのインストールに簡単に対応できるため、コンスタント ハッシュを使用してサーバー間で負荷を分散します。
各ビデオの人気はさまざまであるため、これらの映画をホストする実際のサーバーでは、不均等な負荷が発生する可能性があります。 動的な HTTP リダイレクトを使用して、ビジー状態のサーバーが新しいリクエストをオープンなサーバーに転送できるようにすることで、この問題を解決できます。
ビデオ ストリーミング アプリケーションを開発する際の考慮事項
ニッチを見つけて開発する
エンターテイメントから教育、フィットネスに至るまで、非常に多くの種類の資料が利用できるため、専門的な専門分野で差別化要因を構築することが重要です。 ドキュメンタリーやインディペンデント映画のプラットフォームを作成できます。
アプリケーションの収益化
従来の収益化パターンを破壊することで、イノベーションと成長がもたらされる可能性があります。 計画は常に対象者に合わせて調整する必要があります。
現職者はすでに市場を独占しているため、広告やプロダクト プレースメントで無料メンバーシップの収益化を試すことができます。
これに伴い、グローバルなストリーミング サービス プラットフォームを構築する場合は、マルチ通貨のニーズを考慮する必要があります。
より良い体験
プログラムのパフォーマンスは、遅いインターネットやアクセスが制限されているユーザーなどのエッジ環境で強化する必要があります。
ストリーミングビデオ
Netflix はコンテンツをブロードキャストするだけでなく、ユーザー エンジニアリング技術とパーソナライズされた提案を使用して、ユーザーをサービスに夢中にさせます。
データ分析とユーザーのカスタマイズに重点を置いた、Netflix に似たストリーミング サービスの確立を計画しています。
アプリの多くの役割を管理する
Netflix アプリでは、ユーザー ビューは複数のユーザー ロールの XNUMX つにすぎません。 管理者、ビデオ所有者、パートナー、モデレーターなど、さまざまなユーザーとそのアクセスについて計画が必要です。
まとめ
結論として、これは、Netflix、YouTube などのビデオ ストリーミング サービスがビデオをオンボードし、それらを追跡し、何百万もの消費者に表示する方法です。
これらの各アプリケーションには、他とは一線を画すいくつかの追加機能がありますが、基本的な機能は同じアルゴリズムに基づいています。
ストリーミング サービス システム アーキテクチャの概要を説明するために最善を尽くしましたが、バックグラウンドではさらに多くのことが行われています。
皆様がこの知識を有意義に活用してくださることを心から願っています。
コメントを残す