什么是 Hibernation
Laravel Cloud 的 Hibernation(自动休眠) 是一个旧有功能:当一段时间内没有 HTTP 请求时,会将环境切换为休眠状态。 在当前新的 Flex 计算资源中,它已被更快的 Scale to Zero 所取代。 Legacy Flex 的 Hibernation 可以在休眠期间停止计算计费,但从收到 HTTP 请求到唤醒通常需要 5~20 秒。新的 Scale to Zero 把启动时间缩短到了 500ms 以内,并且在休眠期间也会为了定时任务和队列处理自动唤醒环境。Scale to Zero 带来的变化
在新的 Flex 计算资源的 Scale to Zero 下,Hibernation 时代的痛点得到了大幅缓解。| 项目 | 旧 Hibernation | 新的 Scale to Zero |
|---|---|---|
| HTTP 请求的唤醒 | 5~20 秒 | 不到 500ms |
| Scheduled Tasks | 休眠时不运行 | 休眠时也会自动唤醒执行 |
| 队列处理 | 休眠时不运行 | 休眠时也会自动唤醒。推荐配合 Managed Queues |
| 推荐用途 | 旧 Flex 环境的节约运行 | 当前的标准配置 |
以往的 Hibernation 存在休眠中定时任务和队列都无法运行的问题。Scale to Zero 已解决这一问题,尤其是配合 Managed Queues 后,即便 App cluster 处于休眠状态,队列处理也能安全地持续进行。
旧 Hibernation 的启用步骤
旧 Hibernation 休眠中的限制
当 Hibernation 开启且环境处于休眠状态时,以下功能不会运行。| 功能 | 休眠时的行为 |
|---|---|
| HTTP 请求处理 | 停止(唤醒后再处理) |
| Task Scheduler | 不执行 |
| Queue Worker | 不执行 |
| 自定义后台进程 | 不执行 |
从休眠状态唤醒后,这些处理会自动恢复。但是在休眠期间“本应执行”的调度任务不会补跑。
- 仅 Flex 计算资源可以进入休眠。Pro 计算资源无法启用 Hibernation。
- 休眠是按环境发生的。App cluster 一旦休眠,同一环境内所有 Worker cluster 也会一并休眠。
不必要唤醒的诱因
有 HTTP 请求就会自动唤醒环境,但一些非预期的请求也会导致唤醒。- 爬虫 / 机器人 —— 搜索引擎、安全扫描器等会自动爬取页面
- 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 适合与不适合的场景
适合的场景
- 测试 / 开发环境 —— 不需要一直运行,能显著降低成本
- 个人博客 / 作品集 —— 流量本身就不大的用途
- 演示 / 试用应用 —— 只在需要时唤醒即可
- 低频内部工具 —— 使用时段有限
不适合的场景
- 需要定时任务的用途 —— 休眠时不会执行
schedule:run - 需要定期队列作业的用途 —— 休眠时队列也会停止
- 不能容忍启动延迟的生产环境 —— 唤醒需要 5~20 秒
- 使用 WebSocket 的应用 —— 连接无法维持,休眠也可能延迟
在新的 Scale to Zero 中,这个限制被缓解了。Scheduled Tasks 在休眠期间也会自动执行,配合 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 即便在休眠期也可运行。
- 用 Path Blocking 防止机器人引发的不必要唤醒。
- 仅支持 Flex 计算资源。
相关页面
调度
确认 Task Scheduler 的配置以及在 Laravel Cloud 上的行为。
队列
确认 Queue Worker 的配置以及在 Laravel Cloud 上的运行方式。
Laravel Cloud 全貌
一站式了解 Managed Queues、Scale to Zero、新的计费方案。