3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Kong Gateway】言語別カスタムプラグイン性能比較

Posted at

はじめに

本記事では、Kong Gateway のカスタムプラグインで公式ドキュメントにある言語別の性能を比較します。

本記事で利用したコードは以下になります。

Kong Gateway とは

Kong Gateway とは OSS のクラウドネイティブの API Gateway です。
本記事では深く説明しませんが、 @m5takeda さんの記事で詳しく解説されています。

検証環境

  • Ubuntu 24.04.3(WSL)
  • Docker

作成するカスタムプラグ

Valkey を利用してルートへのアクセスをカウントする以下のようなプラグインを作成します。

Docker 構成

  • Kong: 3.12.0.1
    • mem_limit: 2048m
    • cpus: 1.0
  • Postgres(Kong 用): 17
    • mem_limit: 1024m
    • cpus: 1.0
  • API(Upstream サーバー): python3.12
    • mem_limit: 2048m
    • cpus: 1.0
  • Valkey: 9.0.0
    • mem_limit: 4096m
    • cpus: 2.0
構成図

性能試験結果

今回は K6 を用いて、アクセスが 100RPS , 300RPS , 500RPS 時の性能を調査します。

K6 設定
{
  scenarios: {
    constant_request_rate: {
      executor: "constant-arrival-rate",
      rate: 100,
      // rate: 300,
      // rate: 500,
      timeUnit: "1s",
      duration: "60s",
      preAllocatedVUs: 300,
      // preAllocatedVUs: 500, // 500RPS時
      maxVUs: 10000,
      // maxVUs: 20000, // 500RPS時
    }
  }
}

実施結果

  • 100RPS
送信データ量
8.0 kB/s

言語 avg med p(90) p(95)
Lua 3.54 ms 3.33 ms 4.07 ms 4.42 ms
Go 4.00 ms 3.67 ms 4.43 ms 4.79 ms
Python 4.36 ms 3.97 ms 4.74 ms 5.14 ms
JavaScript 4.30 ms 3.84 ms 4.68 ms 5.12 ms
  • 300RPS
送信データ量
24 kB/s

言語 avg med p(90) p(95)
Lua 3.66 ms 3.19 ms 3.99 ms 4.60 ms
Go 3.96 ms 3.46 ms 4.37 ms 5.12 ms
Python 4.48 ms 3.94 ms 4.86 ms 5.66 ms
JavaScript 4.53 ms 2.74 ms 5.06 ms 6.07 ms
  • 500RPS
送信データ量
41 kB/s

言語 avg med p(90) p(95)
Lua 6.36 ms 3.64 ms 7.14 ms 13.94 ms
Go 5.08 ms 3.93 ms 5.86 ms 11.36 ms
Python 13.53 ms 4.95ms 28.62 ms 40.17 ms
JavaScript 11.12 ms 4.56 ms 17.55 ms 29.14 ms

所感

今回の検証結果から、レスポンスタイムに差があれどアクセス数が 300RPS までならどの言語でも使用に問題ないことがわかりました。
ただし 500RPS と高い数値になると Python, JavaScript は選択肢から外し、Lua と Go での実装が適していると判断できます。

ただ今回の検証環境では、Docker で環境を立ち上げている関係上、他のコンテナ資源やホスト OS(WSL)の制約にも影響を受けている可能性があります。
そのため、今回の結果はあくまで 同一マシン上の Docker 環境 という前提になり、本番環境での性能やチューニング次第で逆転する可能性もあります。とはいえ、Lua と Go が高い RPS でも安定した応答を返していたことから、高負荷を想定した API Gateway の拡張には Lua または Go が有力な選択肢になると思います。

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?