Kong が世界で最も人気のある API ゲートウェイである理由

最高の API ゲートウェイ

API は、私たちの日常生活を支えるすべてのモダン アプリケーションのバックボーンです。実際、API トラフィックは今日、世界のインターネット トラフィックの少なくとも 83% を占めており[1]、イノベーション、アジリティ、高速リリース サイクル、IP 再利用、よりスケーラブルなチームを実現する最新の API インフラの重要性を裏付けています。このようなイノベーションのほとんどは、Kong Gateway のようなオープンソースで、プラットフォームに依存しない技術によって推進されています。

API の重要性が高まった結果、次世代の Kong Gateway を名乗る新旧無数のベンダーが爆発的に増えましたが、実際にそうなのでしょうか? Kong が API ジャングルの王者である理由を、事実に基づくデータ、および Kong の技術とその歩みを振り返って深く考察してみましょう。

Kong のこれまでの歩み

API の価値は、基本的に本番環境で採用されるかどうかで決まります。組織内で何百もの API を構築できますが、採用されなければ、これらの API は日の目を見ずに終わります。同様に、API インフラの価値もまた、採用によって左右されます。なぜなら、採用の可否は運用時の信頼性と革新性を代弁するものだからです。

今日、Kong Gateway は、さまざまな指標において、世界で最も広く利用されているオープンソース API ゲートウェイです。Kong は、世界中で 1 か月あたり約 9 兆件のリクエストを処理しています。この数字は、ユーザーが Kong インスタンスで有効/無効にできる匿名レポートから導き出されたものです。これは報告ノードのサブセットに過ぎないため、控えめな数字です (Kong Gateway を経由する実際の API リクエスト数は、これより 30% 多く、1 か月あたり約 11 兆 7,000 万リクエストと推定されます)。

これらの数字の背景を理解するため、完全に API で運営されている API ファーストの組織として業界で最も人気のある例である Netflix を見てみましょう。2014 年に Netflix は 1 日あたり 2B の API リクエストを処理しており[2]、これは 1 か月あたり約 60B/リクエストに相当します。Netflix の成長はその後指数関数的に増大しているので、この数字を 10 倍にして数年間で 1 か月あたり 600B/リクエストにすると、次のようなグラフになります。

最高の API ゲートウェイ
Kong Gateway は、今日、世界中の Netflix の推定 20 倍ものトラフィックを処理しています。Kong は、世界中のあらゆる業種と業界において、一度もダウンすることなく、API インフラの大部分を担っており、絶大な信頼を得ています。

オープンソース コミュニティにおける採用率を見ると、Kong Gateway が開発者のマインドシェアと勢いをリードしていることがさらによくわかります。

最高の API ゲートウェイ
Kong の絶対的な普及率と成長率は、オープンソース API エコシステムの中で最も高く、GitHub で第 1 位の API ツールとなっています。Kong は、最新のクラウド ネイティブ API インフラ向けの最強の技術を構築することを目標とし、オープンソース開発に多大なリソースを投入しています。

Kong Gateway のエコシステムも非常に大きく、コミュニティによって作成された 1,000 以上のプラグインや統合機能[3]は、Kong 全体の機能を強化しています。次のセクションでは、Kong の技術が SDK を介してどのようにユーザーに支持されるエコシステムの構築に貢献したかを理解します。

Kong は OSS の貢献度が高い一方で、企業の成長を支援するエンタープライズ プラットフォームも提供しています。これは、オープンソースのイノベーションにさらに多くのリソースを割くことを可能にします。今日、Kong の技術は、単なる API ゲートウェイ機能を超えて、テクノロジ、銀行/金融、ヘルスケア、消費財、旅行、政府機関、通信など、あらゆる業界において、PayPal、Nasdaq、GSK、AppDynamics、Miro、Moderna、RightMove、HSBC、Wayfair、OlaCabs など、さまざまな企業で使用されています。

Kong がなぜこのような規模で採用されているのか、その基礎となる技術を見ていきましょう。

スピードに特化した Kong の Gateway 技術

