Kong と Hazelcast で高度なレート制限ポリシーを実現

Kong Gateway は Hazelcast と統合し、Kong プラグインが提供する基本的なオプションに加えて、分散コンピューティング、セキュリティ、ゼロダウンタイム、クラウド アグノスティックなど、高度なレート制限ポリシーを実装できます。

ミッションクリティカルなビジネス機能のビルディング ブロックとして API への依存度が高まる中、ハイパフォーマンスと信頼性への期待に応えるため API をどのように構築し管理するかが、「成否を分ける」要因になります。ミッションクリティカルな API サービスは、停止することなく動作し、拡張性と信頼性があり、常時利用可能であることが求められます。しかし、増加し続けるトランザクション レートと消費量により API サービスに負荷がかかり、予期しないサービスの停止を招いたり、SLA 違反や顧客の不満につながる可能性があります。Hazelcast は、高度なレート制限機能を提供することで、Kong サービス コネクティビティ プラットフォームのパフォーマンスと信頼性を向上させることができます。

Kong と API ゲートウェイ ポリシー

API ゲートウェイの主な役割の 1 つは、重要で複雑なポリシーを実装してサービスの負荷を軽減し、ビジネス ロジックに集中させることです。

この観点から、単に軽量であるだけでなく、拡張性のある API ゲートウェイを提供することが重要です。

Kong Gateway は、API を公開し、多くのポリシーで制御できるリバース プロキシです。任意の RESTful API の前で動作する Kong Gateway は、モジュールやプラグインによって拡張し、それらのポリシーを実装できます。これは、プラグインを有効にし、実行時に実行することができるモジュラー アーキテクチャの基盤となります。

Kong Gateway は、すぐに使えるプラグインを豊富に取り揃えています。ここではそのいくつかをご紹介します。

  • 認証: OpenID Connect、Basic Authentication、LDAP、Mutual TLS (mTLS)、API Key など、あらゆる認証方式を実装するためのプラグイン。
  • 変換: アップストリームやプラグインにルーティングする前にリクエストを変換する、コンシューマーに返す前にレスポンスを変換する、GraphQL アップストリームを REST API に変換する、既存の Kafka ベースのイベント処理インフラのトピックでリクエストを Kafka メッセージに変換するなど、さまざまな変換を行うためのプラグイン。
  • サーバーレス: AWS Lambda や Azure Functions と統合するためのプラグイン。
  • アナリティクスおよびモニタリング: Datadog や Prometheus を含む外部システムにメトリクスを提供するプラグイン。
  • トラフィック制御: カナリア リリース、モック エンドポイント、リクエスト ヘッダーに基づくルーティング ポリシー、リクエストとレスポンスのレート制限などを実装するためのプラグイン。
  • プロキシ キャッシュ: 一般的に要求されるレスポンスをゲートウェイにキャッシュするプラグイン。

また、プラグイン開発ガイドと PDK リファレンスを参考にして、GoLang、Python、NodeJS、Lua スクリプト言語など複数の言語で、独自のカスタム プラグインを作成することも可能です。

Hazelcast による Kong Gateway 機能の拡張

Hazelcast は、オンプレミス、エッジ、フル マネージド クラウド サービスの、高速でステートフルなデータ負荷の高いワークロード向けのリアルタイム データ プラットフォームです。リニアにスケーラブルな分散型インメモリ データと計算機能を Kong に提供します。Hazelcast は、レート制限、レスポンス制限、プロキシ キャッシュ、変換、サーバーレス、機械学習の産業化など、さまざまなプラグインをサポートできます。

Hazelcast は、クラスター内のすべてのノードに均等にデータを分割し、すべてのメンバー ノードにワークロード (データと計算) を分散させるマルチスレッドのデータ プラットフォームです。クラスターが自動的にワークロードの再負荷分散を行うことで、リニアなスケーリングを実現します。さらに、Hazelcast の分散アーキテクチャにより、Kong は複数のインスタンス間でコンテキストとデータを共有し、最大のパフォーマンスを達成できます。

Hazelcast が Kong にもたらすメリット

NoSQL Database は、一般に Kong にキャッシュ機能を提供するために使用されます。NoSQL Database は計算機能を提供しておらず、高負荷時のパフォーマンスとスケーラビリティは Hazelcast よりも劣ります。その主な理由は、プライマリ/セカンダリ アーキテクチャにあります。すべての更新をプライマリ ノードで処理するため、プライマリ ノードがボトルネックとなり、読み取りレプリカの信頼性が損なわれ、ピークロード時に最新バージョンのデータを提供できません。

このため、プライマリ/セカンダリ アーキテクチャのデータ クラスターは、プライマリ ノードと同程度のパフォーマンスしか達成できません。セカンダリ ノードを追加しても、データの一貫性が保証されない読み取りが追加されるだけです。さらに、プラットフォームがシングル スレッドの場合、マルチコア サーバーを効率良く利用することもできません。

Hazelcast プラットフォームは、他のインメモリ キャッシュのみのプラットフォームと比較して、より豊富な機能を備えています。Hazelcast のグリッド コンピューティング (サーバーサイドの計算) 機能は、ローカルで計算を行い、その後プラットフォーム間で同期させる必要がある現在の Rate Limiting プラグインよりも、優れたパフォーマンスと柔軟性を提供します。関連するデータを同じパーティションにまとめ、データが配置されているクラスターのメンバーやサーバーに実行する計算タスクを送信することで、計算を高速化し、データの移動を制限して、ネットワーク帯域を最適に使用するパフォーマンスが得られます。すべての関連情報が RAM にあるため、トランザクション処理のためネットワーク経由でリモート ストレージに移動する必要がありません。レスポンス タイムの違いは顕著で、1 秒間に数百万回実行される複雑なトランザクションでは、数分から 1 ミリ秒未満に短縮できます。

