トークンイントロスペクション負荷テスト
テスト概要
| 項目 | 詳細 |
|---|---|
| テスト日 | 2025年12月16日 |
| 対象エンドポイント | POST /introspect |
| 目的 | 失効チェック付きリソースサーバートークン検証のパフォーマンスを測定 |
エグゼクティブサマリー
| 目標RPS | シャード数 | キャッシュ | 実効RPS | 成功率 | P95 | HTTP失敗 | 状態 |
|---|---|---|---|---|---|---|---|
| 300 RPS | 16 | 無効 | ~298 | 100% | 324ms | 0 | ✅ 優秀 |
| 500 RPS | 16 | 無効 | ~555 | 100% | 1,110ms | 0 | ⚠️ 閾値超過 |
| 500 RPS | 32 | 有効 | ~527 | 100% | 1,245ms | 1 | ⚠️ キャッシュ効果限定的 |
| 750 RPS | 32 | 無効 | ~735 | 100% | 2,605ms | 0 | ⚠️ 高負荷 |
トークン検証精度(全RPS共通)
| 検証項目 | 結果 |
|---|---|
| Active判定全体正解率 | 100% ✅ |
| False Positives (revoked→active) | 0 ✅ |
| False Negatives (valid→inactive) | 0 ✅ |
| Token Exchange claims (act/resource) | 100% ✅ |
| strictValidation (aud/client) | 100% ✅ |
テスト環境
K6 Cloud構成
| コンポーネント | 詳細 |
|---|---|
| 負荷生成 | K6 Cloud (amazon:us:portland) |
| ターゲット | https://conformance.authrim.com |
| プロトコル | Client credentials (Basic Auth) |
インフラ
| コンポーネント | テクノロジー |
|---|---|
| コンピュート | Cloudflare Workers (op-management) |
| 失効管理 | Durable Objects (Region-Aware JTI Sharding) |
| データベース | Cloudflare D1 |
| キャッシュ | Cloudflare KV (オプション、TTL 60秒) |
シャード構成
| 設定 | 300/500 RPS | 750 RPS |
|---|---|---|
| Generation | 1 | 2 |
| 総シャード数 | 16 | 32 |
| リージョン | wnam (0-15) | wnam (0-31) |
| JTI形式 | g1:wnam:{shard}:{random} | g2:wnam:{shard}:{random} |
テスト方法論
トークンミックス(RFC 7662 + 業界標準)
| タイプ | 比率 | 期待結果 | 検証項目 |
|---|---|---|---|
| 有効(標準) | 60% | active=true | scope/sub整合性 |
| 有効(Token Exchange) | 5% | active=true | act/resource claim (RFC 8693) |
| 期限切れ | 12% | active=false | 即時検出 |
| 失効済み | 12% | active=false | DO/KVリアルタイムチェック |
| 不正Audience | 6% | active=false | aud検証 (strictValidation) |
| 不正Client | 5% | active=false | client_id検証 |
シードトークン数: 3,000トークン
成功判定
- P95レイテンシ < 500ms
- P99レイテンシ < 800ms
- 成功率 > 99%
- False Positives = 0
- False Negatives = 0
結果 - パフォーマンスメトリクス
300 RPS(16シャード)
テスト期間: 2025-12-16 00:14:00 - 00:18:30 UTC
| メトリクス | 値 |
|---|---|
| 総リクエスト数 | 43,874 |
| HTTP失敗 | 0 |
| ピークRPS | 298 req/s |
| 成功率 | 100% |
| Active正解率 | 100% |
レスポンスタイム(ms)
| パーセンタイル | 値 |
|---|---|
| Mean | 237ms |
| P50 | 229ms |
| P95 | 324ms |
| P99 | 329ms |
| Max | 478ms |
✅ 優秀: 全メトリクスが閾値内
500 RPS(16シャード)
テスト期間: 2025-12-16 01:38:30 - 01:43:00 UTC
| メトリクス | 値 |
|---|---|
| 総リクエスト数 | 72,302 |
| HTTP失敗 | 0 |
| ピークRPS | 555 req/s |
| 成功率 | 100% |
レスポンスタイム(ms)
| パーセンタイル | 値 |
|---|---|
| P50 | 216ms |
| P95 | 1,110ms |
| P99 | 1,253ms |
⚠️ 閾値超過: P95 > 500ms目標、ただしエラーゼロ
500 RPS(32シャード、キャッシュ有効)
テスト期間: 2025-12-16 08:08:00 - 08:12:30 UTC キャッシュ: 有効 (TTL 60秒) トークン数: 500(高キャッシュヒット率を想定しRPSと同数)
| メトリクス | 値 |
|---|---|
| 総リクエスト数 | 71,941 |
| HTTP失敗 | 1 |
| ピークRPS | 527 req/s |
| 成功率 | 99.9986% |
キャッシュ効果分析
| メトリクス | キャッシュ無効 (16シャード) | キャッシュ有効 (32シャード) | 差分 |
|---|---|---|---|
| P95 | 1,110ms | 1,245ms | +12% |
| Worker P99 | 193ms | 221ms | +15% |
| DO P99 | 325ms | 688ms | +112% |
| D1 Reads | 706,689 | 1,083,282 | +53% |
キャッシュ効果が限定的だった理由:
- トークン数≒RPS(同一トークンの再利用が少ない)
- キャッシュヒット時もセキュリティのため失効チェックを実施
- シャード数増加のオーバーヘッドがキャッシュ効果を上回った
750 RPS(32シャード)
テスト期間: 2025-12-16 02:15:00 - 02:19:30 UTC
| メトリクス | 値 |
|---|---|
| 総リクエスト数 | 87,771 |
| HTTP失敗 | 0 |
| ピークRPS | 735 req/s |
| 成功率 | 100% |
レスポンスタイム(ms)
| パーセンタイル | 値 |
|---|---|
| P50 | 227ms |
| P95 | 2,605ms |
| P99 | 2,687ms |
⚠️ 高負荷: 32シャードで750 RPSのエラーゼロを達成
トークン検証精度
全RPS帯で100%精度を達成:
| トークンタイプ | 期待結果 | 精度 | 状態 |
|---|---|---|---|
| 有効(標準) | active=true | 100% | ✅ |
| 有効(Token Exchange) | active=true | 100% | ✅ |
| 期限切れ | active=false | 100% | ✅ |
| 失効済み | active=false | 100% | ✅ |
| 不正Audience | active=false | 100% | ✅ |
| 不正Client | active=false | 100% | ✅ |
| セキュリティメトリクス | 結果 |
|---|---|
| False Positives | 0 |
| False Negatives | 0 |
| Claim整合性 (scope/aud/sub/iss) | 100% |
キャパシティ推奨
| 負荷レベル | RPS | 月間リクエスト数 | シャード数 | 推奨 |
|---|---|---|---|---|
| 低負荷 | ~300 | ~780M | 16 | ✅ 推奨 |
| 中負荷 | ~500 | ~1.3B | 16 | △ 許容 |
| 高負荷 | ~750 | ~1.9B | 32 | ⚠️ 要監視 |
| 限界負荷 | 1000+ | 2.6B+ | 32+ | ❌ 要スケールアウト |
シャーディング効果
750 RPS比較
| シャード数 | P95 | HTTP失敗 | 改善 |
|---|---|---|---|
| 16 | 2,687ms | 2 | - |
| 32 | 2,605ms | 0 | ✅ エラー解消 |
主要な発見
1. 300 RPSが安定動作ポイント
300 RPSで全メトリクスが閾値内。
2. トークン検証は100%正確
高負荷下でも、トークンタイプ検出は完璧(False Positive/Negativeゼロ)。
3. シャーディングでエラー解消
32シャードで750 RPSのHTTP失敗がゼロ(16シャードでは2件)。
4. キャッシュ効果は使用パターンに依存
- テスト条件: 限定的効果(トークン数≒RPS)
- 本番: トークン再利用で改善期待
- セキュリティ: 失効チェックは常時実施
5. DOリクエスト数がボトルネック
500+ RPSでWorker-DO通信が制限要因に。
結論
Token Introspectionエンドポイントは:
- 300 RPSまで: 全メトリクスが閾値内で安定動作
- 500 RPSまで: レイテンシ増加だがエラーゼロ
- 32シャードで750 RPS: 高負荷でもエラーゼロ
全負荷レベルで100%トークン検証精度 - パフォーマンスのためにセキュリティを犠牲にしません。
主要ボトルネックはWorker-DO通信量です。キャッシュ効果は実際の使用パターン(同一トークンの複数回アクセス)に依存します。