Kong の普及を牽引しているのは、その中核にある Kong の技術です。Kong の 技術は 3 つのレイヤーに分けることができます。

人気のある API ゲートウェイ
Kong Gateway は、これらのハイパフォーマンスなアーキテクチャ レイヤーで構成されており、Kong とユーザーが選択できるエコシステムによって構築された 1,000 以上のプラグインを備えています。

Kong がなぜこのように構築されているのかを理解するため、これら 3 つのレイヤーを詳しく見ていきましょう。

プロキシ入出力 (I/O)

Kong が使用するプロキシ技術は、オープンソースの NGINX です。Kong では、リクエストの受信とリクエスト/レスポンス ライフサイクルの I/O 管理にのみ NGINX を使用しています。実際の API 管理機能は、2 つ目と 3 つ目のレイヤーにある Kong 自身のコードベースと、何年もかけて構築された IP によって提供されています。後述するように、これらのレイヤーは、研究開発への多大な投資と、長年にわたる無数の機能とパフォーマンスの改善の結果です。

NGINX は非常に特殊な方法で使用されており、その割合は Kong が他のレイヤーで提供する機能全体の 5% 未満です。

Kong を構築するため盤石な I/O を検討した結果、NGINX を採用しました。NGINX は、世界で最も採用されている Web サーバーであり、インターネット上のトラフィックの大部分を処理しいるため、これは当然の選択と言えます。NGINX は、他のプロジェクトでは稀な Linux カーネルに近いレベルの綿密な詳細を持ち、極めて最適化された方法で作成されています。たとえば、NGINX はハッシュ テーブルのバケットをキャッシュライン境界で整列して、バケットへのアクセス時に最適でない CPU キャッシュの動作を回避しています。

NGINX のパフォーマンスは群を抜いています。たとえば、Netflix は 1 つの CDN ノードで毎秒 100 ギガビットを超えるプッシュを行っています[5]。NGINX を多用する別の例として、Cloudflare は、世界のインターネット トラフィックの 18% 以上を処理するグローバル CDN インフラに NGINX を採用しています[6]。NGINX は非常に高速でハイパフォーマンスであるため、クラウドやコンテナだけではなく (NGINX Ingress は Kubernetes で最も採用されている技術で、Kubernetes チームによってメンテナンスされています)、限られたラック スペースやサーバー リソースを最大限に活用しなければならない物理インフラでも選ばれています。NGINX は業界ではユビキタスな存在であり、電気のように当たり前に機能しています。

Kong には、NGINX コアを含む Kong Gateway のフルスタックに関する深い専門知識があり、他ではネイティブに利用できない機能や性能を定期的に拡張し、NGINX にアップストリームしています。NGINX は、自由に操作可能なノンブロッキング I/O でリクエストを管理する最速、軽量かつ信頼性の高いコア エンジンを Kong にもたらし、Kong Core とそのプラグインを介して高度な API コネクティビティ機能を利用できるようにします。

長年にわたり、多くの新しいプロキシ技術が登場し、それぞれに長所と短所がありましたが、パフォーマンス、採用率、信頼性において、NGINX に匹敵するものはありません。

Kong は NGINX を OpenResty という別の技術を介して利用しています。この技術は、標準の NGINX や Apache と並んで、世界で最も使われている Web サーバーの 1 つです。OpenResty は、超高速の LuaJIT をハイパフォーマンスの NGINX に組み込んだ素晴らしい技術です[7]。LuaJIT は、NGINX を上位言語 (Lua) で作成されたモジュールで拡張することを可能にします。LuaJIT を利用することで、Kong のコードベースは、OpenResty チームによって定期的にメンテナンスと改善が行われている、世界最速の JIT コンパイラー (V8 より高速[8]) 上で動作します。LuaJIT は、高速かつ軽量であるため、組み込みシステムやモバイル アプリケーションのような制約のある環境で多用されています。LuaJIT は、最適なトレース開始点を特定し、生成されるホットスポットのアセンブリを継続的に最適化できる賢いトレース コンパイラーを備えているため、非常にハイパフォーマンスです。アセンブリ自体は、ターゲット プロセッサ上で最適なパフォーマンスを発揮するように作成されます。また、静的単一代入形式 IR、スナップショットによるコードシンク、スペア スナップショット、慎重なレジスター割り当てなどの最適化により、LuaJIT はネイティブに極めて近い速度で動作し、場合によっては通常のコンパイラーが生成するスタティック コードよりも高速に動作します。LuaJIT のインタプリター自体は、各ステップの実行を最適化するためアセンブリで記述されており、業界では芸術作品と見なされています。

