Nomad だけでは足りない詰まりどころ
共有ボリュームへの二重書き込みは成果物を壊し、跨区では同期順序が逆転すると欠損ツリーが広がります。ビルドロックと rsync 成果物マトリクス稿 で役割分担しましょう。
- 配置ドリフト: メタ無しでは重いバッチが偶然ライトノードに乗り、IO が凸凹になる。
- 二重ライター: promote を複数ジョブが同時に掴むと rsync 先が壊れる。
- ディスク崖: 1TB でも DerivedData+シミュレータで黄信号が早い。2TB でも再現する。
意思決定マトリクス:Nomad 役割 × ストレージ
| トポロジ | Nomad 側の狙い | ストレージ/同期 |
|---|---|---|
| 単一ゴールデン+扇展開ワーカー | promote は count = 1 か専用キューで単一ライター化。他は batch。 |
ゴールデン確定後に rsync 読み取り同期。帯域はプロファイル化。 |
| リージョンごとゴールデン | メタ region_lane で constraint。親和で「重いコンパイル層」に寄せる。 |
合流検証と時計同期が増える。DNS/レジストリは スプリット DNS 稿 を参照。 |
| 全ノードローカルビルド | spread で均等化。成果物はオブジェクトストア経由か昇格のみ集約。 |
ディスク水位が早めに黄信号。早期に 2TB ラインを検討。 |
実運用では「コンパイルは並列、昇格と rsync の書き込みは単一路」が最もトラブルが少ないです。
実行可能な job 制約の考え方(HCL は文章レベル)
クライアントに meta(例:ci_tier・artifact_lane・disk_class)を付け、ジョブ側は constraint で重い batch を特定 Mac mini M4 に固定、affinity で 1tb 系を優先する等の軟着陸、spread で node.datacenter 分散、が定石です。昇格系は priority を上げ restart を慎重に。対話入口は Mosh と SSH の協働稿 と分担します。
ビルドロック:スケジューラと OS を二段にする
スケジューラに加え、共有ツリーは flock で短い昇格区間だけ排他します。バッチはローカル WORK_DIR、promote だけがロック後に rsync。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; }
exec/raw_exec タスクから呼び出す想定。終了コード 17 は競合としてメトリクス化します。
1TB / 2TB の拡張水位(意思決定表)
| 使用率帯 | 1TB ラインの行動 | 2TB ラインの行動 |
|---|---|---|
| 〜70% | DerivedData/古いシミュレータをルーチン削除。Nomad のログもローテ。 | 同左。2TB は猶予が増えるが放置しない。 |
| 70〜80%(黄) | 増設またはアーカイブ退避をスプリント内に計画。新規「全ノードフルビルド」を抑える。 | 黄信号は遅れて現れる。バーストジョブの同時数を下げる。 |
| 80〜90% | 実行枠を絞り、rsync 扇展開の帯域も縮小。空きが戻るまで promote 以外を止める判断も。 | 2TB でもシミュレータ多版が残ると再び詰まる。メタ disk_class と連動してスケジューリングを減らす。 |
| 90% 超(赤) | APFS スナップショットや隠れ領域を踏む前にハードストップ。クラスタ追加・ディスク段階アップを最優先。水位は「拡張」のトリガーであり、監視ダッシュボードに固定表示がよいです。 | |
調達と段階は 料金・プラン比較(ログイン不要) で固められます。
rsync 成果物同期との合流ポイント
スケジュールは Nomad、ゴールデン後の伝播は rsync プロファイルに寄せると帯域と再開性が読みやすいです。単一路がチェックサム等のゲートファイルを書き、扇展開は存在確認後に pull。periodic と評価周期はオフセット。詳細は rsync 稿 と Runbook を共有してください。
FAQ:Nomad × Mac 並列の勘所
constraint と affinity の使い分け: 必須条件は constraint、コスト最適化や軟着陸は affinity。
flock が飽和: ロック範囲が広すぎ。promote タスクを短くし、コンパイルはロック外へ。
2TB にしても黄信号: シミュレータとキャッシュ政策がボトルネック。メタで「重いノード」と「軽いノード」を分離。
同型 Mac mini M4 で Nomad+rsync を安定運用
ログイン不要でプラン確認から申し込みへ。Nomad 用の同型ノードとディスク段階を揃え、水位が黄信号になる前に拡張しましょう。