# 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 時複製給每條分支(不互相影響)