リアルタイムキャッシュパージとは、パージタスクを送信したその瞬間に、ゲートウェイネットワーク全体でキャッシュ済みの HTTP レスポンスを無効化する仕組みです。サーバーのリロード・再起動・設定のリリースは一切必要ありません。OpenResty Edge では、完全 URL、URL プレフィックス、またはカスタム条件(URI サフィックス、リクエストヘッダー、Cookie、クエリパラメータ)でパージ範囲を指定できます。

本チュートリアルでは、パージタスクの作成、Cache-Status レスポンスヘッダーによるキャッシュ状態の確認、URL プレフィックスでのパージ、そして柔軟なカスタム条件の構築までを順に解説します。

OpenResty Edge でキャッシュヒット時に返される Cache-Status: HIT レスポンスヘッダー

OpenResty Edge でのリアルタイムキャッシュパージタスクの作成

前回と同様に、OpenResty Edge の Admin Web コンソールにアクセスしましょう。こちらは当社のコンソールのサンプルデプロイメントです。各ユーザーには独自のローカルデプロイメントがあります。

OpenResty Edge Admin Web コンソールのサンプルデプロイメント

今回は実際のアプリケーションである openresty.org ウェブサイトを使用します。

OpenResty Edge コンソールで openresty.org アプリケーションを選択

このアプリケーションに移動します。

OpenResty Edge コンソールのアプリケーションダッシュボード

このアプリケーションのキャッシュパージページに移動します。

OpenResty Edge における当該アプリケーションのキャッシュパージページ

既に多くの過去のパージタスクがあることがわかります。

OpenResty Edge における過去のキャッシュパージタスク一覧

新しいパージタスクを作成しましょう。

OpenResty Edge で新しいキャッシュパージタスクを作成

キャッシュをパージする方法は3つあります。完全な URL パス、

OpenResty Edge で完全 URL によりキャッシュをパージ

URL プレフィックス、

OpenResty Edge で URL プレフィックスによりキャッシュをパージ

または複雑なカスタム条件です。

OpenResty Edge で複雑なカスタム条件によりキャッシュをパージ

まずは完全な URL モードを試してみましょう。

キャッシュパージタスクに完全 URL を入力

これは openresty.org ウェブサイトの FAQ ページです。ここで http:// または https:// を使用するかどうかは重要ではありません。 これは、キャッシュキーにスキームを含めていないためです。デフォルトではスキームは含まれません。

キャッシュパージタスクを送信する前に、このウェブページのキャッシュがヒットしていることを確認し、パージの効果をテストできるようにしましょう。

パージタスク送信前にページが Cache-Status: HIT であることを確認

ターミナルで、FAQ ウェブページにテストリクエストを送信して、既にキャッシュヒットしていることを確認します。

curl -I https://openresty.org/en/faq.html

そしてもう一度実行します。

返された Cache-Status: HIT レスポンスヘッダーに注目してください。

パージ前の curl -I で Cache-Status: HIT レスポンスヘッダーを確認

次に、キャッシュパージタスクを送信します。

OpenResty Edge でリアルタイムキャッシュパージタスクを送信

これで、キャッシュがネットワーク全体でパージされました。

キャッシュパージタスクがゲートウェイネットワーク全体に伝播完了

ゲートウェイネットワーク全体への一括パージ(リロード・リリース不要)

他のアプリケーションレベルの設定とは異なり、キャッシュパージタスクはゲートウェイネットワーク全体で即時に同期されます。新しいアプリケーション設定のデプロイは必要ありません。自社運用のプライベート CDN においても、この仕組みでリアルタイム無効化が実現できます。

キャッシュパージにはサーバーのリロード、再起動、またはバイナリアップグレードは必要ありません。

設定リリースなしでキャッシュパージが全エッジノードに同期

Cache-Status レスポンスヘッダーによるキャッシュ状態の確認(HIT / EXPIRED)

ターミナルでキャッシュステータスを再度確認しましょう。

curl -I https://openresty.org/en/faq.html

返された Cache-Status: EXPIRED レスポンスヘッダーに注目してください。現在は確かにキャッシュミスです。

キャッシュパージ後の curl -I で Cache-Status: EXPIRED を表示

2回目のリクエストは再びキャッシュヒットするはずです。

Cache-Status: HIT レスポンスヘッダーに注目してください。

再キャッシュ後の curl -I で再び Cache-Status: HIT を表示

URL プレフィックスによるキャッシュのパージ

今度は URL プレフィックスでパージを試してみましょう。

OpenResty Edge で URL プレフィックスによるパージモードを選択

/en/ 配下のリソースをすべてパージします。

URL プレフィックス /en/ 以下のすべてをパージ

新しいタスクを送信します。

URL プレフィックス指定のパージタスクを送信

これでゲートウェイネットワーク全体に同期されました。

URL プレフィックスのパージタスクがゲートウェイネットワーク全体に伝播完了

FAQ ページにテストリクエストを送信します。

curl -I https://openresty.org/en/faq.html

予想通り、キャッシュミスになりました。

プレフィックスパージ後の curl -I で FAQ ページのキャッシュミスを確認

URI プレフィックス /en/ 以下の別のページとして、イベントページ(events.html)をテストします。

curl -I https://openresty.org/en/events.html

これも予想通りキャッシュミスです。

curl -I で /en/ 以下のイベントページのキャッシュミスを確認

または /en/ ページ自体も

curl -I https://openresty.org/en/

同様にキャッシュミスです。

curl -I で /en/ インデックスページのキャッシュミスを確認

他のタイプのリソースのキャッシュもパージできます。例えば、すべての CSS ファイル、すべての画像など、これらのファイルが事前定義された URL の場所に配置されている限り可能です。

