當你已經把 Mac mini M4 當作可調度節點,並為 CI 與 Agent 混池寫好並發切片與公平性矩陣,下一類故障往往來自「組織政治」:A 項目「現在就要這臺機」,B 項目作業已在跑,值周同學被要求「把優先級頂一下」。若沒有明文規則,每一次升級都會變成對人不對事的扯皮。本文給出 2026 年可落地的第二層治理:把單機上的重作業能力拆成可籤約的預約槽,定義何時允許搶佔,並用冷靜期防止高優先級流量反覆殺死隊列造成震蕩。文內含兩張決策表、八步 rollout 清單,以及與容量借調、隊列 SLO、可調度節點文檔的顯式銜接。
公平性與切片基線見上文連結;臨時把容量劃給自動化見 容量借調;排隊深度與擴縮見 隊列等待 SLO。若你用標籤區分自動化主機,請與 可調度 Mac 節點 中的 CMDB 欄位保持一致。加機參考 定價與區域,連接與權限見 幫助文檔。
預約 vs 彈性溢出:先把詞定義清楚
預約(reservation)是一份合同:團隊 X 在本地工作日 09:00–21:00 內,對標籤 mac-ci-heavy 上最多 R 個並發重作業享有優先權,與樓裡是否還有其他人無關。彈性溢出指其餘一切:有空位就跑、沒空位就讓路的作業,適用於實驗分支與低嚴重度流水線。若編排器無法同時表達兩種語義,你會在 Slack 裡無限次手寫「臨時規則」。預約應少而精、帶時間邊界、綁定成本中心;彈性應是默認路徑。
在 Apple Silicon 上,「空位」不僅是 CPU。兩個重疊的 xcodebuild 常把常駐內存推到 28~36 GB 區間,第三個任務即便 CPU 錶盤好看也可能 OOM 或極端 swap。預約數量必須與你在公平性矩陣裡用過的工作負載類別對齊——重編譯、多模擬器 UI、僅 lint——而不是每團隊一個全局數字。否則會出現「籤了三個槽」但每個槽其實是整套 UI 套件、本應只佔一個槽的合同欺詐(無意或有意)。
搶佔策略矩陣(何時允許殺作業或重新入隊)
| 進入作業 | 受害者負載 | 是否搶佔 |
|---|---|---|
| Sev-1 發布熱修(有事故單) | 彈性 lint / 文檔構建 | 可——受害者帶原因碼重新入隊 |
| Sev-1 發布熱修 | 另一團隊在合約窗口內的預約重槽 | 否——用空閒主機或書面高管例外並留審計痕跡 |
| 無事故 ID 的「老闆急」 | 任意 | 否——按彈性處理;擴容而非搶佔 |
| 夜間定時浸泡 | 交互式研發 CI | 否——改浸泡起鐘點或專用浸泡標籤 |
核心不變量:搶佔是治理動作,不是誰都能擰的調度旋鈕。每次合法搶佔應產出:事故或變更單號、受害者作業 ID、授權工程師。審計時若一分鐘內拿不出這三樣,說明政策寫在 PPT 裡而非系統裡。多數團隊發現:除書面高管例外外禁止搶佔預約持有者,比調任何超時更能減少周末電話。與「口頭 P0」文化對抗時,把本表列印在值班手冊封面比開十次架構會有效。
冷靜期與防震蕩參數
| 事件 | 建議冷靜期 | 原因 |
|---|---|---|
| 作業被搶佔(重入隊) | 同一項目 15~30 分鐘內不得再次發起搶佔 | 避免兩個「急單」打桌球 |
| 預約窗口開始 | 開頭 5 分鐘寬限——禁止新搶佔 | 讓在跑彈性作業體面收尾 |
| 主機維護歸來 | 10 分鐘僅允許彈性輕作業 | 避免冷緩存瞬間被重編譯打滿 |
指標掛鈎:每周統計搶佔次數並與 p95 牆鍾回歸做關聯。若搶佔上升而 SLO 未改善,屬于震蕩——應加機或縮短預約窗口,而不是再加殺戮。
八步落地清單
- 盤點標籤:確保
mac-ci-*與 Agent 標籤不會誤命中同一預約規則。 - Git 編碼預約:YAML 寫明負責人、時間窗、每類負載的 R。
- 編排器鉤子:實現不可從倉庫文件覆蓋的「預約令牌」或隊列優先級。
- 搶佔 API:單一內部端點或 slash 命令,強制記錄工單 + 受害者 + 操作者。
- 冷靜期狀態:在隊列元數據或 Redis 記錄每項目上次搶佔時間並設 TTL。
- 看板:一塊展示「預約槽佔用/應得」,一塊展示「每日搶佔次數」。
- 演練:用模擬 Sev-1 與彈性受害者彩排,驗證審計日誌欄位齊全。
- 季度評審:連續八周利用率低於 40% 的預約應 sunset——閒置 entitlement 腐蝕信任。
與並發切片、磁碟治理如何咬合
預約解決誰有權佔位,並發切片解決單機安全並發。若合同給團隊兩個預約重槽,但每機切片只允許一個不觸發 swap 的重編譯,合同即虛假。發布預約數字前,用公平性矩陣與 磁碟與產物保留策略 回放一遍——搶佔風暴常與 DerivedData 風暴同現,被殺作業往往在磁碟留下半成品。
若同池還跑 OpenClaw 等自動化,要麼為 Agent 單獨設 R_agent 預約類,要麼在營業時段禁止搶佔 Agent 機。把「CI 搶佔」與「網關重啟窗口」混為一談,會得到最難查的 flaky:預發全綠、生產偶發因為那裡沒人搶佔。
財務分攤:不要幻想表
預約是內部 chargeback 的自然輸入:每預約槽·小時可從 Mac 攤銷、電力與機櫃成本計價;彈性用量可用低價或打包進平臺工程。常見錯誤是財務在未經 SRE 背書的情況下「拍腦袋定槽數」——當預約總和超過物理安全並發時,要麼項目為空氣付費,要麼 SRE 為告警付費。建議每月發布一頁紙:「每臺 M4 安全重槽上限」對照「各團隊籤約預約之和」。
常見反模式
無限優先級檔(P0~P9)卻無搶佔規則——人人標 P0;搶佔不通知受害者——研發花半天查「假 flaky」;月更團隊卻持永久預約——容量囤積;冷靜期為 0——兩位總監交替頂掉對方流水線。糾正這些更多靠把上表寫進與 Runner 鏡像同一倉庫,而不是再買監控 SKU。
在財季鎖預算前需要額外專用機驗證預約數學,可用帶 SSH/VNC 的短期 Mac mini M4 按真實標籤重放生產拓撲,用真構建證明安全 R,而非用 PPT 證明。NodeMac 在香港、日本、韓國、新加坡與美國提供節點,按需付費降低試錯成本,與「凍結共享構建機做實驗」相比更省協作摩擦。