在並發切片、混池公平與預約/搶佔/冷靜期之後,下一類痛點往往是標籤混沌:各倉庫隨手寫 macos-12、self-hosted 或 m4,沒有命名空間,編排器無法推理飢餓、繼承與爆炸半徑。本文把獨佔 Mac mini M4 池上的標籤視為治理原語:三層前綴命名空間、從組織到倉庫的顯式優先級繼承、以及老化、公平份額與次級排空隊列等飢餓防護。文內含兩張矩陣、八步落地清單與可供審計的對照表述。
並發與公平見 並發切片與 CI/Agent 公平性;可調度節點見 可調度 Mac 節點;並行分片見 並行構建分片。加機參考 定價與區域,連接見 幫助文檔。
標籤命名空間矩陣(前綴、負責人、生命周期)
| 前綴 | 含義 | 誰可定義 |
|---|---|---|
nm-org/<id>/ |
全池級池型(如重編譯、僅 UI) | 僅平臺 SRE |
nm-team/<slug>/ |
從 org 池切給團隊的容量 | 團隊負責人 + SRE 審批 |
nm-repo/<gh-org>/<name>/ |
倉庫級實驗或發布列車 | 維護者在團隊配額內 |
新工作流應對無前綴 runs-on 做 CI Lint 拒絕。存量倉庫可設六個月寬限期並掛違規看板;期滿後合併默認分支必須遷移。目的不是咬文嚼字,而是讓「誰可以從誰那裡搶容量」能從 Git 歷史回答,而不是翻 Slack。
優先級繼承矩陣(生效優先級順序)
| 來源 | 默認權重 | 覆蓋規則 |
|---|---|---|
| 組織策略 YAML | 基線 P3 | 安全補丁可憑工單升至 P1 |
| 團隊策略 | 繼承組織;最多上調 1 檔 | 非事故工作不得突破組織封頂 |
| 倉庫工作流註解 | 繼承團隊;發布標籤最多再 +1 | 功能分支封頂為團隊基線 |
飢餓觸發器:若某標籤等待 p95 連續 72 小時高於全池中位數 2 倍,而高優流量仍滿足 SLO,則啟用老化:每排隊 30 分鐘虛擬優先級 +1,封頂不超過團隊上限。
除「抬優先級」之外的飢餓防護
- 公平份額令牌桶:每團隊按標籤族每小時補充令牌;可突發,持續超用則自動下調有效優先級。
- 次級排空隊列:長等待作業夜間遷入低噪聲池,避免平均值掩蓋長尾。
- 標籤親和上限:限制單倉庫標籤在
nm-org/*-heavy上同時佔用重槽數量,防止單 monorepo 釘死整片重載切片。
八步落地清單
- 凍結面向 Mac 的新工作流中無前綴標籤(默認分支 CI)。
- 從編排器 API + 近 30 天
runs-on掃描生成清單。 - 將每條標籤映射到命名空間層級;標出兩團隊共用同串的衝突。
- 在單一倉庫發布繼承 YAML;調整優先級封頂須 SRE + 產品安全雙審。
- 在預發以誇張閾值啟用老化,觀察副作用。
- 看板按命名空間展示等待,而非僅全局 p95。
- 演練全組織事故優先級翻轉,確認倉庫無法永久佔 P1。
- 季度審計抽檢 50 條工作流查漂移,違規自動開單。
與預約合同如何咬合
預約解決權利,命名空間解決尋址,優先級解決權利內的排序。只有預約沒有命名空間時,團隊會把「假命名空間」寫進隱秘 Runner 名;只有命名空間沒有飢餓防護時,低優維護倉庫會在產品衝高時數周得不到執行。請把公平性、預約與本標籤指南鏈到同一內部入口,方便新人一次讀完一整套機制。
常見反模式
放任開發者任選 GitHub 託管串;在生產標籤裡用 emoji 或地域暱稱;無繼承封頂只寫 priority: high;因「我們作業快」而禁用老化;因全局儀錶盤好看而砍掉次級隊列。這些都會在併購集成或依賴大升級時把隱形隊列炸成全員 on-call。
在改動生產編排器前,可用短期租用的 Mac mini M4 重放標籤風暴。NodeMac 在香港、日本、韓國、新加坡與美國提供帶 SSH/VNC 的專用 Apple Silicon 節點,便於用抓包軌跡演練策略而不連坐共享池。