OpenResty は、活気があり、安定しており、よくメンテナンスされているプロジェクトです。たとえば、Cloudflare は、CDN インフラ全体で OpenResty を使用しており、Shopify、TikTok、Affirm、GrubHub も OpenResty を使用しています。OpenResty は基本的に NGINX の I/O 制御フロー レイヤーで、NGINX ランタイムを組み込み、Kong Gateway がリクエストとレスポンスのライフサイクルを制御して機能を提供できるようにします (そうすることで、Kong は NGINX を拡張しています)。Kong は、スタック全体を継続的に改善するコミットメントの一環として、OpenResty プロジェクトにも貢献しています。これらの理由から、Kong は API ゲートウェイに OpenResty を利用し、ミリ秒以下の処理レイテンシを実現して、API とマイクロサービスに最高のパフォーマンスを提供しています。これにより、Kong Gateway は世界最速のゲートウェイを実現しています。

Kong Gateway は、完全な動的設定、RESTful API、Kubernetes のネイティブ サポート、5 つの言語 (Ruby、Python、Lua、Go、Javascript) の拡張プラグインによってこのスタックをさらに改良しています。

Kong Gateway の技術スタックが優れていることを証明するため、「次世代」を謳う Envoy プロキシをベースにした別のプロジェクトとのパフォーマンス ベンチマークを見てみましょう。

Kong と競合製品の 1 秒あたりのリクエストを比較したグラフ Kong と競合製品のレイテンシを比較したグラフ

Kong Gateway と「次世代」を主張するベンダーによって Envoy 上に構築された API ゲートウェイを比較評価します。ベンチマークでは、Kong のほうが高速で低レイテンシです。

以下は、従来の API ゲートウェイとの比較です。

Kong vs Apigee Throughput and Latency diagram

完全なレポートは、https://research.gigaom.com/reprint/api-and-microservices-management-benchmark-kong/ からダウンロードできます。

これらのベンチマークは、Kong Gateway を世界で最も採用されている API ゲートウェイにしている、コア エンジンの技術革新と超最適化を浮き彫りにしています。パフォーマンスは、最新のマイクロサービス アーキテクチャにおいて重要ですが、唯一の要件ではありません。Kong Gateway が提供する他の機能を見てみましょう。

Kong Core

NGINX は基本的に静的なプロキシであり、設定変更後にリロードが必要ですが、Kong Gateway はそうではありません。実際に Kong は、ネイティブの Kubernetes CRD や YAML 設定 (decK 経由) を介して宣言的に、または RESTful Admin API を介して命令的に、完全に動的かつ設定可能な、驚くべき範囲の能力を NGINX コアに追加しています。すべての操作をリロードや再起動なしで行うことができ、変更はクラスター全体に瞬時に適用されます。

Kong vs Apigee Throughput and Latency diagram

Kong の RESTful Admin API は非常に包括的で、オートメーションの CI/CD パイプラインと、ゲートウェイの状態をプログラムで操作したい API やアプリケーション (たとえば、新しいユーザーに対して実行時に認証キーをプロビジョニングする場合など) の両方で使われています。Admin API は、Kong Gateway の GUI (Kong Manager と呼ばれる) にも使用されており、サービス、ルート、コンシューマー、プラグインなどを操作する拡張機能も提供します。

また、後ほど紹介する Kong プラグインも、独自のカスタム メソッドで Admin API を拡張し、事実上あらゆるニーズに対応できる非常にカスタマイズ性の高い環境を構築できます。これにより API ゲートウェイ スタック全体を完全に制御できるため、Kong のユーザーや企業のお客様から高く評価されています。

