Skip to content

パフォーマンスベースライン

このページでわかること: Takosumi のデプロイ処理のベンチマーク結果。

takos/scripts/load-test/ のスクリプトで計測したインプロセスのパフォーマンスベースラインです。

計測環境

  • ランタイム: Bun (bun run load-test)
  • ストレージ: InMemoryDeploymentStore (Map ベース、ネットワーク往復なし)
  • プロバイダーアダプター: SYNTHETIC_PROVIDER_ADAPTER (常時成功、クラウド往復なし)
  • トランスポート: kernel-api-bench は Bun.serve + 同 process からの loopback fetch
  • 並行モデル: Promise.all でファンアウト
  • 参考マシン: Linux x86_64、Bun process 1
  • 計測日: 2026-04-30

raw データは scripts/load-test/load-test-results.jsonscripts/load-test/kernel-api-bench-results.json に出力されます。再実行で値は微変動します。

ターゲット値

指標ターゲット備考
resolveDeployment p50 (in-process)< 50 ms単一 deployment、N=10
applyDeployment p50 (in-process)< 200 mssynthetic implementation binding
HTTP API スループット (plan type Run create)> 500 req/secloopback / single isolate
Cloudflare Workers CPU 時間 / resolve (100 planned service)< 30,000 msWorkers Free / Paid 上限 (CPU time)
HTTP エラー率 (実環境、k6)< 1 %k6 threshold
HTTP p95 latency (実環境、k6)< 500 msk6 threshold

計測結果 (in-process)

1. concurrent-deploys-test (resolveDeployment / applyDeployment)

Promise.all で N 並行リクエストを発行し、各操作の latency と全体スループットを集計します。

TierOpp50 (ms)p95 (ms)p99 (ms)Mean (ms)Max (ms)Throughput (ops/sec)
10resolve3.868.8710.314.3110.67934.87
10apply1.651.751.821.671.845,314.74
100resolve15.9230.2532.1815.7732.673,058.01
100apply9.079.089.089.079.0910,963.62
1000resolve102.75212.00222.84105.80226.524,409.50
1000apply92.4792.5292.5392.4592.5310,788.75

判定:

  • p50 resolve (N=10) 3.86 ms (target < 50 ms) —達成
  • p50 apply (N=10) 1.65 ms (target < 200 ms) —達成
  • N=1000 でも resolve p50 < 110 ms に収まる
  • apply は in-process な synthetic adapter のため latency が極めて小さく、Promise.all のファンアウトオーバーヘッドが支配的

2. Cloudflare Workers CPU バジェット (resolveDeployment)

N 個の worker planned service と N 個の adopted gateway/ingress planned service を持つ planned service graph の resolve 時間を計測しています。gateway descriptor intent は gateway の kind-specific spec に含まれます。

planned service 数所要 (ms)Cloudflare Workers 上限 (30,000 ms)
102.91OK (約 0.01 % 消費)
503.02OK (約 0.01 % 消費)
1006.18OK (約 0.02 % 消費)

判定: 100 planned service の source でも Workers CPU time 30 秒制限の 0.02 % 未満 で完了します。Workers 上で resolveDeployment を直接走らせても 実用上の問題はありません。

3. kernel-api-bench (HTTP loopback)

Bun.serve + 同 process からの fetch で計測します。 auth / catalog hash assertion を bypass した kernel-only handler を使用します。

EndpointRequestsConcurrencyp50 (ms)p95 (ms)p99 (ms)Throughput (req/sec)Errors
POST /api/v1/installations/{id}/plan (warmup)100165.6219.5620.211,955.020
POST /api/v1/installations/{id}/plan1,000328.5813.3531.523,346.280
POST /api/v1/runs/{runId}/apply500164.186.416.923,556.350
GET /api/v1/installations/{id}/deployments2,000323.194.586.2710,390.120

