目次
トグル序文
ソフトウェア エンジニアであれば、CDN という用語に精通しているはずですが、CDN の原理とその設計方法を詳しく調べてみると、それほど明確ではないかもしれません。そのため、最初にコンテンツ配信ネットワークについて説明します。コンテンツ配信ネットワーク) の概念とその実装方法。
CDNからシステム設計まで
CDN について説明する前に、世界中の何百万ものユーザーがシステムを使用しており、ユーザーのリクエスト (リクエスト) を満たすためにサービスが 1 つのデータセンターに展開されている場合、どのような問題が発生するかを振り返ってみましょう。我々は持っています?
高い遅延
ユーザー、データセンター、サーバー間の物理的な距離が遠すぎると、遅延が増加します。ユーザーが高い遅延を経験する場合、その原因は通常、単一の理由ではなく、送信遅延、伝播遅延、キュー遅延、ノードのノード処理遅延などの複数の複雑な理由によって引き起こされます。長距離のデータ送信は間違いなく遅延の増加につながります。人間の身体の感覚によれば、システムの遅延は 200 ミリ秒未満であることが望ましく、VoIP (Voice over Internet Protocol) の場合、遅延は 150 ミリ秒を超えてはならず、ビデオ再生プラットフォームの遅延は数秒を超えてはなりません。例: YouTube クリックするたびにビデオが数秒遅れ、ユーザーが失われてしまいます。
データ集約型アプリケーション
データ集約型のアプリケーションでは、通常、大量のトラフィックの送信が必要になります。ネットワーク パスがさまざまな種類のインターネット サービス プロバイダー (ISP) を経由するため、長距離では問題が発生する可能性があります。ユーザーの数が増えると、サーバーは各ユーザーに個別にデータを提供する必要があるため、この種の問題は倍増するか、指数関数的に増大することさえあります。つまり、複数のクライアントからリクエストがあった場合、メインデータセンターは大量の無駄なデータ(冗長データ)を送信する必要があります。
データセンターのリソース不足
ユーザー数が増加すると、データセンターのリソースのコンピューティング能力と帯域幅が制限になったり、ボトルネックになったりすることがあります。したがって、数百万のユーザーに対するシステム サービスを拡張する必要があります。ただし、単一のデータセンターで拡張が行われた場合でも、自然災害やネットワーク接続の問題によりデータセンターがオフラインになった場合、単一障害点 (Single Point of Failure) になる可能性があります。
CDNとは何ですか?
コンテンツ配信ネットワーク (CDN) は、上記の問題に対処するために使用されるソリューションの 1 つです。まず、CDN は地理的な位置に基づいて配置されたプロキシ サーバー (Proxy Server) のグループです。このうち、プロキシサーバーはクライアントとサーバーの間の中間サーバーであり、ネットワークの端(ネットワークエッジ)にも配置されます。また、ネットワークのエッジはエンド ユーザーに近いため、プロキシ サーバーを配置すると、遅延が減り、帯域幅が節約され、対応するデータがユーザーに迅速に送信されます。 CDN は、単純なプロキシ サーバーとして機能するだけでなく、いくつかの設定や操作を通じて効率を高めることもできます。
CDN は、小規模なデータセンターをユーザーの近くに配置し、そこにデータのコピーを保存することで、データをユーザーに近づけます。 CDN は主に静的データと動的データの 2 種類のデータを保存し、主にデータをユーザーに近づけることで伝播遅延の問題を解決します。 CDN プロバイダーは、利用可能な十分な帯域幅を提供し、データをユーザーに近づけるために追加コストも発生します。
先ほどの質問に戻りますが、CDN は、高遅延、データ集約型アプリケーション、データセンター リソースの不足といった問題をどのように解決するのでしょうか?
- 高いレイテンシー : CDN の物理的な設置場所はクライアントに比較的近いため、ユーザーは CDN を通じて対応するデータを取得できるため、物理的な距離と遅延が軽減されます。
- データ集約型アプリケーション: データ パスには ISP と近隣の CDN コンポーネントのみが含まれるため、特定のエリアで少数の CDN コンポーネントを使用して多数のユーザーにサービスを提供する場合に問題はありません。以下に示すように、オリジン データ センターはローカル CDN コンポーネントにデータを 1 回提供するだけでよく、ローカル CDN コンポーネントはさまざまなユーザーに個別にデータを提供できます。ユーザーはオリジンサーバーからデータのコピーをダウンロードする必要はありません。
- データセンターのリソースが不足している: CDN は人気のあるコンテンツを提供するために使用されます。このため、トラフィックのほとんどはオリジン サーバーではなく CDN で処理されます。したがって、さまざまなローカルまたは分散 CDN 要素がオリジン サーバーの負荷を共有します。
CDN 設計要件
記事上で ソフトウェア設計の非機能的特徴 – システム設計 03 , 機能要件と非機能要件についても説明しましたが、CDN を設計したいので、最初に機能要件と非機能要件をリストする必要があります。
機能要件
CDN はデータベースとみなすことができるため、基本的に次の機能が必要です。
- 取得: CDN モデルのタイプに応じて、CDN はサーバーからコンテンツを受信できる必要があります。
- リクエスト: プロキシ サーバーはユーザーのリクエストに応じてコンテンツを送信し、CDN プロキシ サーバーは各ユーザーのリクエストに応答できる必要があります。
- 届ける: サーバーは CDN プロキシ サーバーにコンテンツを配信できる必要があります。
- 検索: CDN は、CDN 内にキャッシュされたコンテンツまたはその他の方法で保存されたコンテンツに対してユーザー クエリの検索を実行できる必要があります。
- アップデート: ほとんどの場合、コンテンツはサーバー側から取得されますが、CDN でスクリプトを実行すると、CDN は PoP のピア CDN プロキシ サーバーのコンテンツを更新できるはずです。このうち、Point of Presence (PoP) は、2 つ以上のネットワークまたは通信デバイスが接続を共有する境界点、アクセス ポイント、または物理的な場所です。
- 消去注: コンテンツのタイプ (静的または動的) に応じて、キャッシュされたエントリは一定期間後に CDN サーバーから削除する必要があります。
非機能要件
非機能要件を理解していない読者は、この記事を参照してください。 ソフトウェア設計の非機能的特徴 – システム設計 03 。
- パフォーマンス: CDN の最も重要なタスクの 1 つは遅延を最小限に抑えることであり、多くの開発者が CDN を使用する主な理由でもあります。
- 可用性: 可用性はシステムの継続的な可用性を確保するために使用されるため、CDN を使用して DDoS などの一部のシステム攻撃を防ぐことができます。
- スケーラビリティ: CDN からデータを要求できるクライアント アプリケーションが増えているため、CDN を体系的に拡張できます。
- 信頼性: CDN 設計では、単一障害点がないことを保証する必要があります。 CDN は障害に加えて、大きなトラフィック負荷を処理できるように高い信頼性を備えて設計する必要があります。
CDNシステム設計
CDN 設計自体は比較的複雑であるため、Grokking Modern System Design の図を引用して CDN システム設計を詳しく説明します。ここでは、CDN のコンポーネントをそれぞれ紹介し、コンポーネントに基づいて CDN の動作原理を説明します。
CDN コンポーネント
CDN (Content Delivery Network) は、ユーザーへのコンテンツ配信を高速化するために使用される、世界中のサーバーで構成される分散型ネットワークです。 CDN は、Web サイトのパフォーマンスを向上させ、遅延を削減し、ユーザー エクスペリエンスを向上させることができます。
CDN システム設計の主な要素は次のとおりです。
- クライアント:ユーザーは、ブラウザー、スマートフォン、タブレットなどのさまざまなクライアントで CDN からコンテンツをリクエストします。
- ルーティングシステム:ルーティング システムは、ユーザーを最寄りの CDN 施設に誘導する役割を果たします。これを行うには、ルーティング システムは次の要素を考慮する必要があります。
- コンテンツの配置
- ユーザーからの要望
- サーバー負荷
- スクラバーサーバー:クリーンなサーバーは、正常なトラフィックを悪意のあるトラフィックから分離し、攻撃を防ぐために使用されます。一般的な攻撃の種類には、DDoS 攻撃が含まれます。
- プロキシサーバー: プロキシサーバーはユーザーにコンテンツを提供します。プロキシ サーバーは、パフォーマンスを向上させるために人気のあるコンテンツを RAM に保存することがよくあります。プロキシ サーバーは、配信システムからコンテンツも受信します。
- 流通システム: 配信システムは、CDN のさまざまな施設にコンテンツを配信する責任があります。配信システムでは、次のようなさまざまな手法を使用してコンテンツを配信できます。
- キャッシュ
- 圧縮
- ストリーミング
- オリジンサーバー: オリジン サーバーは、オリジナルのコンテンツが保存される場所です。 CDN でコンテンツが利用できない場合、ユーザーはオリジン サーバーにコンテンツをリクエストします。
- マネジメントシステム: CDN のパフォーマンスと健全性を監視するために使用される管理システム。管理システムは、遅延、ダウンタイム、トラフィック、エラー率などの指標に関するデータを収集できます。

