OpenResty Edge の ミラーリクエスト(Mirror Request) 機能が新たにリリースされました。この機能は、複雑なビジネスロジックやセキュリティポリシーを簡素化し、より効率的に実行することを目的としております。

ミラーリクエストの核心は、リクエストのコピーを別のサーバーに送信し、追加処理を実行できる点にございます。同期モードでは、プライマリリクエストはミラーリクエストの完了を待ってから応答いたしますが、非同期モードでは、プライマリリクエストはミラーリクエストの影響を受けることなく、即座に応答することが可能です。この機能は、特にセキュリティ監査、データ分析、またはビジネス検証が必要なシナリオで有効です。これにより、システムの柔軟性とセキュリティを顕著に向上させることができます。

ミラーリクエスト機能の継続的な最適化は、OpenResty Edge チームのエンジニアの皆様の多大なご尽力によるものであり、この重要な機能が絶えず改善され続けていることに感謝申し上げます。

安定性、体験、コストの三重奏による向上

OpenResty Edge のミラーリクエスト機能は、あたかもメインリクエストに「分身の術」を備え付けるかのようです。これは、メインリクエストを処理するのと同時に、一つまたは複数のサブ(ミラー)リクエストを生成します。これらの「分身」は、元のリクエストのコピーを携え、事前に設定されたバックエンドサーバーへ赴き、様々な舞台裏のタスクを実行します。非同期モードでは、メインリクエストは一切の妨げを受けることなく迅速に応答でき、ユーザーエクスペリエンスに影響を与えることはありません。

  • セキュリティとコンプライアンスの強化:ミラーリクエスト機能は、Web アプリケーションファイアウォール(WAF)のスキャンや認証処理を非同期で行うことで、メインリクエストの低遅延を実現します。これにより、ユーザーエクスペリエンスを損なうことなく、金融、E コマースなどの業界が要求する厳格なセキュリティおよびコンプライアンス要件を満たし、顧客の信頼とビジネス効率を著しく向上させます。

  • 柔軟なビジネスプロセスオーケストレーション:ミラーリクエスト機能により、コアビジネスに影響を与えることなく、リアルタイムデータを監視、分析、A/B テスト、カナリアリリースなどの多様なシナリオに効率的に適用することが可能になります。高可用性エッジアプリケーションの構築に強力なサポートを提供いたします。

  • 究極のパフォーマンスとユーザーエクスペリエンス:非同期ミラーモードを導入することで、メインリクエストはログ記録やデータ統計などの補助的なバックエンドタスクの完了を待つ必要がなくなり、クライアントへの即時応答を実現します。このメカニズムはメインリクエストの遅延を大幅に削減し、ユーザーがより迅速でシームレスなアプリケーション体験を享受できるようにいたします。

核心メカニズムの解説

ミラーリクエストの強力さは、OpenResty Edge の基盤となる卓越したリクエスト処理能力に起因しています。これは、リクエストライフサイクルの重要な段階で巧妙にサブリクエストを生成し、元のリクエストを正確に複製し、高効率で転送することを実現しています。

お客様の多様で複雑なビジネスニーズに応えるために、非常に豊富な設定オプションを提供しております:

  • タイプ(RAW / CUSTOM):元のリクエストを直接ミラーリングする(RAW)ことも、カスタム Lua モジュール(CUSTOM)を通じて深くカスタマイズし、リクエスト内容の変更や条件判断などの高度なロジックを実現することも可能です。
  • 非同期ミラーリングモード(v 25.12.1-1 新規追加):このオプションを有効にすると、メインリクエストはミラーリクエストの完了を待つ必要がなく、メインリクエストとミラーリクエストの実行が完全に分離され、応答速度が大幅に向上します。これは高性能エッジコンピューティングを実現するための鍵となります。
  • リクエストボディの転送(v 25.12.1-1 新規追加):元のリクエストのリクエストボディをミラーサーバーに転送することを許可します。これは、完全なリクエスト内容が必要な WAF やログシステムにとって非常に重要です。セキュリティ監査やデータ分析などのシナリオにおけるミラーリクエストの適用範囲を大幅に拡大します。
  • 柔軟なアップストリーム選択と負荷分散:ミラーリクエストのターゲットアップストリームサーバーを指定し、Hash、Chash、Roundrobin などのさまざまな負荷分散アルゴリズムを選択できます。
  • 完璧なフォールトトレランス機能:リトライ回数、送信 / 読み取り / 接続のタイムアウト時間を設定でき、デフォルトで迅速な失敗メカニズム(ヘルスチェックと連動)を有効にし、高負荷やバックエンドサービスの異常時におけるシステムの安定性を確保します。

