2026年租用 Mac Mini 七乘二十四決策矩陣
Celery worker 長跑 vs cron 扇出(併發、ACK、退避與磁碟水位閾值清單)
2026年4月14日
RunMini 技術團隊
閱讀時間:約 8 分鐘
在租用 Mac Mini上跑七乘二十四 Python 批次,常要在Celery 常駐 worker與cron/launchd 扇出之間取捨,並避免餓死 APFS 或訊息代理(broker)。本文提供對照矩陣、可執行閾值表、磁碟清單與FAQ。延伸:排程與佇列矩陣、cron 看門狗、磁碟水位 FAQ;公開結帳請至免登入購買頁。
痛點:單台託管機上的預設值為何搖晃
- prefetch 頭阻塞:過高的預取會把多條長任務釘在同一子行程,拖垮整窗吞吐。
- cron 重疊:扇出未加檔案鎖(如
flock)時,會對同一 APFS 卷重複寫入或重算。 - 早確認風險:非冪等副作用搭配早確認,重開機後難以察覺「做一半已 ACK」的資料裂縫。
佇列與後端 URL 範例表(請替換密鑰與主機)
CELERY_BROKER_URL 與 CELERY_RESULT_BACKEND 應分離邏輯庫:Redis 用不同 DB index;RabbitMQ 用獨立 vhost;機密放環境變數或祕鑰管理,勿進版控。
| 場景 | CELERY_BROKER_URL 範例 | RESULT_BACKEND/備註 |
|---|---|---|
| 本機 Redis | redis://127.0.0.1:6379/0 | redis://127.0.0.1:6379/1(勿與 broker 同 DB) |
| TLS 遠端 | rediss://:密碼@主機:6380/0 | 廣域網建議 TLS;輪替憑證與密碼時一併更新 worker plist。 |
| RabbitMQ | amqp://帳號:密碼@127.0.0.1:5672/租戶_vhost | vhost 隔離租戶;可另設 rpc:// 或 Redis 作 result。 |
可執行閾值表(Celery 5 × Redis/AMQP 起點)
請在將 concurrency 對齊實際 Apple 矽實體核心後再微調;GPU 或 ffmpeg 併發請下修並拉長可見度。
| 設定項 | 建議起點 | ACK/安全備註 | Mini 註記 |
|---|---|---|---|
broker_transport_options(可見度等) | 可見度/權杖約為 p99 任務耗時的 3~6 倍 | 過短會重送;過長卡住毒訊息救援 | 長影片轉檔取上帶 |
worker_prefetch_multiplier | CPU 重:1;極小 I/O:2~4 | 升 prefetch 須晚確認+冪等寫入 | 避免單碟氣泡 |
task_acks_late、task_reject_on_worker_lost | 可重試任務開啟晚確認 | 副作用用租約/去重鍵護欄 | 搭配子行程回收 |
worker_max_tasks_per_child | 200~2000;原生庫外洩則更低 | 冷啟成本換穩定 RSS | 離峰回收較佳 |
worker_max_memory_per_child | worker RAM 預算的約 60~70%(KB) | 避免交換抖動 | 本機 broker 須保留記憶體 |
task_soft_time_limit/task_time_limit | 軟限近 SLA 的 90%;硬限再加 30~60 秒 | 重試須在可見度到期前完成 | 防 GPU worker 假死 |
| 重試退避 | 底數 2~5 秒;上限約 120 秒;抖動 20% | 超過 5 次仍失敗應人工介入 | 對齊夜窗見排程專文 |
ACK、併發與退避
CPU 型請將 concurrency 對齊實體核心;I/O 池在剖析後再加。為毒訊息設每佇列重試上限,避免租用主機徹夜空轉。連續兩次輪詢若佇列深度高於穩態的約十倍,應分頁告警並檢視下游或磁碟。
- 多租戶在小台 Mini 上請分 shard 佇列,避免單一租戶塞滿預取窗。
- broker 斷線時對重連退避設下限,勿在夜間打成 tight loop。
- 與 排程矩陣對齊靜默窗,降低與快照或備份撞車。
磁碟與 inode 水位清單
暫存、result backend、日誌與本機 Redis AOF/Rabbit 資料目錄常共用 APFS;請同步監看剩餘比例與inode。細節可併讀磁碟水位 FAQ。
- 黃線:剩餘空間約 20% 以下縮批次、降入列;紅線:約 10% 或快照已失敗時暫停入列。
- 本機 Redis AOF 或 Rabbit 資料旁預留約 2 GiB 緩衝。
- 單一日誌卷單檔上限約 200 MiB 輪替;產物目錄 inode 使用率逾 80% 告警。
worker 對照 cron 扇出決策矩陣
以任務長度與是否允許重疊為軸,在單台 Apple 矽租用機上收斂架構。
| 輪廓 | Celery 常駐 worker | cron/launchd 扇出 |
|---|---|---|
| 長任務 | prefetch 1、晚確認、軟硬時限 | 需明確檢查點與分段冪等 |
| 極小分片 | 依體型分佇列;慎升 prefetch | launchd 交錯啟動較自然 |
| 禁止重疊 | 單例路由或分散式鎖 | 每分片獨立 plist/檔案鎖 |
落地步驟(穩定七乘二十四佇列)
- 量測 p99;可見度與軟時限預留約 20% 緩衝。
- broker URL 與密鑰不入 git;重建映像時輪替。
- 長作業:晚確認+prefetch 1;每佇列封頂重試。
- 設定 max tasks per child 與記憶體上限;於離峰備份窗回收。
- 告警涵蓋磁碟、inode、
/tmp、result 路徑。 - 每季做一次 worker 中段殺測,驗證安全重送語意。
FAQ
- 長任務應選 worker 還是 cron 扇出?
- 要公平 drain、內建重試與指標時選 worker;極短、不可重疊、要以 plist 隔離爆炸半徑時選 cron 扇出,並參考 cron 看門狗。
- prefetch 一律為 1?
- 長 CPU 任務預設如此;僅在晚確認與冪等寫入成立時,對碎 I/O 酌升。
- 為何要 max tasks per child?
- 子行程長跑會累積外洩與描述元;定期回收勝過依賴每日重開租用機。
可引用閘口
- 多分鐘 CPU 任務:prefetch 1 + 晚確認。
- worker_max_tasks_per_child:200~2000,外洩明顯則下修。
- 磁碟:剩餘約 20% 黃線、約 10% 紅線暫停入列。
總結與下一步
當你需要穩定佇列語意、可預期的 ACK 與足夠磁碟餘裕承載 broker/日誌時,租用 Mac Mini作為七乘二十四 Python worker 主機,比在筆電或共享 CI 上「順便跑」更可控。請開首頁、定價、幫助,並使用公開購買頁免登入下單長跑節點。