コンテンツにスキップ

トークンイントロスペクション負荷テスト

テスト概要

項目詳細
テスト日2025年12月16日
対象エンドポイントPOST /introspect
目的失効チェック付きリソースサーバートークン検証のパフォーマンスを測定

エグゼクティブサマリー

目標RPSシャード数キャッシュ実効RPS成功率P95HTTP失敗状態
300 RPS16無効~298100%324ms0✅ 優秀
500 RPS16無効~555100%1,110ms0⚠️ 閾値超過
500 RPS32有効~527100%1,245ms1⚠️ キャッシュ効果限定的
750 RPS32無効~735100%2,605ms0⚠️ 高負荷

トークン検証精度(全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 RPS750 RPS
Generation12
総シャード数1632
リージョンwnam (0-15)wnam (0-31)
JTI形式g1:wnam:{shard}:{random}g2:wnam:{shard}:{random}

テスト方法論

トークンミックス(RFC 7662 + 業界標準)

タイプ比率期待結果検証項目
有効(標準)60%active=truescope/sub整合性
有効(Token Exchange)5%active=trueact/resource claim (RFC 8693)
期限切れ12%active=false即時検出
失効済み12%active=falseDO/KVリアルタイムチェック
不正Audience6%active=falseaud検証 (strictValidation)
不正Client5%active=falseclient_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
ピークRPS298 req/s
成功率100%
Active正解率100%

レスポンスタイム(ms)

パーセンタイル
Mean237ms
P50229ms
P95324ms
P99329ms
Max478ms

優秀: 全メトリクスが閾値内

500 RPS(16シャード)

テスト期間: 2025-12-16 01:38:30 - 01:43:00 UTC

メトリクス
総リクエスト数72,302
HTTP失敗0
ピークRPS555 req/s
成功率100%

レスポンスタイム(ms)

パーセンタイル
P50216ms
P951,110ms
P991,253ms

⚠️ 閾値超過: P95 > 500ms目標、ただしエラーゼロ

500 RPS(32シャード、キャッシュ有効)

テスト期間: 2025-12-16 08:08:00 - 08:12:30 UTC キャッシュ: 有効 (TTL 60秒) トークン数: 500(高キャッシュヒット率を想定しRPSと同数)

メトリクス
総リクエスト数71,941
HTTP失敗1
ピークRPS527 req/s
成功率99.9986%

キャッシュ効果分析

メトリクスキャッシュ無効 (16シャード)キャッシュ有効 (32シャード)差分
P951,110ms1,245ms+12%
Worker P99193ms221ms+15%
DO P99325ms688ms+112%
D1 Reads706,6891,083,282+53%

キャッシュ効果が限定的だった理由:

  1. トークン数≒RPS(同一トークンの再利用が少ない)
  2. キャッシュヒット時もセキュリティのため失効チェックを実施
  3. シャード数増加のオーバーヘッドがキャッシュ効果を上回った

750 RPS(32シャード)

テスト期間: 2025-12-16 02:15:00 - 02:19:30 UTC

メトリクス
総リクエスト数87,771
HTTP失敗0
ピークRPS735 req/s
成功率100%

レスポンスタイム(ms)

パーセンタイル
P50227ms
P952,605ms
P992,687ms

⚠️ 高負荷: 32シャードで750 RPSのエラーゼロを達成

トークン検証精度

全RPS帯で100%精度を達成:

トークンタイプ期待結果精度状態
有効(標準)active=true100%
有効(Token Exchange)active=true100%
期限切れactive=false100%
失効済みactive=false100%
不正Audienceactive=false100%
不正Clientactive=false100%
セキュリティメトリクス結果
False Positives0
False Negatives0
Claim整合性 (scope/aud/sub/iss)100%

キャパシティ推奨

負荷レベルRPS月間リクエスト数シャード数推奨
低負荷~300~780M16✅ 推奨
中負荷~500~1.3B16△ 許容
高負荷~750~1.9B32⚠️ 要監視
限界負荷1000+2.6B+32+❌ 要スケールアウト

シャーディング効果

750 RPS比較

シャード数P95HTTP失敗改善
162,687ms2-
322,605ms0✅ エラー解消

主要な発見

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通信量です。キャッシュ効果は実際の使用パターン(同一トークンの複数回アクセス)に依存します。