922a57fe34
Self-hosted 開源:WASM 零件 + recipe + cypher-executor,跑在你自己的 Cloudflare。 此為重建的乾淨歷史起點(移除曾誤 commit 的 GCP SA 金鑰,舊歷史保留在 richblack/arcrun 與本地 backup 分支)。含: - acr init --self-hosted installer(建 KV/R2 + codeload 拉預編譯 wasm + wrangler deploy + seed recipe) - recipe push 把關(資料外流提醒 + 打通檢查) - 19 個正當零件預編譯 wasm(claude_api/km_writer/kbdb_upsert_block 排除:違反 DECISIONS §1) - CLI / cypher-executor / registry / 完整 SDD Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
39 lines
1.6 KiB
Markdown
39 lines
1.6 KiB
Markdown
# parallel-fanout
|
||
|
||
## 解決什麼問題
|
||
同一份輸入要做多種處理(摘要 / 翻譯 / 分類 / 等)。
|
||
不想等順序執行(總時長 = 全部加總)→ 並行(總時長 = 最慢一個)。
|
||
|
||
## 怎麼觸發
|
||
```bash
|
||
curl -X POST https://cypher.arcrun.dev/webhooks/named/parallel_fanout/trigger \
|
||
-H "X-Arcrun-API-Key: ak_xxx" \
|
||
-d '{"api_key":"ak_xxx","text":"...","target_lang":"en"}'
|
||
```
|
||
|
||
## 預期行為
|
||
- 3 個子 workflow 同時啟動,各自獨立執行
|
||
- 主 workflow 返回所有子 workflow 都 trigger 成功的時間(毫秒級)
|
||
- 子 workflow 完成的結果**不會回到** parent —— 各自寫各自的 KBDB / 通知
|
||
|
||
## 改成你自己的
|
||
- 增 / 減 dispatch 節點數
|
||
- workflow_name 換你的真實處理 workflow
|
||
- 若需要等子 workflow 都完成 → 子 workflow 寫完成標記到 KBDB,parent 後續 cron 撿
|
||
|
||
## 變體:等所有子 workflow 完成
|
||
arcrun 預設 trigger_workflow 是 fire-and-await(paused 也算 success)。
|
||
若要嚴格「等到完成」,要:
|
||
1. 子 workflow 末步寫 `done:{request_id}` block 到 KBDB
|
||
2. parent 加 polling 節點 + wait 重試
|
||
(M2 之後會出 wait_for_workflows 內建零件)
|
||
|
||
## 為什麼這 pattern 重要
|
||
- arcrun 是 multi-tenant / multi-tier 平台。Fan-out 讓你能 build「主 controller + N 個 worker」架構
|
||
- 比 promise.all 更穩:每個子 workflow 獨立 paused/resume,互不污染狀態
|
||
|
||
## 學到什麼
|
||
- **Fan-out**:一個節點多條 ON_SUCCESS 邊出去,並行執行
|
||
- `trigger_workflow` 是內建 orchestration 零件(cypher-executor in-process call,繞 CF self-fetch)
|
||
- input 變數在 fan-out 時複製給每條分支(不互相影響)
|