把 Xcode 或 Flutter 建置切到多台 Mac mini M4 並不難,難的是產物一致、磁碟餘裕、以及跨區延遲預算:這三項若沒有工程化矩陣,CI 只會更快地把團隊帶進排隊地獄。

並聯叢集為何常在沒有護欄時卡死

本文給同時運行 2–8 台專用 Mac 節點的平臺/DevOps 負責人:收斂決策矩陣、rsync 參數表、flock 建置鎖、1TB/2TB 擴容水位、跨區延遲驗收清單,可直接貼進 runbook。若你剛接觸雲端獨占 Mac,可先讀《2026 年自由工作者 Mac mini M4 租用實戰心得》建立成本與工作流觀念;更多主題見技術部落格首頁

  • 產物裂腦:兩個 Job 同時發布同一目錄,出現撕毀的 framework 或寫到一半的符號。
  • 同步風暴:跨區全量複製塞滿上行,互動式開發者的編譯被擠爆。
  • 磁碟斷崖:DerivedData 與封存檔默默灌滿 APFS,遠端快取在編譯中途失敗。

決策矩陣:拓樸與約束

模式 最適場景 風險
單一寫入者+提升(promote) 需要嚴格產物溯源與簽章 bundle。 寫入節點成熱點。
從 golden 節點 rsync 扇出 讀多寫少的工作節點與可增量二進位。 搭配下文頻寬/逾時上限可預測。
物件儲存前置 巨型產物與多雲 egress 合約。 在 macOS 上整合成本較高。

多數團隊會先採 rsync 扇出:語意貼近本機維運習慣,路徑仍是 POSIX,腳本遷移成本低。務必搭配單一提升階段,讓 QA/發布永遠只從「祝福過」的目錄拉取。

參數化 rsync:今天就能跑的範例

為每個區域匯出小型 PROFILE,避免值班時臨時拼旗標。下列範例將 golden 主機上的 BUILD_ROOT 扇出到工作機:含校驗、可續傳、頻寬上限與牆鐘逾時/usr/bin/timeout)。

#!/usr/bin/env bash
set -euo pipefail
PROFILE="${1:-apac}"
case "$PROFILE" in
  apac) BW="60000"; TIMEOUT="25m";;
  amer) BW="45000"; TIMEOUT="35m";;
  *) BW="30000"; TIMEOUT="40m";;
esac
/usr/bin/timeout "$TIMEOUT" rsync -azh --delete-delay --partial \
  --checksum --bwlimit="$BW" --omit-dir-times \
  "$GOLDEN_HOST:$GOLDEN_PATH/" "$LOCAL_ARTIFACT_ROOT/"
旗標/指令 用途 備註
--delete-delay 延後刪除至同步成功結束前再套用。 降低長傳輸期間「半套目錄」暴露時間。
--partial 保留未完成檔以利續傳。 timeout 併用,避免 rsync 掛死佔連線。
--bwlimit 單流 KiB/s 節流。 依方案頻寬與互動式需求調整,避免擠爆同節點其他 Job。
/usr/bin/timeout 牆鐘上限(如 25m、35m)。 結束碼 124 代表逾時,應打點監控/告警。

建置鎖:保護共用產物樹

以互斥 flock 包住「編譯完成後的發布/提升」步驟,確保同一時間只有一個 Job 變更正式產物路徑。鎖檔放在本機快速卷或極小的 NFS metadata 切片;避免在高延遲 SSHFS 上長期持鎖。

LOCK_FILE="/var/tmp/ci-artifact-promote.lock"
flock -n "$LOCK_FILE" bash -c '
  ./scripts/compile.sh
  rsync -az --delete ./out/ "/Volumes/Artifacts/promote/"
' || { echo "lock busy"; exit 17; }

1TB/2TB 擴容水位

70%
啟用 DerivedData 積極清理與日誌輪替。
80%
黃燈:排程封存離線或評估第二層磁碟/升級方案。
90%
紅燈:暫停新的扇出 Job,先釋放空間再恢復。

2TB 方案能容納多組模擬器快取與容器層,但仍需自動化治理;九成使用率視為硬停止線,因 APFS 快照與本機備份片段會吃掉隱形空間。發版週前請先到算力與儲存方案頁比對 tier,避免 IO 飽和時才臨時加購。

跨區延遲驗收清單

  • SSH 控制面:自辦公室 VPN 到各節點類型,往返延遲中位數 < 70 ms。
  • rsync 穩態:每週至少一次帶校驗的 dry-run/實傳成功通過。
  • Git fetch:對支援的最大 mono-repo 切片,clone 或 fetch < 5 分鐘。
  • 互動 VNC:事故時兩人共用節點,影格節奏仍穩定可操。

若人在東南亞、編譯卻在美西,建議在新加坡香港加一層中繼扇出,縮短 rsync 腿長;法遵若堅持美國簽章金鑰,也可把「簽章」與「編譯扇出」拆到不同地理的節點組合。

五步上線檢核(runbook)

  1. 每個地理區選定 golden 節點,文件化 SSH host alias。
  2. 建立帶 timeout、bwlimit 的各 PROFILE rsync 腳本並版本控管。
  3. 僅在「提升/產物輪替」路徑加 flock,編譯階段維持並行。
  4. 磁碟探針在 80% 使用率接通報/值班。
  5. 每次 VPN、ISP 或骨干調整後重跑本節延遲清單。

HTTP 健康檢查同樣需要牆鐘紀律,與 rsync 一致。可執行範例:

curl --max-time 8 --connect-timeout 3 -fsS \
  https://status.example.internal/artifact-ready >/dev/null

FAQ:維運與採購語境

Git 能取代 rsync 嗎? 原始碼仍以 Git 為準;大型二進位、模擬器 runtime、DerivedData 型目錄適合 rsync,以增量 IO 同步而不改寫歷史。

flock 一直失敗怎麼辦? 代表臨界區太大;把鎖縮小到「提升/發布」即可,各分支編譯階段維持並行。

何時需要第二個地理區? 當延遲清單在一個迭代內兩次未過關,應拆分寫入/扇出拓樸,並在每次 VPN/ISP 變更後重跑探針,儀表板數字才可信。

本文為維運指引。 對生產樹執行 rsync 刪除前,務必以 dry-run 日誌驗證;網路指標依 ISP 路徑而異,文中數字為工程目標而非合約 SLA。
並聯 Mac 算力

為叢集補齊同規格 Mac mini M4 節點

以裸機獨占節點做扇出建置,搭配本文 rsync 設定與 flock 護欄,並在磁碟黃燈前完成擴容。立即到購買頁選擇區域與儲存 tier,縮短跨區 rsync 腿長。

租用叢集/並聯節點 比對方案