Skip to content

Commit 4527711

Browse files
committed
docs: update API and benchmark operation guides
1 parent 71ab13a commit 4527711

4 files changed

Lines changed: 124 additions & 1 deletion

File tree

README.md

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,36 @@
1111
- `GET /health`
1212
- `POST /api/v1/publish?room=<room>&sender=<sender>&topic=notify&id=<id>&sig=<sig?>`
1313
- `GET /api/v1/poll?room=<room>&after=<cursor>&limit=<n>`
14+
- `POST /api/v1/review?room=<room>&sender=<sender>&pr_id=<id>&verdict=approve|deny`
15+
- `GET /api/v1/review?room=<room>&pr_id=<id>`
1416
- `GET /api/v1/inbox/pending?room=<room>&consumer=<consumer>&limit=<n>`
1517
- `POST /api/v1/inbox/ack?room=<room>&consumer=<consumer>`
1618
- `GET /ws?room=<room>`
1719
- `GET /api/v1/key/info?sender=<sender>`
1820
- `POST /api/v1/key/rotate`
21+
- `POST /api/v1/key/verify-github`
22+
23+
### Cache Exchange / Issue Cache
24+
25+
- `GET /api/v1/cache/exchange/discovery`
26+
- `GET /api/v1/cache/exchange/pull?after=<cursor>&limit=<n>&peer=<node_id>&room=<room?>`
27+
- `POST /api/v1/cache/exchange/push`
28+
- `GET /api/v1/cache/issues/pull?room=<room>&after=<cursor>&limit=<n>`
29+
- `GET /api/v1/cache/issues/sync?room=<room>&after=<cursor>&limit=<n>`
30+
31+
### Trigger / Callback / GitHub Webhook
32+
33+
- `POST /api/v1/trigger/callback`
34+
- `GET /api/v1/trigger/results?room=<room>&after=<cursor>&limit=<n>`
35+
- `POST /api/v1/github/webhook`
36+
- `GET /api/v1/github/webhook/dlq?after=<cursor>&limit=<n>`
37+
- `POST /api/v1/github/webhook/dlq/retry?delivery_id=<id>`
38+
39+
### Admin APIs (auth required)
40+
41+
- `POST /api/v1/admin/github/repos/register`
42+
- `POST /api/v1/admin/github/repos/<id>/push`
43+
- `POST /api/v1/admin/github/repos/<id>/actions/dispatch`
1944

2045
### Git Serve Session (relay-proxied clone)
2146

@@ -47,6 +72,19 @@ Clone side → (response resolved)
4772
- room validation: `[A-Za-z0-9][A-Za-z0-9._-]{0,63}`
4873
- dedupe: room 内の同一 `id``accepted=false`
4974

75+
## Observability
76+
77+
構造化ログ(JSON line)を標準出力へ出します。
78+
79+
- `relay_event`: incoming ref / issue sync / cache replication などのイベントログ
80+
- `relay_audit`: API の監査ログ
81+
- `relay_metric`: メトリクスログ
82+
83+
代表的なメトリクス:
84+
85+
- `relay.request.success_rate`: 操作単位の成功率・平均レイテンシ・再試行回数
86+
- `relay.cache.persist.retry`: cache 永続化の再試行回数
87+
5088
## Auth
5189

5290
`BIT_RELAY_AUTH_TOKEN` を設定すると `/api/v1/*``/ws` で Bearer 認証を要求します。
@@ -134,6 +172,22 @@ optional env:
134172
- `RELAY_MAX_CLOCK_SKEW_SEC` (default: `300`)
135173
- `RELAY_NONCE_TTL_SEC` (default: `600`)
136174
- `RELAY_MAX_NONCES_PER_SENDER` (default: `2048`)
175+
- `RELAY_NODE_ID` (cache exchange ノード ID)
176+
- `RELAY_PEERS` (CSV: peer relay URLs)
177+
- `RELAY_PEERS_JSON` (JSON: peer relay URLs, `RELAY_PEERS` より優先)
178+
- `RELAY_PEER_AUTH_TOKEN` (peer pull 時の Bearer token)
179+
- `RELAY_PEER_SYNC_INTERVAL_SEC` (default: `30`)
180+
- `RELAY_CACHE_PROVIDER` (`memory` or `r2`, default: `memory`)
181+
- `RELAY_CACHE_TTL_SEC` (default: `86400`)
182+
- `RELAY_CACHE_MAX_BYTES` (任意、上限 bytes)
183+
- `RELAY_CACHE_R2_BUCKET` (R2 利用時)
184+
- `RELAY_CACHE_R2_PREFIX` (default: `relay-cache/`)
185+
- `RELAY_GITHUB_WEBHOOK_SECRET`
186+
- `RELAY_TRIGGER_WEBHOOK_URL`
187+
- `RELAY_TRIGGER_WEBHOOK_TOKEN`
188+
- `RELAY_TRIGGER_EVENT_TYPE` (default: `relay.incoming_ref`)
189+
- `RELAY_TRIGGER_REF_PREFIXES` (CSV, default: `refs/relay/incoming/`)
190+
- `RELAY_CONFIG_JSON` (JSON override)
137191

138192
互換モード(従来の unsigned publish 許可):
139193