判定:

  • deployment plan type Run スループット 3,556 req/sec (target > 500 req/sec) — 達成
  • deployment apply スループット 10,390 req/sec —達成
  • p95 < 50 ms (loopback、auth bypass)
  • エラー 0 件

latency 目安 (推定)

in-process ベースライン + direct Cloudflare adapter のトランスポート オーバーヘッドから推定した、実環境での deploy lifecycle latency 目安です。 これはCloudflare direct profileの参考値であり、Takoform対応hostのlatencyを 代表しません。

ターゲットresolveDeployment p50applyDeployment p50備考
Cloudflare Workers~10-20 ms~2-5 秒[^1]KV / DO 往復 + provider RPC

[^1]: applyDeployment の latency は operator-owned infrastructure lifecycle と runtime-agent handler の時間が支配的で、 kernel オーケストレーションのコスト (in-process baseline) は ~100 ms 以下に収まります。実環境の Cloudflare では Workers のデプロイ / route attach に数秒~数十秒かかります。

in-process ベースラインは kernel オーケストレーションのコストのみ を表します。実環境でのベースラインは operator が k6-load-test.js を staging で再測定し、このドキュメントに追記してください。

スケーリング推奨値

in-process ベースラインと業務想定スループットから導いたスケーリング指針です。

項目推奨値根拠
kernel の同時 resolveDeployment50 / instanceN=100 で resolve p95 30 ms、CPU bound
kernel の同時 applyDeployment20 / instanceprovider RPC 待ちが支配、IO bound
DB コネクションプール (Postgres)20-50 / kernel instanceデプロイあたり 1 トランザクション + outbox dispatch
Outbox dispatch worker4-8 / instance下流の DLQ レプリケーションは IO bound
Provider adapter のリトライ予算3 / opprovider のリトライポリシーと整合

k6 ロードテスト (実環境、operator 用)

takos/scripts/load-test/k6-load-test.js を staging / production-mirror 環境で実行します。

bash
k6 run \
  -e TAKOSUMI_BASE_URL=https://takosumi-staging.example.test \
  -e TAKOSUMI_TOKEN=$TAKOS_TOKEN \
  -e TAKOSUMI_SPACE_ID=space_bench \
  takos/scripts/load-test/k6-load-test.js

ramp プロファイル:

  • 0:00-0:30 → 10 VUs
  • 0:30-1:30 → 25 VUs
  • 1:30-3:00 → 50 VUs
  • 3:00-4:30 → 100 VUs
  • 4:30-5:00 → 0 VUs (ramp-down)

threshold (失敗時 exit code != 0):

  • http_req_duration p95 < 500 ms
  • http_req_failed < 1 %
  • takos_endpoint_errors < 1 %
  • checks > 99 %

トラフィックミックス:

  • 55 % POST /api/v1/installations/{id}/plan
  • 30 % POST /api/v1/installations/{id}/plan → POST /api/v1/runs/{runId}/apply
  • 15 % GET /api/v1/installations/{id}/deployments

サマリは k6-load-test-summary.json に出力されます。

再実行手順

bash
cd takos
bun run load-test                    # in-process 全シナリオ
bun run load-test:concurrent-deploys # 並行 deploy 単体
bun run load-test:kernel-api-bench   # HTTP API 単体

実環境 (k6) は operator が cluster-scoped credentials で実行します。 Takos core repo に値を commit しないでください。

判定サマリ

受け入れ基準結果
resolveDeployment p50 < 50 ms (N=10)OK (3.86 ms)
applyDeployment p50 < 200 ms (N=10)OK (1.65 ms)
HTTP API スループット > 500 req/secOK (3,556 req/sec)
Cloudflare Workers CPU < 30s (100 planned service)OK (6.18 ms)
bun run load-test 完走OK
in-process テスト 2 + k6 スクリプト 1OK
baseline-metrics.md 完成OK

operator 残務: 実環境の Cloudflare で k6 を走らせて p95 / p99 を測定し、 本ドキュメントの「latency 目安」表を実測値で上書きしてください。