テスト概要
| 項目 | 詳細 |
|---|
| テスト日 | 2025年12月12日 |
| 対象エンドポイント | GET /userinfo |
| 目的 | Bearerトークン検証とユーザーデータ取得の最大スループットを測定 |
テスト環境
K6 Cloud構成
インフラ
| コンポーネント | テクノロジー |
|---|
| コンピュート | Cloudflare Workers |
| 鍵管理 | Durable Objects (KeyManager) |
| データベース | Cloudflare D1 |
| ユーザーキャッシュ | Cloudflare KV (USER_CACHE) |
テスト方法論
シナリオ
- R2に保存された4,000個の有効なアクセストークンを事前生成
- ウォームアップフェーズ: 50 RPSで30秒(DOをアクティブ化)
- ベンチマークフェーズ: ターゲットRPSで3分
- 各VUがランダムなトークンを選択して/userinfoを呼び出す
成功判定
- HTTPステータス200
- レスポンスに
subクレームが存在
- HTTP失敗ゼロ
結果 - パフォーマンスメトリクス
サマリー
| RPS | 総リクエスト数 | HTTP失敗 | CFワーカーエラー | CF DOエラー | 状態 |
|---|
| 1,000 | 146,231 | 0 | 0 | 0 | ✅ |
| 2,000 | 293,947 | 0 | 0 | 0 | ✅ |
| 2,500 | 365,648 | 0 | 0 | 0 | ⚠️ |
| 3,000 | 436,456 | 0 | 0 | 0 | ⚠️ |
注: ⚠️はK6閾値超過(P95 > 500ms)を示します
K6クライアントレイテンシ(ms)
| RPS | P50 | Mean | P95 | P99 | Max |
|---|
| 1,000 | 114 | 117 | 139 | 200 | 4,523 |
| 2,000 | 118 | 133 | 254 | 350 | 29,717 |
| 2,500 | 127 | 174 | 325 | 585 | 5,842 |
| 3,000 | 150 | 298 | 1,032 | 1,736 | 5,462 |
結果 - インフラメトリクス
Worker Duration (ms)
| RPS | 総数 | P50 | P75 | P90 | P99 | P999 |
|---|
| 1,000 | 146,231 | 13.22 | 14.14 | 15.62 | 31.20 | 88.22 |
| 2,000 | 293,947 | 14.11 | 16.57 | 24.15 | 44.54 | 176.35 |
| 2,500 | 365,648 | 15.99 | 27.52 | 55.91 | 178.63 | 668.57 |
| 3,000 | 436,456 | 17.58 | 50.69 | 124.55 | 231.23 | 596.17 |
Worker CPU Time (ms)
| RPS | P50 | P75 | P90 | P99 | P999 |
|---|
| 1,000 | 1.10 | 1.23 | 1.50 | 4.02 | 5.28 |
| 2,000 | 1.07 | 1.18 | 1.42 | 3.96 | 4.81 |
| 2,500 | 1.06 | 1.17 | 1.43 | 3.97 | 4.85 |
| 3,000 | 1.05 | 1.17 | 1.44 | 3.98 | 4.92 |
重要な発見: CPU時間はP50で約1msで安定 - JWT RS256検証オーバーヘッドは最小限
Durable Objects Wall Time (ms)
KeyManager DO(JWK取得・キャッシュ用):
| RPS | 総DOリクエスト | DOエラー | P50 | P75 | P90 | P99 | P999 |
|---|
| 1,000 | 146,324 | 0 | 0.82 | 1.87 | 3.38 | 7.83 | 89.34 |
| 2,000 | 294,023 | 0 | 0.46 | 0.74 | 1.63 | 6.87 | 40.59 |
| 2,500 | 352,388 | 0 | 0.40 | 0.58 | 1.19 | 5.41 | 39.51 |
| 3,000 | 366,986 | 0 | 0.38 | 0.54 | 0.94 | 6.07 | 58.62 |
重要な発見: 高RPS時にDO wall timeが改善(キャッシュヒット率向上のため)
キャパシティ推奨
| 用途 | 推奨RPS | 根拠 |
|---|
| 通常運用 | ≤2,000 | K6 P99 < 350ms、CF P99 < 50ms、エラー0% |
| ピーク対応 | ≤2,500 | K6 P99 < 600ms、CF P99 < 200ms、エラー0% |
| 絶対上限 | ≤3,000 | K6 P99 < 2000ms、CF P99 < 250ms、DOエラー0% |
主要な発見
1. JWT検証は高速
- CPU時間P99: 全RPS帯で約4ms
- V8 WebCrypto + JWKキャッシュでRS256検証は無視できるレベル
2. KeyManager DOは超高速
- Wall time P99: 5-8msで安定
- 高RPSで高キャッシュヒット率
3. Workerキューイングがボトルネック
- Worker Duration P99が31ms→231msに上昇
- CPU timeは横ばい - リクエストキューイングが原因
4. キャッシュが効果的
- USER_CACHE(KV)でD1書き込みが一定
- Read-throughパターンでコールドキャッシュミスを防止
5. 全RPS帯で100%成功率
- 3,000 RPSでもHTTP失敗ゼロ
- 過負荷でもシステムは信頼性を維持
サイレント認証との比較
| エンドポイント | 推奨 | ピーク | 限界 |
|---|
| サイレント認証 | 2,000 RPS | 3,000 RPS | 4,000 RPS |
| UserInfo | 2,000 RPS | 2,500 RPS | 3,000 RPS |
UserInfoのスループットが低い理由:
- JWT検証オーバーヘッド
- ユーザーデータのD1読み取り
結論
AuthrimのUserInfoエンドポイントは:
- 2,000 RPSまで: 高品質レスポンス(K6 P99 < 350ms、CF P99 < 50ms)
- 2,500 RPSまで: 許容範囲(K6 P99 < 600ms、CF P99 < 200ms)
- 3,000 RPS以上: 顕著な劣化(K6 P99 > 1,700ms)
Durable Objects(KeyManager)は高速 - ボトルネックはCloudflare Workersのリクエストキューイングです。さらなるスケールアウトにはマルチリージョン展開またはWorker分散が必要です。
全RPS帯で100%成功率を達成 - スループット限界でも信頼性は維持されています。