Mekal Z

Mekal Z

A programmer running out of the wall.
twitter

高性能システム設計におけるCDN

a23a276571855583b91c098861817fff.avif
会社がカリフォルニアの AWS データセンターのサーバーでウェブサイトをホストしていると想像してください。アメリカのユーザーにとっては 100 ミリ秒で読み込むことができますが、中国のユーザーにとっては 3〜4 秒かかります。幸いにも、遠くにいるユーザーのリクエストの遅延を最小限に抑えるための戦略があります。そして、グローバルスケールでシステムを設計または構築する際には、常にこれらの戦略を心に留めておかなければなりません。

CDN とは何ですか?#

CDN またはコンテンツ配信ネットワークは、サーバーから静的アセットを取得する際のリクエストの遅延を最小限に抑えるための現代的で人気のあるソリューションです。理想的な CDN は、グローバルに広がるサーバーグループで構成されています。したがって、ユーザーがサーバーからどれだけ遠く離れていても、CDN には常に近い位置にあります。そのため、画像、動画、HTML、CSS、および JavaScript などの静的アセットをオリジンサーバーから取得する必要はありません。ユーザーは CDN からこれらのファイルのキャッシュコピーを迅速に取得することができます。静的アセットは非常に大きい場合がありますので、HD の壁紙画像を考えてみてください。近くの CDN サーバーからそのファイルを取得することで、ネットワーク帯域幅も大幅に節約できます。

人気のある CDN#

クラウドプロバイダーは、一般的に独自の CDN ソリューションを提供しています。なぜなら、それが非常に人気があり、他のサービスとの統合が容易だからです。人気のある CDN には、Cloudflare CDN、AWS Cloudfront、GCP Cloud CDN、Azure CDN、Oracle CDN などがあります。

CDN はどのように機能しますか?#

CDN は、オリジンサーバーの静的アセットをキャッシュするためにグローバルに分散したサーバーグループです。各 CDN サーバーには独自のローカルキャッシュがあり、すべて同期する必要があります。

CDN キャッシュが作成される主な方法は 2 つあり、プッシュ CDN とプル CDN の間に区別があります。

プッシュ CDN では、エンジニアは新しいファイルや更新されたファイルを CDN にプッシュし、すべての CDN サーバーキャッシュに伝播する必要があります。

プル CDN では、サーバーキャッシュは遅延更新されます。つまり、ユーザーが CDN サーバーに静的アセットのリクエストを送信し、それが存在しない場合、オリジンサーバーからアセットを取得し、そのアセットでキャッシュを作成してユーザーに送信します。CDN がキャッシュにアセットを持っている場合、キャッシュされたアセットを返します。

両方のアプローチには利点と欠点があります。プッシュ CDN では、開発者が常にアセットが最新であることを確認するためにエンジニアリング作業が必要です。一方、プル CDN はメンテナンスが少なくて済むため、CDN はキャッシュに存在しないオリジンサーバーから自動的にアセットを取得します。プル CDN の欠点は、更新されたアセットを取得するかどうかを把握していないため、一時的にプル CDN のキャッシュが更新された後に停止することです。また、プル CDN への最初のリクエストは常に時間がかかります。なぜなら、オリジンサーバーへのトリップを行う必要があるからです。

欠点があるにもかかわらず、プル CDN はメンテナンスが容易であるため、プッシュ CDN よりもはるかに人気があります。

静的アセットの時間を短縮するためのさまざまな方法もあります。たとえば、プル CDN では通常、キャッシュされたアセットにタイムスタンプを添付します。デフォルトでは、キャッシュされたアセットは 24 時間までです。ユーザーが CDN キャッシュで期限切れのキャッシュをリクエストした場合、CDN はオリジンサーバーからアセットを再取得し、更新されたアセットを取得します。キャッシュバスティングと呼ばれる別の解決策は、以前のアセットバージョンと比較して一意のハッシュまたは E タグでアセットをキャッシュすることです。

CDN を使用しない場合はいつですか?#

CDN は、静的ファイルのリクエスト遅延を減らすためにシステムに追加する良いサービスですが、ほとんどの API リクエストには適していません。ただし、CDN を使用しない場合もいくつかの状況があります。

サービスの対象ユーザーが特定の地域にいる場合、CDN を使用する利点はありません。代わりにオリジンサーバーをその地域にホストすることができます。

CDN は、提供されるアセットが動的であり、機密性の高い場合にも適していません。たとえば、金融や政府のサービスとの取り扱いなど、機密性の高い状況で静止データを提供することは避けたいです。

CDN に関する例のインタビューの質問#

Amazon の商品リストサービスを構築していると想像してください。このサービスは、オンラインショッパーのブラウザにメタデータと画像のコレクションを提供します。この設計では、CDN はどこに適合しますか?コメントに回答を残してください。

image_1676286418836_0.png

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。