結論
- 少なくとも、リクエスト時間が十分短い軽量なワークロードでは、gatlingよりも、K6のほうが処理が早い。
- gatlingでは400TPS程度までしか出せず、エラーになる条件でも、K6は1000TPS以上出すことができる。
- Gatlingであれば工夫して複数インスタンス同時実行しなければならない状況でも、K6ならば1インスタンスのみの実行で収まるケースが増えると思われるため、K6のほうが利便性が高い
ツール
テスト条件
- Azure Container Instance上に公開した、簡単なカウンター加算アプリのエンドポイントに対し、
インターネット経由で各負荷テストツールでリクエストを行う。 - ワークロードは、getリクエストとputリクエストが50:50の割合になるようにする
- 各負荷テストツールの実行環境は、gitlab-runner(Docker Executor)。
アプリコード
テストコード
- K6
- Gatling
結果
K6は最大1000TPSに達するまでリクエストしても、エラーが発生しなかった。
また、putリクエストの回数に等しいだけ、カウンターアプリケーションの加算が正常に発生したことを確認できた。
Gatlingは2回実行したが、いずれも数十秒経過でKOが発生した。
原因は2000msを超過したことによりタイムアウトである。タイムアウトは同様の傾向を示していた。
タイムアウトを外すことは可能ではあるが、原因がレスポンス遅延である。
K6であれば所定時間内にレスポンスできている点やACIメトリクスから、ACI側のボトルネックはないことを確認している。
K6では最も悪いケースで300ms、大半のリクエストが60ms以内に解決できているため、そもそも負荷出し性能に劣ると判断した。
Gatling(1回目)
Gatling(2回目)
K6
件数が一致するかどうかの確認以外は、下記ページに記載。