Kong Gateway とレート制限ポリシー

レート制限ポリシーは、各コンシューマーが API に送信できるリクエストの数を制限することで、アップストリーム サービスを過剰使用から保護します。さまざまなアルゴリズムを使用して、レート制限を実装する方法があります。詳細については、Kong Blog に掲載されている「How to Design a Scalable Rate Limiting Algorithm with Kong API」を確認してください。

前述のプラグインの他に、現在、Kong はレート制限ポリシーを実装する 2 つのプラグインを提供しています。

  • Rate Limiting プラグイン: 一定期間内に実行できるリクエスト数を制限します。
  • Rate Limiting Advanced プラグイン: スライディング ウィンドウと固定ウィンドウの複数の制限をサポートします。

Kong Gateway の Rate Limiting プラグイン

Rate Limiting プラグインは、以下のような設定を可能にします。

  • ローカライズ: Local (Cluster ノード上のインメモリにレート制限カウンターをローカルに保存) または Redis (Redis サーバーにカウンターを保存してノード間で共有)。
  • スコープ: ポリシーは、Kong Service、Route、または Consumer に適用できます。
  • 制限の数: 秒、分、時間、日、月、または年単位でポリシーを定義し、複数の制限を設定できます。

詳細なチュートリアルは、Kong Blog に掲載されている「Protecting Services With Kong Gateway Rate Limiting」を参照してください。

外部サーバーに Rate Limiting カウンターを保存して共有する、典型的な Kong Control Plane と Kong Data Plane の展開は、次のようになります。

Kong Data Plane がスケールアウトすると、新しいインスタンスは Rate Limiting Cluster で共有される同じカウンターを使用して動作します。

Kong Gateway の Rate Limiting Advanced プラグイン

Rate Limiting プラグインは固定ウィンドウ アルゴリズムを実装します。つまり、固定時間単位に基づいてリクエストの数を制限します。このアルゴリズムでは、現在のウィンドウから次のウィンドウへ切り替わる際にリクエストのピークが発生すると問題が生じる可能性があります。

Rate Limiting Advanced は、標準の Rate Limiting プラグインの機能に加えて、スライディング ウィンドウ アルゴリズムをサポートしています。このアルゴリズムでは、前のカウンターを考慮します。たとえば、現在のウィンドウの 25% を経過した時点では、前のウィンドウのカウントを 75% で重み付けします。このプラグインで使用されているアルゴリズムの説明については、Kong Gateway の Reference にある「Rate Limiting Library」を参照してください。

Rate Limiting Advanced プラグインは、低レイテンシを実現するもう 1 つの重要な機能である、カウンターのインメモリ テーブルを提供します。このカウンターは Rate Limiting Server によって保存され、Cluster 全体で同期または非同期に更新されます。

Hazelcast Rate Limiting プラグイン

2 つの Kong プラグインが提供するレート制限機能は、一般に使用されているさまざまなポリシーに対応します。企業のお客様や高度な要件に対応するため、Hazelcast と Kong は新しいプラグインを開発しました。

Hazelcast は、複数の Kong Data Plane 間でデータ/データ構造を共有し、データの再利用性を高める一貫性を持たせることで、API を合理化することが可能です。Data Plane は、計算ロジックのすべてまたは一部を Hazelcast クラスターに送信することもできます。これは、顧客層、場所、製品、現在の負荷などに応じてルールが複雑になる可能性があるレート制限において特に重要で、Kong 全体のコンテキストのビューが必要になります。共有データレイヤーとして、Hazelcast は複数の Kong インスタンスのコンテキストを収集し、より広範で複雑なレート制限ルールを効率良く実現できます。

多くの場合、レート制限プラグインはバックエンド システムの作業負荷を軽減するために使用されます。これにより、API コンシューマーは、エンドユーザーにデータを俊敏かつリアルタイムに提供する能力を妥協せざるを得なくなります。Kong の代替アーキテクチャは、Hazelcast をシステム アクセラレータとして使用し、インメモリの計算とストリーム処理により、コンシューマーにデータアクセス制限を強いることなく、Kong を応答性の高い、リアルタイム API エンドポイントに押し上げることができます。

まとめ

新しい Hazelcast Rate Limiting プラグインは、エンタープライズ クラスのアプリケーションの高度なポリシーに対応するために設計されました。Hazelcast は、API Gateway に計算や追加データの保存の負荷をかけることなく、複数の Kong インスタンスにわたって複雑でコンテキストを考慮したレート制限ルールを実行する理想的なプラットフォームを提供します。Hazelcast は、高速なデータと計算機能で Kong HQ を補完するスケーラブルなプラットフォームであり、大規模なハイパフォーマンス データ処理向けの主要なインメモリ計算プラットフォームを提供します。このプラットフォームにより、ユーザーはリアルタイム計算機能を利用して、より複雑なレート制限ポリシーを実現できます。

一方、Kong は、Rate Limiting プラグインと組み合わせることができる豊富なプラグインにより、非常にスケーラブルで拡張性の高い API Gateway を提供します。キャッシュ、ログ処理、OIDC ベース認証、カナリア、GraphQL 統合などのポリシーを実装して、新規に追加したり、さらなる実験を行うことが可能です。

Kong と Hazelcast の技術は、ハイブリッドに展開される複数のプラットフォームをサポートする、クラウド ネイティブ アプリケーションに相乗的に使用できます。


Kong Enterprise の概要、価格、およびライセンス体系などの詳細は、こちらを参照してください。


記事参照: 2022 年 5 月 26 日
Claudio Acquaviva
© Kong Inc. 2022
Advanced rate limiting policies with Kong and Hazelcast

タイトルとURLをコピーしました