OpenResty Edge v 25.12.1-1 バージョンでは、非同期ミラーリングモードとリクエストボディ転送機能の重要な強化が導入されます。このバージョンのリリースにご注目いただき、最新機能を体験されることをお勧めいたします。

コールバック関数

OpenResty Edge は、強力なカスタマイズ機能を提供し、専用の Lua モジュールを作成することを可能にします。

before_mirrormirror_rewritemirror_header_filter などの一連の精巧に設計されたコールバック関数を通じて、ミラーリクエストの各重要な段階で深く介入することができます。これは、リクエストの内容に基づいてミラーをスキップするかどうかをインテリジェントに判断し、ミラーリクエストのヘッダー情報を柔軟に変更し、さらにはミラーリクエストが完了した後にカスタムの特定の操作を実行することができることを意味します。

この包括的な柔軟性は、開発者に力を与え、さまざまな複雑なビジネスニーズに応じてミラーの動作を正確にカスタマイズする手助けをすることを目的としています。

設定手順の例

ミラーリクエスト機能の設定は非常に直感的で、以下は主な手順です:

  1. グローバル Lua モジュールの追加(オプション、CUSTOM タイプ用):
    local _M = {}
    
    function _M.before_mirror(ctx)
        local content_length = tonumber(ngx.var.content_length)
        if content_length and content_length > 4096 then
            return ngx.DONE  -- ミラー操作をスキップ  
        end
        return ngx.OK
    end
    
    function _M.mirror_rewrite(ctx)
        ngx.req.set_header('X-Real-IP', tostring(ngx.var.remote_addr))
    end
    
    function _M.mirror_header_filter(ctx)
        ngx.log(ngx.ERR, "in mirror_header_filter")
    end
    
    function _M.mirror_body_filter(ctx)
        ngx.log(ngx.ERR, "in mirror_body_filter")
    end
    
    function _M.after_mirror(ctx, resp)
        ngx.header['mirror-response-body'] = resp.body
    end
    
    function _M.header_filter()
        ngx.log(ngx.ERR, "in main request header filter")
    end
    
    function _M.body_filter()
        ngx.log(ngx.ERR, "in main request body filter")
    end
    
    return _M
    

コールバック関数の説明:

  • before_mirror:子リクエスト作成前に呼び出され、ngx.DONEを返すことでミラー操作をスキップできます。
  • mirror_rewrite:子リクエストの rewrite 段階で呼び出され、子リクエスト情報を変更できます。
  • mirror_header_filter:子リクエストの header_filter 段階で呼び出され、子リクエストのレスポンスヘッダーを変更できます。
  • mirror_body_filter:子リクエストの body_filter 段階で呼び出され、子リクエストのレスポンスボディを変更できます(非同期モードでは呼び出されません)。
  • after_mirror:子リクエスト完了後に呼び出されます(非同期モードでは呼び出されません)。
  • header_filter:主リクエストの header_filter 段階で呼び出されます。
  • body_filter:主リクエストの body_filter 段階で呼び出されます。
  1. ミラーサーバーの追加: OpenResty Edge の管理画面で、ミラー対象のアップストリームサーバーを設定します。

  2. ページルールの設定: ページルールでミラーリクエストアクションを有効にし、該当する設定パラメータと Lua モジュール(CUSTOM タイプを使用する場合)を選択します。

  3. リクエストのテスト:

    $ curl http://test.com -v
    # レスポンス結果にはミラーサーバーのレスポンス内容が含まれます。例えば:
    # mirror-response-body: i am mirror server
    

ミラーリクエスト機能の具体的な実装詳細や高度な応用シナリオにご興味がある場合は、OpenResty Edge の ミラーリクエスト ドキュメントをご覧ください。

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 以上のオープンソースソフトウェアライブラリを執筆しております。

翻訳

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