觀點 · 資訊分享

Google Cloud 便宜主機被收回前,現在可以多給 2 分鐘:Spot VM 支援 120 秒預告

Google Cloud 讓 Spot VM 在建立時可以設定 120 秒的「收回預告」,在被搶占前多出最多 120 秒處理收尾。預設仍是 0 秒,要靠關機腳本在最多 30 秒的關機期間內處理。

發布
2026-09-30
篇幅
約 4 分鐘 · 1,627 字
結構
7 節 + 4 題常見問題
標籤
#Google Cloud#Compute Engine#Spot VM#成本優化
Google Cloud 便宜主機被收回前,現在可以多給 2 分鐘:Spot VM 支援 120 秒預告

一句話看懂:Google Cloud 的便宜主機 Spot VM 被收回前,現在可以設定先給 120 秒預告,讓程式有時間存檔、交接工作。

Spot VM 支援 120 秒搶占預告資訊圖卡:被收回前先收到通知,有最多 120 秒存檔、交接工作

先用白話講:Spot VM 是什麼?

想像共享辦公室的「臨時座位」:平常空著的位子便宜出租,但只要正式會員要用,你就得馬上讓座。

Spot VM 就是雲端上的臨時座位。Google Cloud 把閒置的運算資源便宜出租,官方文件寫價格最多可以比一般價格低 91%。代價是 Google 需要這些資源時,可以隨時把機器收回,這叫搶占(Preemption)。

問題在於收回得很突然。以前預設沒有預告時間,只能靠「關機腳本」在最多 30 秒的關機期間內趕快收尾,資料多一點就來不及。

發生什麼事

Google Cloud 在 9 月 30 日的 Compute Engine 更新紀錄中宣布:建立 Spot VM 時,可以設定 120 秒的搶占預告,這項功能已是正式版(GA)。官方的說法是,這讓 Spot VM 上的工作負載最多多出 120 秒來處理搶占。

兩種模式差在哪

比較 預設(0 秒) 設定 120 秒
誰負責收尾 關機腳本 工作負載自己
關機腳本 必須 選用
可用時間 關機期間最多 30 秒 預告最多 120 秒,之後才進入關機

搶占發生時,Compute Engine 會把 VM 的 metadata 中 preempted 值設為 TRUE。設定 120 秒時,程式要自己監看這個值,收到訊號後開始存檔、回報進度、把工作交給其他機器。

給開發者的技術細節

用 gcloud 建立時加上 --preemption-notice-duration:

gcloud compute instances create my-spot-vm \
  --zone=asia-east1-b \
  --provisioning-model=SPOT \
  --preemption-notice-duration=120s
  • gcloud 的值只能是 120s 或 0s(預設)
  • 用 API 時,在 scheduling 裡帶 preemptionNoticeDuration 欄位
  • 主控台在選擇 Spot 後的「VM provisioning model advanced settings」裡設定
  • 官方提醒:要把既有 Spot 工作改用這個模式,記得處理好程式內的搶占邏輯,並實際測試一次
  • 其他限制不變:Spot VM 不能即時遷移、主機事件後不會自動重啟,也不在 Compute Engine SLA 範圍內

上面的指令依官方範例改寫,區域與名稱請換成自己的。

我的看法

Spot VM 很適合跑「被打斷也沒關係、重跑一次就好」的工作,例如影片轉檔、批次產報表、AI 模型的離線處理。省下來的錢很可觀,但很多團隊卡在「被收回時來不及存檔」,最後乾脆不用。

多了 120 秒,大部分的工作都夠存一次進度。我會建議:程式每處理完一小段就存一次進度,再配合這 120 秒做最後收尾,這樣就算被收回,損失也只有一小段。但要記得,Spot 本質上就是不保證的資源,正式對外服務的網站還是別放在上面。

名詞小辭典

  • Spot VM:用閒置資源出租的便宜虛擬機,可能隨時被收回。
  • 搶占(Preemption):雲端廠商因為資源需求,把 Spot VM 收回停止。
  • Metadata(中繼資料):VM 可以查詢的一組設定與狀態資訊,搶占訊號也放在這裡。
  • 關機腳本(Shutdown script):VM 關機時自動執行的程式,常用來收尾。

資料來源

常見問題

Spot VM 是什麼?
Google Cloud 用閒置資源出租的便宜虛擬機,價格最多可比一般價格低 91%,代價是 Google 需要資源時可以隨時收回(搶占)。
要怎麼開 120 秒預告?
在建立 Spot VM 時設定。gcloud 使用 --preemption-notice-duration=120s,API 則是在 scheduling 裡帶 preemptionNoticeDuration,主控台在 Spot 的進階設定裡也有選項。
已經在跑的 Spot 工作要直接改嗎?
官方建議要搬遷既有工作時,先確認程式會自己處理搶占,並實際測試一次被收回的流程,因為 120 秒模式下是由工作負載本身處理,不是靠關機腳本。
設 120 秒會比較貴嗎?
官方文件沒有提到預告時間會影響價格。
LINE