動画コンテンツの配信に関するトピックの続きで、 コンテンツの保存と処理を提供しましたが、消費者にできるだけ近い方法でコンテンツを配信する方法を教えてください。 記事のほとんどは、地理的に分散したコンテンツの配信の一般化されたアプローチに専念し、最終的に、例として、説明されたアプローチはエンドユーザーへのビデオファイルとブロードキャストの配信に適用されます。
コンテンツがユーザーに配信されたという事実に加えて、コンテンツ配信の品質を確保する必要があります。 ビデオFLVファイルの場合、これは、ユーザーに配信される速度がストリームのビットレート以上である必要があることを意味します。そうしないと、ユーザーの視聴時にビデオが「停止」します。
さらに、コンテンツを地理的にユーザーに「もたらす」ことは理にかなっています。 これは、チャネルの帯域幅(場合によっては適切なトランクチャネルの不足)、およびエンドユーザーのローカルトラフィックと外部トラフィックのコストの違い(たとえば、ロシア連邦の地域)によるものです。
ロシア連邦内の地域開発と同様に、国際市場に参入したい場合は、このような措置を講じる必要があります。 今日の地域では、最も人気のあるサイトがビデオホスティングサービスなどのさまざまなサービスを提供する地域ポータルであることが非常に多く、その人気はトラフィックのコストとアクセス速度/応答時間の両方によるものです。 ユーザーはページが開くのを待ってプレーヤーをダウンロードする準備ができていると想像できますが、ユーザーが一定のバッファリングのために中断されたビデオを見ることに同意する、またはスライドショーの形でユーザーに到達するブロードキャストを見ると仮定するのは難しいです(パケットをスキップした後、参照フレームのみが残ります)ビデオ)。
したがって、コンテンツの地理的配信の必要性を認識して、消費者のすぐ近くでサーバーを購入/レンタルします:ヨーロッパ、アメリカ、ウクライナ、エカテリンブルクなど。
仕事の仕組み
抽象バージョンでは、リソース、コンテンツ(ブロードキャストやビデオなど)、および訪問者という2つのエンティティがコンテンツ配信プロセスに関与します。 まず、リソース消費者がどこにいるのかを知る必要があります-サイトへの訪問者 彼自身がこの情報を自分自身に伝えることを期待する必要はありません。したがって、訪問者のIPアドレスを取得し、GeoIPデータベースを検索します(現在、有料と無料の両方がかなりあります)。ユーザーの場所に関する情報を取得します:彼の国、地域、都市、提供者の名前。
リソース(コンテンツ)は常に特定のサーバーに配置され、サーバーには独自の物理的な場所があります。 したがって、サーバーを介したリソースには、同じ国、地域、都市などの地理的位置もあります。 さらに、特別なミラーリングサーバーでリソースのコピーを作成できるため、複数のサーバーで同じリソースを使用できます。つまり、複数の地理的ポイントにあります。
訪問者に最も近いリソースを選択する
これで、ビジター、彼の場所、彼が受け取りたいリソース、およびこのリソースとその場所のすべてのコピーができました。 次に、ユーザーに最も近いリソースの正確なコピーを選択する必要があります。 これをどのように行うことができますか?
ビジターからリソースとそのすべてのコピーまでの距離を計算し、ビジターに最も近いリソースのコピーを選択することは論理的です。 そのような距離を設定する方法は?
この距離は、マップ上の2ポイント間の距離と常に一致するわけではなく、地域、国、都市間(または個々のプロバイダー間)のチャネルの品質と帯域幅の尺度です。 最初の近似では、個々の国と都市間の距離を設定するだけで十分です。 このような距離の配置の例を上の図に示します。
したがって、最短経路を見つける問題を解決する必要がある重み付きの有向グラフを取得します(この経路に含まれるグラフのエッジの重みの合計を最小化します)。 これは、多項式時間で簡単に解決できる古典的な問題です。 グラフは疎結合ですが、そのサイズは非常に大きいため(上記の例では、実際のグラフのごく一部のみが表示されます)、したがって、各訪問者がリアルタイムでそのような計算を実行することは、最も効果的なソリューションではありません。 しかし、少し「チート」することができます:最短パスのすべての検索で、パスのエンドポイントはリソースを持つサーバーが配置されている場所になるため、目的のパスの異なるエンドポイントの数は固定され、比較的小さいことがわかります。 これで、たとえばmemcachedで、グラフのすべての頂点(サイトへの訪問者がいる場所)からリソースの場所までの最短パスの長さを計算してキャッシュするだけで十分です。
この処理された情報は、訪問者がリソースを要求するときにすでにリアルタイムで使用されます。 訪問者からの最短距離に到達するリソースのコピーがいくつか見つかった場合、任意のコピーをランダムに選択します(リソースが配置されているサーバーの重みに応じて)。
リソースをコピー
選択スキームは、世界中に散らばるサーバー上にリソースのコピーがある場合に非常に効果的です。 ただし、これらのコピーはどのように作成されますか? すべてのリソースをすべてのサーバーにコピーするのは不合理です。特定の対象者が要求するリソースを正確に選択することをお勧めします。
これを行うために、次のソリューションを提供します。ビジターがリソースをリクエストすると、リソースは配置できるが現在は配置されていないすべての地理的場所にボーナスが付与されます。
ここで、 距離は訪問者から特定の地理的位置までの距離であり、 kはリソースが指定されたサーバーに移動する速度を決定する特定の係数です。 訪問者からこの場所への道がない(つまり、訪問者が遠く離れている)場合、距離は無限になり、ボーナスはゼロになります。 パスが存在する場合、この時点でリソースはサーバーにコピーされ、訪問者に近づくほど速くなり、そのような訪問者はこのリソースにアクセスするように求められます。
ボーナスが特定のしきい値を超えるとすぐに、リソースは特定の地理的位置にあるサーバーにコピーされ、上記のリソースのコピーを選択するアルゴリズムがすでに有効になります。
地理的に分散したビデオファイルとブロードキャスト
これで、上記のアプローチをビデオホスティングコンテンツに適用できます:ブロードキャストとビデオ。
ビデオファイル この場合、リソースはビデオファイル自体(および元のビデオなどのFLVなどの任意のタイプ)です。 リソースのコピー-ミラーリングされたファイルサーバーにあるファイルのコピー。 リソースへのアクセス-ファイルをダウンロードし、Flash Playerで訪問者がFLVビデオを再生します。 リソースのコピーとは、メインファイルサーバーからさまざまな場所にあるミラーリングファイルサーバーの1つにファイルをコピーすることです。
放送 。 ブロードキャストの場合、状況は非常によく似ています。リソースはもちろん、メインブロードキャストサーバー(ブロードキャストの作成者が接続されているサーバー)にあるブロードキャスト自体です。 リソースのコピーはすべて、他のブロードキャストサーバー上の特定のブロードキャストの中継です。 リソースへのアピールは、新しい訪問者の放送への「入り口」です。 リソースのコピー-世界中のどこかにあるブロードキャストサーバーでリレーを開きます。
ブロードキャストの場合、中継は高負荷に対処する方法であると同時に、コンテンツを消費者に近づける手段でもあります。つまり、中継は2つのプレーンで同時に実行されます。 一方、ブロードキャストサーバーの負荷が正常に維持されるように、各地理的ポイントでこのような数の中継を確保する必要があります。