身為 Arcrun 使用者,我要工作流裡的「等一下」不吃我的運算額度 #101
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
身為 Arcrun 的使用者,我要工作流裡的「等一下」不吃我的運算額度,我才能放心在流程裡等外部系統跟上。
現在會怎樣
一個只做等待、什麼事都不做的工作流,會把 Worker 的 CPU 燒到上限然後 503。
實測(youlin stage,只有
input >> wait兩個節點):真實災情:
Leo/arcrun-rag#82——出貨管線等 CDN 收斂那一站,duration_ms: 35534後死於Worker exceeded CPU time limit,後面兩站(驗收、發佈紀錄)一步都沒跑。而東西其實早就送到了。
根因:等待發生在 WASM 裡
registry/components/wait/main.go第 2 行的註解自己就寫著:註解說 busy-wait、程式碼用
time.Sleep——但在 WASM 裡兩者是同一件事:那顆零件跑在 Worker 的請求執行緒上,它睡多久,Worker 的 CPU 時間就被記多久。
⇒ 等待時間 1:1 換成 CPU 時間。 零件上限寫死 30 秒,而 Worker 的 CPU 預算也是那個數量級
⇒ 等 20 秒+其他節點就爆。
🔴 所以這不是「那顆零件寫壞了」,是「等待這件事不該發生在 WASM 裡」。
引擎那一側用 JS 等(
await一個 timer)成本接近 0,而且本來就有 async。要達成什麼
等 30 秒跟等 3 秒,對運算額度的成本應該一樣(接近 0)。
怎麼驗才算數
wait的工作流,ms從 3000 到 30000 各跑一次,全部成功,貼執行紀錄紅線
wait節點要照樣能跑(不能要人改定義)相關
Leo/arcrun-rag#82(出貨線的災情現場)|Leo/arcrun-rag#47(被它卡住:出貨完版控裡沒有這一版)