CDNの原則
この CDN プロセスは、Grokking Modern System Design によって次のように説明されています。
- オリジン サーバーは、CDN にキャッシュされているすべてのオブジェクトの URI をリクエスト ルーティング システムに提供します。
- オリジン サーバーは、アクティブ エッジ プロキシ サーバー全体へのデータ配信を担当する配信システムにコンテンツを公開します。
- 配信システムは、プロキシ サーバー間でコンテンツを配信し、リクエスト ルーティング システムにフィードバックを提供します。このフィードバックは、クライアントを要求するために最も近いプロキシ サーバーの選択を最適化するのに役立ちます。このフィードバックには、どのプロキシ サーバーにどのコンテンツがキャッシュされ、トラフィックが関連するプロキシ サーバーにルーティングされるかに関する情報が含まれています。
- クライアントは、ルーティング システムに適切なプロキシ サーバーを要求します。
- リクエスト ルーティング システムは、適切なプロキシ サーバーの IP アドレスを返します。
- セキュリティ上の理由から、クライアントのリクエストはクリーナー サーバー経由でルーティングされます。
- スクラバ サーバーは、良好なトラフィックをエッジ プロキシ サーバーに転送します。
- エッジ プロキシ サーバーはクライアントの要求に対応し、定期的にアカウンティング情報を管理システムに転送します。管理システムはソース サーバーを更新し、コンテンツに関する統計と詳細を含むフィードバックをルーティング システムに送信します。ただし、コンテンツがプロキシ サーバーで利用できない場合、リクエストはオリジン サーバーにルーティングされます。エッジ プロキシ サーバーでコンテンツが見つからない場合は、プロキシ サーバーの階層が存在する可能性もあります。この場合、リクエストは親プロキシ サーバーに転送されます。
追記
CDN はソフトウェア エンジニアがよく使用するツールですが、一部のインターネット サービス プロバイダーが提供する既製の CDN サービスを使用することもできます。これは、CDN を理解するのに役立ちます。システム設計。次の記事では、引き続き CDN 関連のコンテンツについて説明します。システム設計が好きな読者は、他のコンテンツも参照してください。
関連記事
Key-Value Store Key-Value データストレージの説明 – システム設計 11
データ パーティショニング データ パーティショニングとは何ですか? – システム設計 10
データ レプリケーションはデータベースをどのように最適化しますか? - システム設計09
DNSとは何ですか?ドメインネームシステム入門 – システム設計 06
システム設計コンポーネントの構成要素の概要 – システム設計 05
引用
コンテンツ配信ネットワーク (CDN) とは何ですか? CDN はどのように機能しますか?