Kong Gatewayの2024年にリリースされた機能を俯瞰する

Kong Advent Calendarの最終日ということで、今回は趣を変えてKong Gatewayの[リリースノート](https://github.com/Kong/kong/releases)を見ながら、どんな機能が追加・変更・削除されていったかを見てみたいと思う。
なお、パッチバージョンのリリースは理由がない限り紹介はスキップする。

## 2024年のリリース
2024年には以下のリリースがあった。

- 3.6：2月10日リリース　([公式ブログ](https://konghq.com/blog/product-releases/kong-gateway-3-6))
- 3.7：5月29日リリース　([公式ブログ](https://konghq.com/blog/product-releases/kong-gateway-3-7))
- 3.8：9月11日リリース　([公式ブログ](https://konghq.com/blog/product-releases/kong-gateway-3-8))
- 3.9：12月13日リリース　([公式ブログ](https://konghq.com/blog/product-releases/kong-gateway-3-9))

3.5ヶ月位のペースでリリースされ、リリース間隔は安定していた。

### 3.6の内容
3.6のChangeLogは[こちら](https://github.com/Kong/kong/blob/release/3.6.0/changelog/3.6.0/3.6.0.md)。

3.6はなんといっても[AI Gateway](https://docs.konghq.com/gateway/latest/ai-gateway/)が最大の目玉である。（それ以外はあまり派手なものはない）
AI Gatewayのコンセプトは以下の図のようになる。
![20241206141249.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547981/1ae1355e-8425-5a24-b7a9-e779f15fbe79.png)
（[AI Gateway](https://docs.konghq.com/gateway/latest/ai-gateway/)より抜粋）

API Gatewayのコンセプトである、「アプリケーション個々で認証とか流量制限作り込むよりも集約させた方が効率いいよね」をLLMの世界に展開した形になる。
AI Gatewayは聞こえはKong Gatewayと横並びの別製品に聞こえそうだが、実態はKong GatewayのPluginであり、ざっくり以下のような機能を提供する
- LLMの一元管理
- プロンプトのガバナンス強化
- LLM固有のメトリクス収集、流量制限
- リクエスト、レスポンスの変換
- セマンティックキャッシュ

リリース当時は確か6つAI向けのプラグインをリリースしていたが、現在は11と着々と増えている。
今後も発展が楽しみな分野である。
ちなみに当時動かした時の私の記事は[こちら](https://qiita.com/ipppppei/items/8e6e02a56676e33853fc)。
今でもお試し用にコマンド一発で環境構築できるスクリプトが用意されているので、興味がある人は一度試してみると良いと思う。

### 3.7の内容
3.7のChangeLogは[こちら](https://github.com/Kong/kong/blob/master/changelog/3.7.0/3.7.0.md)。

AI GatewayがベータからGAに昇格し、AIのトークンをベースとしたRate Limiting Pluginが登場、とAI関係は相変わらず力を入れたリリースとなった。
その他の更新としては以下のようなものがあった。
- 性能改善としてスループットが7%改善
- トレーサビリティの強化
- Route指定時のExpression表記とJSON表記の併用利用が可能に
- OIDCプラグインの強化（JARやJARMのサポート）

未だに大きな性能改善が出来るのは興味深い。
Kong Gatewayは他のAPI Gatewayと比べて性能がいいとの[第三者機関のレポートがある](https://gigaom.com/report/api-and-microservices-management-benchmark-3/)が、2022年のデータなので今だったらどうなるのか見てみたいところである。

あとトレーサビリティの強化についてはOpenTelemetry Pluginが改善され、伝搬時の細かな設定が可能となった。
ドキュメント的には[この辺り](https://docs.konghq.com/hub/kong-inc/opentelemetry/3.7.x/#extract-clear-and-inject)の内容となる。

### 3.8の内容
3.8のChangeLogは[こちら](https://github.com/Kong/kong/blob/master/changelog/3.8.0/3.8.0.md)。

[公式ブログのアナウンス](https://konghq.com/blog/product-releases/kong-gateway-3-8)ではIncremental Configuration Syncという、設定変更時に全体同期せず、必要なData PlaneにのみSyncさせるという熱い機能が記載されているが、テクニカルプレビューということもあるせいかリリースノートには記載されておらず利用できない。
リリースされたものとしては以下がざっくりある。
- 新規プラグインの追加
  - [Json Threat Protection](https://docs.konghq.com/hub/kong-inc/json-threat-protection/)：JSONの構造に対して評価ルールを提供する
  - [Upstream OAuth](https://docs.konghq.com/hub/kong-inc/upstream-oauth/)：KongとUpstream間のOAuthをサポート
  - [Header Cert Authentiation](https://docs.konghq.com/hub/kong-inc/header-cert-auth/)：HTTPヘッダで提供されるクライアント証明書を使用しての認証をサポート
- OpenTelemetry Pluginを一新し、トレーシングだけでなくメトリクスとログもサポート
- Prometheus向けにAI周りのメトリクス（`ai_requests_total`、`ai_cost_total`、`ai_tokens_total`）を追加
- PDKにOpenTelemetry向けに`kong.telemetry`と`kong.telemetry.log`が追加
- AI Gatewayにセマンティック系のプラグインの追加
- AI GatewayのプロバイダにAWS BedrockとGCP Vertexが追加

個人的にはOpenTelemetryのアップデートが一番興味深かった。
APIを使う上ではObservabilityの観点は重要であり、メトリクスとログもカバーすることで今までトレーシング、メトリクス、ログと分かれて管理していたものが統一出来そうなのは運用が少しに楽になりそうな気がした（まだ試せていないが。。。）。
また新規のプラグインがセキュリティ関連のものばかりであり、セキュリティにも継続して力を入れていることが分かる。
AI周りについてはセマンティック系のプラグインが追加された。
セマンティックとは意味論みたいな意味合いで、過去に問い合わせた内容をキャッシュして活用するものだ。
類似する意味の質問をキャッシュした内容から回答するセマンティックキャッシュや、不適切な質問をガードするプロンプトガードにもセマンティック的な機能をもたせたものが登場し、性能面やコスト面で通常のLLMへの問い合わせより有利になっている模様。
以下は[AI Gateway 3.8のブログ](https://konghq.com/blog/product-releases/ai-gateway-3-8)から抜粋したグラフであり、セマンティックキャッシュありだと4倍近い性能が出ていることが分かる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547981/8b91bfd7-b7f5-ef51-3d91-00c6d1f7fefe.png)

3.8はAPI Summitというイベントの中での発表であり、Kongが力を入れている分野がよく分かるリリースだった。

### 3.9の内容
3.9の変更内容は[こちら](https://docs.konghq.com/gateway/changelog/#3900)。
リリースされたものとしては以下がざっくりある。
- 新規プラグインの追加
  - [Redirect](https://docs.konghq.com/hub/kong-inc/redirect/)：指定したURLにリダイレクトする。一時的にServiceにアクセスさせたくない時とかに便利。(※Kong Gatewayとは関係ないが、301リダイレクトするとChromeだとキャッシュから消えず延々と転送されてしまうので注意)
  - [Injection Protection](https://docs.konghq.com/hub/kong-inc/injection-protection/)：SQLインジェクションなどのパターンを検出してブロックする。独自にパターンを正規表現で設定することも可能。
  - [Service Protection](https://docs.konghq.com/hub/kong-inc/service-protection/)：レート制限をリクエスト元の指定なしでService単位に指定する。既存のRate Limiting Pluginとの組み合わせも可能。
- AIのプロバイダに[Hugging FaceのInference API](https://huggingface.co/docs/api-inference/index)を追加
- Kong Managerの複数ドメイン指定のサポート

セキュリティ関連のPluginが追加され引き続きセキュリティに注力していること、AI関連もプロバイダが追加されたりPluginの機能改善が行われていたことから相変わらず注力していることが伺える。
あとレート制限のプラグインが増えたが、Kongのプラグインは1リクエストあたりに同一のプラグインを2回動作させることが出来ないため、Service全体用とRoute個別用でそれぞれレート制限を設定できるようになったのは便利。

## 所感
やはり今年一番の目玉だったのはAI関連の機能追加だと思う。複数のLLMの管理の重要性は、先日のChatGPTの障害に遭遇して慌ててGemini等を代用した私みたいな人なんかは身に染みて感じるのではないかと思う。
来年もAI周りは引き続き力を入れていくのではないかと思うので、継続して確認しておきたい。
あとセキュリティやオブザーバビリティ周りも継続して強化しているようだった。
セキュリティ周りはアプリケーション開発者が外に出したい部分だと思うし、機能追加・改善は有り難い。
オブザーバビリティも運用時に役立つのはもちろん、開発時のトラシュや性能チューニングなどにも利用できるので、こちらの機能改善・追加も開発者的に有り難いところだと思う。

Kong Gatewayが初めてリリースされたのがRelease Noteを見ると2015/2/25と[なっていて](https://github.com/Kong/kong/blob/master/CHANGELOG-OLD.md#001alpha-1---20150225)、来年で10年となる。
10年も立てば枯れそうなものだが、まだまだ機能追加が積極的にされているのはAPIの奥深さを感じるところである。
来年はまたどういう機能が追加されるか楽しみにしながら、継続してリリース情報をウォッチしていきたい。