目次
はじめに
ArcGIS Online 上にあるホスト フィーチャ レイヤーの形状やサイズはさまざまです。データの更新でサイズが大きくなったとしても、データセットのパフォーマンスを維持することは重要です。ArcGIS Online では、ホスト フィーチャ レイヤーに対してアクセスが集中した場合でも、パフォーマンスを維持できるようにするレスポンス キャッシュの機能を実装しています。
本題の前に、レスポンスとは何かについて説明します。レスポンスとは、フィーチャ レイヤーに対する質問への応答のことです。さまざまな質問をすることができますが、最も一般的な質問は「今見ているマップに表示されているのはどのフィーチャですか?」です。
ArcGIS Online では、あらゆるデータ サイズのレイヤーに対応しています。フィーチャ数が少ない場合は、フィーチャ レイヤーからのレスポンスが小さいため、1 回のリクエスト (シングル リクエスト) でフィーチャを取得できます。レイヤーのサイズが大きい場合は、タイル リクエスト (クエリを複数の小さな空間クエリに分割) を使用してフィーチャをリクエストします。タイル リクエストには、異なるユーザーやアプリ間でも一貫性があるという利点があります。この一貫性により、レスポンスをサーバーに一旦キャッシュし、すべてのユーザー間で共有することができます。シングル リクエストであってもタイル リクエストであっても、クライアントにもキャッシュできます。
ArcGIS Online では複数のユーザーが同じリクエストをした場合、サーバー キャッシュが機能します。これによりサーバーと、基盤であるデータベースの両方のリソースが解放されるため、事前に明示的にタイルを生成する必要なく、フィーチャ レイヤーを数百万のユーザーやクライアントにスケール アウトできるようになります。サーバーからキャッシュされたこれらのレスポンスは、データが編集されると自動的に無効になります。これにより、レイヤーを使用するクライアントは常に最新の情報を得ることができます。
ArcGIS Online は、タイル リクエストとレスポンス キャッシュを戦略的に使用して、パフォーマンスを最適化し、負荷を軽減しています。
これらについて、詳細な仕組みを以下でご説明します。
クライアント側キャッシュ: ブラウザーに保存される自分専用キャッシュ
クライアント側キャッシュは、Web ブラウザーによって管理される、サーバーからのレスポンスの自分専用のキャッシュのようなものです。フィーチャ レイヤーにクエリを実行すると、フィーチャ サービスからフィーチャ セットが返され、ダウンロードされてブラウザーのキャッシュに保存されます。マップを画面移動したり、拡大、縮小したりしたときに、マップ ビューが変わる度にブラウザーにフィーチャを再ダウンロードしなくてもいいように、可能な限りブラウザーのキャッシュにダウンロードされたフィーチャを使用します。
しかし、このブラウザーのキャッシュには保存期限があります。データを編集中に画面移動すると、ブラウザーはサーバーに前回のクエリ以降に何か変更があったかどうかを尋ねます。変更があった場合、ブラウザーは新しいフィーチャを取得し、それに応じてキャッシュを更新します。これにより、マップに表示される内容が最新のものになり、コンピューターと ArcGIS Online の負荷が軽減されます。このブラウザーのキャッシュはクライアント上にのみ保存され、他の場所には保存されません。そのため、操作している本人にはメリットがありますが、他の人のパフォーマンスが向上することはありません。そこで次に、CDN (Content Delivery Network) について説明します。CDN の目的は、すべての人に対してパフォーマンスを向上させることです。
CDN: 誰でも、どこでも使えるキャッシュ
CDN (Content Delivery Network: コンテンツ配信網) は、Web コンテンツをインターネット経由で配信するために最適化されたネットワークです。パブリックに共有されているホスト フィーチャ レイヤーの場合、CDN はクライアント側キャッシュと同様の働きをしますが、いくつかの違いがあります。第一に、CDN のレスポンス キャッシュは、そのレイヤーを使用し、同じクエリを送信するすべての人によって再利用されます。第二に、CDN は世界中に分散しており、キャッシュはミラーリングされています。つまり、たとえデータをホストしているサーバーが地球の裏側にあったとしても、利用者の近くにキャッシュがある可能性が高くなります。そのため、データがキャッシュされるだけでなく、データを取得するまでの物理的距離が短縮され、より速くダウンロードできるようになります。
サーバー側キャッシュ: ArcGIS Online 内で保存・共有されるキャッシュ
前のセクションで述べたように、CDN を使用するのはパブリックに共有されているレイヤーのみで、組織内で共有されているレイヤーには CDN のレスポンス キャッシュは使用されません。これにより、プライベートなデータが世界中の外部サーバーにキャッシュされることはありません。サーバー側キャッシュは、ArcGIS Online 内のタイル リクエストに対するレスポンスをキャッシュし、クライアント側キャッシュや CDN を使用できない場合に、組織内の他のユーザーや一般ユーザーがキャッシュを再利用できるようにします。このキャッシュは、すべての許可されたユーザー間で共有され、ArcGIS Online のインフラストラクチャの一部として内部的に維持されます。その結果、クエリに迅速に応答し、基盤であるデータベースへの負荷が軽減され、高負荷時でもすべてがスムーズに実行されます。データが変更されると、フィーチャ タイル キャッシュは無効化され、フィーチャ レイヤーを使用するクライアントには常に最新の情報が表示されます。
レスポンス キャッシュのまとめ
ホスト フィーチャ レイヤーのキャッシュの方法をまとめると、パブリック レイヤーとプライベート レイヤーでそれぞれワークフローは以下のようになります。
※この記事は、米国 Esri のブログ「Scalable hosted feature layers in ArcGIS Online: Tile queries and response caching」を参考に、翻訳した記事です。