Kong Gateway は Kubernetes ネイティブで、Ingress 仕様と新しい Kubernetes Gateway API 仕様の両方をサポートする Kubernetes Ingress Controller を介して完全に構成できます。Kong は、Kubernetes エコシステムの最初の仕様のリリースを支援した K8s Gateway API 委員会の創設メンバーです。

Kong は、すべての Kong ユーザーが Kubernetes を実行するわけではないことを理解しています。そのため、宣言型の YAML 構成または Postgres ストレージ バックエンドを介して VM またはベアメタルで実行することも可能で、これにより、完全に同期した Kong Gateway ノードのグローバル クラスターを作成することも可能です。PostgreSQL バックエンドで実行する場合、AWS Aurora や RDS などのマネージド データベースも、Postgres 互換のインターフェイスをサポートしていれば使用できます。

Kong のアーキテクチャの柔軟性を示す図
Kong は、アーキテクチャの柔軟性を考慮して構築されているため、マイクロサービス、サービス メッシュ、FaaS (Functions as a Service)、コンテナ、VM、マルチクラウドなど、さまざまな方法で構築されたアプリケーションをサポートします。

Kong Core は、プラグインのランループとして、先ほどのベンチマークで実証されたように、非常に高速でハイパフォーマンスに動作するように超最適化されています。

Kong は、API チームがアプリケーションで使いたい技術をすぐに使えるように、REST、gRPC、WebSocket、GraphQL、Kafka、TCP、UDP のサポートを、ネイティブ プロトコルとしてバンドルしています。また、Kong は「コンシューマー」という非常にユニークな概念をサポートしています (これは、当時、2 万件の API と 30 万件の API コンシューマーからなる独自の API マーケットプレイス「Mashape」のユースケースに対応するため、Kong が最初に考案したものです[9])。他のプロキシ技術ではサポートされていないものなので、これを利用して、Kong API のコンシューマーのグループや管理ルール、彼らがどの階層に属し、彼らをどのように保護し制御するかを定義できます。

Kong は、パフォーマンスの限界に挑み続けています。非常に高速なロックフリーのインメモリ データベースである LMDB を使用して、共有メモリの同時読み書きを高速化しています。Rust で実装された新しいコアルーターは、マッチング速度だけでなく、設定の読み込みも最適化されており、スループットを損なうことなく、新しい設定を読み込めます。新しいイベント メカニズムにより、コア数の多いマシンでも、IPC がボトルネックになることなく、スループットをリニアに拡張できるようになり、あらゆるサイズのマシンで良好なパフォーマンスを発揮できます。タイマーの新しいホイールベースの実装は、限られたリソースを賢く使って、同じハードウェアでスループットを向上します。

これらはすべて、軽量かつハイパフォーマンスでスケーラブルなランタイムによって動的に実行されます。

Kong プラグイン

最後に、ゲートウェイにトラフィック制御、セキュリティ、authN/Z、オブザーバビリティなどの機能を追加する Kong プラグインについて説明しましょう。あらゆるものに対応した Kong プラグインが存在します。Plugin Hub で公開されている 90 以上の公式プラグインに加え、コミュニティによって作成された約 1,000 のプラグイン[9] が利用可能です。

Kong の機能比較図

プラグインの概念を導入することで、Kong Gateway はモジュール化されたシステムとなり、コアを非常に軽量かつ高速に保ちつつ、すべての API 管理機能をプラグイン指向のアーキテクチャで提供します。プラグインは個別にインストール、削除、設定できるため、エンドユーザーは段階的に学習することができます。その結果、Kong Gateway は非常に使いやすく、前出のグラフが示すように普及率が高くなっています。Kong のプラグインは、独自の設定スキーマも提供します。このスキーマは、Kong Core によって自動的に検証され、PDK (Plugin Development Kit) が提供するノンブロッキング I/O ヘルパーによりハイパフォーマンスを維持しつつ、Kong の機能を大幅に拡張することが可能です。

Kong がプラグイン アーキテクチャで実現したイノベーションにより、プロジェクトは、コアの状態を維持しつつ、コンパートメント化された方法で機能を大幅に拡張できます。

