什麼是 Hibernation
Laravel Cloud 的 Hibernation(自動休眠) 是舊有機制,在一段時間內若無 HTTP 請求就把環境切換到休眠狀態。 在目前的新 Flex Compute 中,後繼者是更快速的 Scale to Zero。 Legacy Flex 的 Hibernation 可讓休眠期間停止 Compute 計費,但收到 HTTP 請求後通常需要 5〜20 秒才能恢復。新的 Scale to Zero 啟動時間縮短到500ms 內,而且即便在 sleep 中,環境仍會為排程任務或佇列處理自動啟動。Scale to Zero 改變了什麼
新 Flex Compute 的 Scale to Zero 大幅改善了過去 Hibernation 的痛點。過去 Hibernation 在休眠期間會導致排程任務、佇列不運作。Scale to Zero 解決了此問題,特別是佇列若採用 Managed Queues,即使 App cluster 在沈睡也能安全持續。
舊 Hibernation 的啟用步驟
1
開啟 App compute cluster
在環境的基礎架構畫布儀表板中點選 App compute cluster。
2
啟用 Hibernation
將 Hibernation 開關切為 On。
3
儲存並重新部署
點選 Save and Redeploy 以套用變更。
舊 Hibernation 休眠中的限制
Hibernation 啟用且環境處於休眠時,以下功能不會運作。從休眠恢復後這些處理會自動重啟。但在休眠期間「本該執行」的排程 Job 不會補跑。
- 只有 Flex Compute 可以休眠。Pro Compute 無法啟用 Hibernation。
- 休眠是以環境為單位進行。App cluster 休眠時,同環境中的所有 Worker cluster 也會休眠。
不必要喚醒的原因
只要有 HTTP 請求環境就會自動喚醒,但也常因非預期的請求而喚醒。- Bot 與 Crawler — 搜尋引擎或安全掃描等自動爬頁
- Slack 或 Teams 的連結預覽 — 通訊軟體為抓取連結縮圖而存取
- WordPress 掃描 — 尋找 WordPress 環境的自動掃描存取
/wp-admin等 - 尋找
.php檔的攻擊 — 直接鎖定 PHP 檔的自動掃描
*.laravel.cloud 網域會加上 X-Robots-Tag: noindex, nofollow 避免被搜尋引擎索引,但一旦網域被發現就難以避免。自訂網域則不會加上 noindex 標頭。
用 Path Blocking 防止不必要喚醒
Path Blocking 功能可讓對特定副檔名或路徑的請求在休眠期間不處理直接被封鎖,避免 WordPress 掃描或針對 PHP 檔的攻擊觸發喚醒。 預設會封鎖的副檔名與路徑如下。 被封鎖的副檔名:Laravel 的一般路由不會使用附帶
.php 副檔名的請求,因此封鎖這些不會影響應用運作。舊 Hibernation 適合與不適合的用途
適合的用途
- staging、開發環境 — 不需 24 小時運作,可大幅節費
- 個人部落格、作品集 — 流量少的用途
- Demo、測試用 App — 只在需要時喚醒即可
- 低頻率內部工具 — 使用時間有限
不適合的用途
- 使用排程任務的用途 — 休眠中
schedule:run不會執行 - 需要定期佇列 Job 的用途 — 休眠中佇列也停擺
- 無法容忍啟動延遲的正式環境 — 恢復需 5〜20 秒
- 使用 WebSocket 的應用 — 無法維持連線,亦可能造成休眠延遲
在新 Scale to Zero 中此限制已放寬。Scheduled Tasks 在 sleep 中也會自動執行,佇列處理若採用 Managed Queues 亦不受 App cluster 休眠影響。
總結
Hibernation 在 Legacy Flex 中仍可用於節省成本,但目前 Scale to Zero 更為實用。- Legacy Flex 只在運作時計費,逾時後自動休眠。
- 舊 Hibernation 恢復時間為 5〜20 秒。
- 新 Scale to Zero 可在 500ms 內啟動。
- Scale to Zero 中 Scheduled Tasks 與 Managed Queues 於 sleep 期間仍運作。
- Path Blocking 可防止 Bot 導致的不必要喚醒。
- 僅 Flex Compute 支援。
相關頁面
排程
確認 Task Scheduler 的設定與在 Laravel Cloud 的行為。
佇列
確認 Queue Worker 的設定與在 Laravel Cloud 的運作方式。
Laravel Cloud 全貌
一次確認 Managed Queues、Scale to Zero 與新的方案。