@@ -242,3 +296,14 @@ just test-serve https://myapp.exe.dev
242296
```bash
243297
just test
244298
```
299+
300+
## Benchmark
301+
302+
```bash
303+
# 全シナリオ
304+
just bench https://bit-relay.mizchi.workers.dev
305+
306+
# 新規: multi-relay + cache hit/miss + issue sync
307+
RELAY_URLS=https://relay-a.example,https://relay-b.example \
308+
just bench-scenario multi-relay-cache-issue-sync https://relay-a.example
309+
```

TODO.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -209,7 +209,7 @@
209209
- [x] `just test` に新規テストを統合(失敗時に原因が追える粒度)
210210
- [x] 負荷計測シナリオを追加(multi-relay + cache hit/miss + issue sync)
211211
- [x] 監査ログとメトリクス(成功率、レイテンシ、再試行回数)を追加
212-
- [ ] ドキュメント更新(`README.md`, `docs/usage-guide-ja.md`, `docs/scaling.md`
212+
- [x] ドキュメント更新(`README.md`, `docs/usage-guide-ja.md`, `docs/scaling.md`
213213

214214
## 未確定事項(実装前に決める)
215215

docs/scaling.md

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
bit-relay (Cloudflare Workers + Durable Objects) のスケーリング特性を k6
44
ベンチマークで計測した結果をまとめる。
55

6+
2026-02-24 に、multi-relay + issue cache sync のベンチシナリオを追加した。
7+
68
## 計測環境
79

810
- ターゲット: `bit-relay.mizchi.workers.dev` (Cloudflare Workers)
@@ -70,6 +72,25 @@ MAX_WS_SESSIONS=100 の制約内。100 同時接続で全く問題なし。
7072

7173
register は新規 DO 生成を伴うため ~400-600ms。セッション確立の 1 回コスト。
7274

75+
### Multi-relay + Cache Hit/Miss + Issue Sync(新規シナリオ)
76+
77+
`bench/scenarios/multi-relay-cache-issue-sync.js` を追加。
78+
79+
- relay A で issue 作成/更新を publish
80+
- relay A -> B へ `cache/exchange` pull/push
81+
- relay B で `cache/issues/pull` の miss/hit と `cache/issues/sync` を計測
82+
83+
計測メトリクス:
84+
85+
- `mr_issue_publish_latency`
86+
- `mr_exchange_pull_latency`
87+
- `mr_exchange_push_latency`
88+
- `mr_cache_issue_pull_miss_latency`
89+
- `mr_cache_issue_pull_hit_latency`
90+
- `mr_issue_sync_latency`
91+
- `mr_cache_hit_count`
92+
- `mr_cache_miss_count`
93+
7394
## スケーリング特性
7495

7596
### ボトルネックにならなかったもの
@@ -113,6 +134,10 @@ just bench-scenario health https://bit-relay.mizchi.workers.dev
113134
just bench-scenario publish-poll https://bit-relay.mizchi.workers.dev
114135
just bench-scenario publish-contention https://bit-relay.mizchi.workers.dev
115136

137+
# 新規: 複数 relay 前提シナリオ
138+
RELAY_URLS=https://relay-a.example,https://relay-b.example \
139+
just bench-scenario multi-relay-cache-issue-sync https://relay-a.example
140+
116141
# JSON 出力
117142
just bench-json https://bit-relay.mizchi.workers.dev
118143
```

docs/usage-guide-ja.md

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -202,6 +202,39 @@ bit relay sync push relay+https://bit-relay.mizchi.workers.dev
202202
| `relay+http://host` | relay API を直接使用(非 TLS、ローカル開発用) |
203203
| `https://host/repo.git` | smart-http を試行、404 時に relay fallback |
204204

205+
## 運用者向け API(キャッシュ/同期)
206+
207+
relay 運用者向けに、issue キャッシュと relay 間交換の確認 API を用意している。
208+
209+
### issue キャッシュを直接確認する
210+
211+
```bash
212+
# issue イベントをカーソルで取得
213+
curl "http://127.0.0.1:8788/api/v1/cache/issues/pull?room=main&after=0&limit=20"
214+
215+
# issue snapshot + incremental event を取得
216+
curl "http://127.0.0.1:8788/api/v1/cache/issues/sync?room=main&after=0&limit=20"
217+
```
218+
219+
### relay 間 cache exchange を手動確認する
220+
221+
```bash
222+
# A から pull して
223+
curl "http://relay-a.local/api/v1/cache/exchange/pull?after=0&limit=50&peer=relay-b" > /tmp/exchange.json
224+
225+
# B に push
226+
curl -X POST "http://relay-b.local/api/v1/cache/exchange/push" \
227+
-H "content-type: application/json" \
228+
--data @/tmp/exchange.json
229+
```
230+
231+
### 負荷試験(multi-relay + cache hit/miss + issue sync)
232+
233+
```bash
234+
RELAY_URLS=http://127.0.0.1:8788,http://127.0.0.1:8789 \
235+
just bench-scenario multi-relay-cache-issue-sync http://127.0.0.1:8788
236+
```
237+
205238
## フルワークフロー: Alice と Bob
206239

207240
### Alice(ホスト側)

0 commit comments

Comments
 (0)