コンテンツにスキップ

エッジコンピューティング

AuthrimはCloudflare Workers向けのエッジネイティブなアイデンティティ&アクセスプラットフォームです。ログイン、トークン交換、セッション検証、フェデレーション、管理サーフェスを複数Workerに分割し、Service Bindingsで接続します。このページでは、なぜアイデンティティにエッジネイティブなデプロイが重要なのか、AuthrimがWorkersネイティブなprimitiveをどう使うか、運用者が評価すべきパフォーマンスとコスト特性を説明します。

なぜアイデンティティにエッジか?

Section titled “なぜアイデンティティにエッジか?”

従来のアイデンティティプラットフォームは、1つまたは少数のリージョンにある中央集権的なサーバーで動作します。これには本質的な限界があります。

課題中央集権型アプローチエッジアプローチ
レイテンシ固定リージョンへの余分な往復が発生ワークロードに応じてユーザーまたはストレージに近い場所で実行可能
コールドスタートコンテナ/VM起動で遅延が増える場合があるV8 isolateは軽量に起動
スケーリング垂直スケーリングまたは複雑なオートスケーリングリクエスト単位の自動水平スケーリング
単一障害点リージョン障害がサービス全体に影響しやすいCloudflareのグローバルネットワーク上でルーティング可能
グローバルユーザー中央リージョンへの距離に依存Global Workersと明示的なstorage/residency profileを組み合わせられる

認証はすべてのユーザーインタラクションのクリティカルパス上にあります。遅いログインフローやトークン検証は、ユーザー体験とアプリケーションパフォーマンスに直接影響します。エッジネイティブなデプロイは不要なルーティングを減らしますが、実際のレイテンシーはワークロード、ストレージプロファイル、Cloudflareプラン制限、ネットワーク経路に依存します。

Cloudflare Workersプラットフォーム

Section titled “Cloudflare Workersプラットフォーム”

AuthrimはCloudflare Workers上で動作します。これは独自の特性を持つサーバーレスプラットフォームです。

WorkersはV8 isolate — Chromeと同じJavaScriptエンジン — で実行されます。コンテナやVMとは異なり:

  • 軽量な起動 — isolate起動は一般にコンテナ起動より軽量
  • 小さなランタイムフットプリント — コンテナイメージやVM fleetの管理を避けられる
  • セキュア — テナント間のハードウェアレベル分離

WorkersはCloudflareのグローバルネットワーク上で動作します。Authrimは公開プロトコルエンドポイントにこれを使いつつ、D1 binding、runtime storage profile、tenant-D1 routing、外部DB adapter、必要に応じたDurable Object location hintでストレージ配置を明示します。

プラットフォームプリミティブ

Section titled “プラットフォームプリミティブ”

AuthrimはWorkersエコシステムをフル活用しています。

プリミティブAuthrimでの用途
Workersステートレスなリクエスト処理(認証フロー、トークン検証)
Durable Objectshotで強整合な状態(sessions、auth codes、challenges、PAR、DPoP、device/CIBA、SAML、flow state)
D1デプロイ/テナントDB(DBDB_PIIDB_ADMIN、生成済みtenant-D1 slots)
KV生成設定、cache、consent cache、tenant runtime registry snapshots
Service BindingsWorker間通信(ネットワークコストゼロのRPC)
Queues非同期処理(Webhook、SCIM sync、監査ログエクスポート)

ステートレスWorkers + ステートフルDurable Objects

Section titled “ステートレスWorkers + ステートフルDurable Objects”

Authrimのアーキテクチャは関心事を明確に分離します。

flowchart TB
    subgraph Stateless["ステートレス層 — Workers"]
        w1["リクエストルーティング"]
        w2["トークン署名"]
        w3["OIDC検証"]
        w4["ポリシー評価"]
        w5["クレームマッピング"]
    end
    subgraph Stateful["ステートフル層 — Durable Objects"]
        do1["セッション保存"]
        do2["認可コードライフサイクル"]
        do3["チャレンジ状態"]
        do4["リフレッシュトークン"]
        do5["レート制限カウンター"]
    end
    Stateless -- RPC --> Stateful
    Stateless --> D1["D1 (SQL)"]
    Stateful --> DOS["DOストレージ(シャード単位)"]