現在、プラグインは Lua、Go、Python、Ruby、Javascript で構築できます。また、Kong では今年、パブリック技術プレビュー機能として WasmX の完全リリースを予定しています。WasmX は Kong が構築した NGINX モジュールで、Kong Gateway で WebAssembly をサポートし、任意の WASM 互換言語でプラグインを構築できるようにします。WasmX については、すでに Kong Summit 2021 でデモが行われましたが、ユーザーやお客様が実行する最も集中的なユースケースに対応できるよう、時間と労力をかけて実践的な準備を整えているところです。

プラグインは、Kong Gateway が「PDK」 (Plugin Development Kit) と呼ぶ、すべての開発者が利用できる SDK を使用して構築されます。PDK を使って、開発者は製品にネイティブに存在しない新しい機能で Kong を拡張し、エッジケースや特定の要件に対応できます。サポートされるプログラミング言語の多さ、プラグインで対応できる機能の豊富さ、設定スキーマの表現力により、Kong Gateway は比類ない柔軟性を提供します。

Kong のほとんどのユーザーやお客様にとって、拡張性は非常に重要です。API がデジタル世界のバックボーンである世界では、ゲートウェイはブラックボックスであってはならず、常に制御され、新しい要件に応じてすばやく拡張できなければなりません。

まとめ

このブログでは、Kong Gateway を支えるコア技術と、それらがどのように連携して API に信頼性の高い基盤を提供しているかを分析しました。パフォーマンス、スケーラビリティ、プラグインによる比類のない拡張性、そして使いやすさが、今日 Kong が世界で最も採用されている API ゲートウェイであり、API Analytics、API Portal、Kong Mesh (サービスメッシュ用) などの製品を通じて API のライフサイクル全般を管理するエンタープライズ プラットフォームである理由です。

このブログ記事では Kong Gateway に注目しましたが、CNCF の Kuma 上に構築されたサービス メッシュの Kong Mesh や、API の設計とテストのための Insomnia など、他の Kong 製品で使用されている技術革新についてはほとんど触れていません。Kong Gateway は API コネクティビティにおいて非常に重要な製品ですが、他の Kong 製品もそれぞれ Kong Gateway と同じ規格と厳密さで作成されています。Kong は、APIM からサービス メッシュまで、あらゆるものに 1 つの統一されたスタックで対応する、最新の API とマイクロサービス指向のアーキテクチャを支える製品を作成することを目指しています。

API の世界では、長年にわたって新しい技術やプロキシが誕生しては消えていくサイクルが繰り返されてきました。Kong は Kong Gateway で NGINX、Kong Mesh で Envoy Proxy を使用し、それぞれに貢献しています。Kong の目標は、それぞれのプロキシ ランタイムを最適に活用する API コネクティビティ スタックを提供し、スタック内のすべての技術レイヤーを革新し制御することです。

Kong Gateway をぜひお試しください。

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

参考資料:

[1] – https://www.akamai.com/newsroom/press-release/state-of-the-internet-security-retail-attacks-and-api-traffic
[2] – https://www.slideshare.net/danieljacobson/maintaining-the-front-door-to-netflix-the-netflix-api/19-14000000000Netflix_API_Calls_Per_Day
[3] – https://github.com/search?l=Lua&q=kong&type=Repositories
[4] – https://w3techs.com/technologies/overview/web_server
[5] – https://papers.freebsd.org/2021/eurobsdcon/gallatin-netflix-freebsd-400gbps.files/gallatin-netflix-freebsd-400gbps-slides.pdf
[6] – https://www.wpoven.com/blog/cloudflare-market-share/
[7] – https://www.stackscale.com/blog/top-web-servers/#:~:text=the%20same%20time.-,Most%20popular%20web%20servers,are%20Nginx%2C%20Apache%20and%20OpenResty.
[8] – https://gist.github.com/spion/3049314
[9] – https://stackshare.io/kong/how-mashape-manages-over-15000-apis-and-microservices
[10] – https://github.com/search?q=kong+plugin


記事参照: 2022 年 6 月 1 日

© Kong Inc. 2022