CSS ファイルや画像ファイルをキャッシュパージのために URL の場所でグループ化

この新しいパージタスクを今すぐ送信する必要はありません。

グループ化されたリソース向けのキャッシュパージタスクフォーム

カスタムパージ条件の設定(サフィックス・ヘッダー・Cookie・パラメータ)

より複雑な条件を定義する必要がある場合があります。

OpenResty Edge でより複雑なカスタムパージ条件を定義

例えば、URI の場所に関係なく、URI サフィックスが .css のすべてのリソースのキャッシュをパージすることができます。

サフィックス一致演算子を選択します。

パージ条件のために URI サフィックス一致演算子を選択

パージ条件に URI サフィックス一致演算子を設定完了

次に、サフィックス文字列値を入力します。

パージ条件に .css URI サフィックス値を入力

現在のパージタスクにさらに条件を追加することができます。これらの条件はAND関係にあり、同時に満たす必要があります。

キャッシュパージタスクに AND 結合の条件を追加

例えば、URI パラメータ、リクエストヘッダー、クッキーなどをチェックする条件を追加できます。

URI パラメータ・リクエストヘッダー・Cookie に対する条件を追加

また、リテラル文字列パターンの代わりにワイルドカードや正規表現パターンを使用することもできます。

パージ条件でワイルドカードや正規表現パターンを使用

または、より多くの値のパターンを追加することもできます。これらの値はOR関係にあり、そのうちの 1 つを満たせば十分です。

パージ条件に OR 結合の複数の値パターンを追加

OpenResty Edge における柔軟なカスタムキャッシュパージ条件

これらの条件は自由に試すことができます。 ご覧のように、ページルールの条件と同様に非常に柔軟です。

以上が本日ご紹介する内容です。

よくある質問

リアルタイムキャッシュパージとは何か?

リアルタイムキャッシュパージとは、ゲートウェイネットワーク上のすべてのエッジノードでキャッシュ済み HTTP レスポンスを即時に無効化することです。OpenResty Edge では、パージタスクを送信した瞬間にゲートウェイネットワーク全体へ伝播し、ルールに一致するキャッシュオブジェクトは、キャッシュの有効期限切れ(自然失効)を待たずに配信されなくなります。

キャッシュパージにサーバーのリロードや再起動は必要か?

不要です。キャッシュパージタスクはゲートウェイネットワーク全体で即時に同期され、サーバーのリロード・再起動・バイナリアップグレードは一切必要ありません。アプリケーションレベル設定の変更とは異なり、新しい設定リリースも必要ありません。

Cache-Status でページがキャッシュされているか確認する方法は?

curl -I でリクエストを送信し、Cache-Status レスポンスヘッダーを確認します。Cache-Status: HIT はキャッシュから返された応答、Cache-Status: EXPIRED(またはミス)はオリジンから取得された応答を意味します。パージの前後で同じリクエストを送ることで、パージが反映されたかを確認できます。

CDN ネットワーク全体を一度にパージできるか?

可能です。1 件のパージタスクがゲートウェイネットワーク全体に適用されるため、自社運用の CDN を一括で無効化できます。範囲は完全 URL、URL プレフィックス(例:/en/ 以下すべて)、またはカスタム条件(URI サフィックス .css など)で指定できます。

OpenResty Edge について

OpenResty Edge は、マイクロサービスと分散トラフィックアーキテクチャ向けに設計された多機能ゲートウェイソフトウェアで、当社が独自に開発しました。トラフィック管理、プライベート CDN 構築、API ゲートウェイ、セキュリティなどの機能を統合し、現代のアプリケーションの構築、管理、保護を容易にします。OpenResty Edge は業界をリードする性能と拡張性を持ち、同時接続数の多いシナリオ・高負荷シナリオの厳しい要件を満たすことができます。K8s などのコンテナアプリケーショントラフィックのスケジューリングをサポートし、大量のドメイン名を管理できるため、大規模ウェブサイトや複雑なアプリケーションのニーズを容易に満たすことができます。

著者について

章亦春(Zhang Yichun)は、オープンソース OpenResty® プロジェクトの生みの親であり、OpenResty Inc. の創業者兼 CEO です。

章亦春氏(GitHub ID: agentzh)は中国江蘇省生まれで、現在は米国ベイエリアに在住しています。同氏は中国における初期のオープンソース技術と文化の提唱者およびリーダーの一人であり、Cloudflare、Yahoo!、Alibaba など、国際的に有名なハイテク企業に勤務した経験があります。「エッジコンピューティング」、「動的トレーシング」、「機械プログラミング」の先駆者であり、22 年以上のプログラミング経験と 16 年以上のオープンソース経験を持っています。世界中で 4000 万以上のドメイン名を持つユーザーを抱えるオープンソースプロジェクトのリーダーとして、同氏は OpenResty® オープンソースプロジェクトをベースに、米国シリコンバレーの中心部にハイテク企業 OpenResty Inc. を設立しました。同社の主力製品である OpenResty XRay動的トレーシング技術を利用した非侵入型の障害解析・トラブルシューティングツール)と OpenResty Edge(マイクロサービスおよび分散トラフィックに最適化された多機能ゲートウェイソフトウェア)は、世界中の多くの上場企業および大企業から高い評価を得ています。OpenResty 以外にも、章亦春氏は Linux カーネル、Nginx、LuaJITGDBSystemTapLLVM、Perl など、複数のオープンソースプロジェクトに累計 100 万行以上のコードを貢献し、60 以上のオープンソースライブラリを開発しています。

翻訳

英文版の原文と日本語訳版(本文)をご用意しております。読者の皆様による他の言語への翻訳版も歓迎いたします。全文翻訳で省略がなければ、採用を検討させていただきます。心より感謝申し上げます!