Workersはステートレスな計算を処理します — リクエストの解析、トークンの検証、ポリシーの評価、レスポンスの構築。設定なしで水平スケーリングします。

Durable Objectsはステートフルな操作を処理します — セッションの保存、認可コードのライフサイクル管理、レート制限、プロトコル状態の維持。各DOインスタンスはシングルスレッドのアクターであり、強い一貫性を持つストレージを備え、対応済みの箇所では明示的なシャード設定によりスケールします。詳細はアーキテクチャ — Durable Objectの状態管理とシャーディングを参照してください。

この分離により、ステートレス層はWorkersに合わせてスケールし、ステートフル層はDurable Objectの明示的なシャーディングとストレージプロファイル選択によりスケールします。

K6 Cloudで代表的なAuthrimワークロードに対して測定:

メトリック備考
トークン系エンドポイント2,500〜3,500 RPStoken/introspection系の検証ワークロード
完全OAuthログインフロー約150 logins/sec代表的なログインワークロード
Worker CPU時間典型1〜4ms検証ランでの観測値
エラー率検証ランで0%測定したシナリオ内

Identity操作はログイン、トークン更新、API認可、フェデレーションの経路にあります。Authrimの構成は、protocol workerをリクエスト経路に近づけ、worker間通信にService Bindingsを使うことで不要なネットワークhopを減らします。一方で、ストレージが重い経路ではD1、Durable Objects、tenant-D1、外部DB、audit sinkを含めたキャパシティ設計が必要です。

Workersは自動的にスケールします — Cloudflareが受信リクエストを処理するために必要な数のisolateをインスタンス化します。プロビジョニングもキャパシティプランニングも不要です。

Durable Objectsについては、セッション、認可コード、リフレッシュトークンローテーション、チャレンジなど高トラフィックなauth stateに明示的なシャード数を使います。詳細はアーキテクチャ — Durable Objectの状態管理とシャーディングを参照してください。

結果:

flowchart TB
    req["受信リクエスト"]
    req --> W1["Worker 1"] & W2["Worker 2"] & WN["Worker N"]
    W1 & W2 & WN --> DO0["Session shard 0"] & DO1["Session shard 1"] & DO2["Auth code shard 0"] & DO3["Refresh shard 0"]

Authrimはcompute placementとstorage selectionを分離します。

  • Worker routingは ar-router とService Bindingsで処理されます。
  • Storage localityはruntime storage profile(shared-d1tenant-d1、外部DBプロファイル)で選択します。
  • Durable Objectの locationHint は初期配置をガイドできますが、レイテンシー保証ではありません。
  • tenant-D1デプロイでは、生成済みtenant DB slot、migration、registry snapshotを計画する必要があります。

Authrim自体にユーザー単位のベンダー課金はありませんが、運用コストがゼロになるわけではありません。Cloudflare利用量と運用要件がコストを左右します。

コスト要因影響するもの
Workersリクエスト量、CPU時間、worker数、deployment profile
D1 / tenant-D1read/write量、DB数、tenant slot数、storage size
KVcache read/write、生成設定、tenant runtime registry snapshots
Durable Objectshot state requests、storage、shard counts
R2 / logging sinksaudit retention、archive policy、export volume
Operationsmonitoring、security review、compliance、support、backup、incident response
側面従来型(中央集権)Authrim(エッジ)
レイテンシ選択リージョンと距離に依存worker routing、storage profile、network pathに依存
コールドスタートコンテナ/VM起動で遅延が増える場合があるWorkers isolateは軽量に起動
スケーリング手動/オートスケール(分単位)自動(ミリ秒単位)
リージョン明示的にプロビジョンしたリージョンCloudflare global networkと明示的なstorage/residency選択
コストベンダー/インフラモデルに依存Cloudflare利用量 + Authrim運用コスト
運用負荷サーバー、スケーリング、パッチ、証明書Cloudflare-managed primitivesを利用。ただしAuthrimのデプロイ/コンプライアンス運用は必要
データ局所性リージョン選択に制限Runtime storage profiles、tenant-D1、外部DBプロファイル、location hints
可用性リージョンバウンドアーキテクチャCloudflare services、deployment design、storage profileに依存