
近日,DigitalOcean App Platform(应用托管) 上基于请求的自动伸缩功能现已正式推出。你的应用现在可以根据实时的 HTTP 流量信号(每秒请求数和 P95 响应延迟)自动扩缩容,让你的基础设施对实际正在发生的事情做出反应,而不是对几分钟前的事情做出反应。
现已支持共享和专用 CPU 实例
到目前为止,App Platform(应用托管)上的自动伸缩需要专用 CPU 服务器计划。这意味着相当一部分 App Platform 用户(所有运行在共享 CPU 实例上的用户)完全没有自动水平伸缩的途径。
今天,这一切改变了。基于请求的自动伸缩同时适用于共享和专用 CPU 实例。无论你是在共享计划上运行一个早期项目,还是在专用资源上运行一个高吞吐量的生产服务,现在都可以配置自动伸缩来匹配你的流量——无需升级计划。
更快速、更灵敏的伸缩
基于 CPU 的自动伸缩本质上是反应式的。CPU 是一个滞后指标:在伸缩器知道有问题之前,你的容器必须已经明显挣扎,而到那时,你的用户已经在等待了。
基于请求的自动伸缩则依据真正反映用户体验的信号来行动:
- 每实例每秒请求数:每个容器当前正在处理多少请求
- P95 请求延迟:95% 的用户正在经历的响应时间
当流量上升并且任一阈值被超过时,新容器会立即启动。当负载下降并且所有指标都回到目标值以下时,伸缩器会将容器缩减回去。你能更快地获得所需的容量余量,并且只为实际使用量付费。
在专用计划上,你还可以结合使用基于请求和基于 CPU 的指标。当任何配置的阈值被越过时,自动伸缩器都会扩容,只有当所有指标都回到范围内时才会缩容。
设置阈值前,先了解你的基线
配置良好的自动伸缩阈值始于理解你的正常流量模式。App Platform 控制台中的 Insights 标签页 正好能给你这个。

Insights 标签页随时间展示 HTTP 入口请求速率(每秒请求数)和 HTTP 入口请求持续时间 P95(你的 95 分位延迟)。在调整你的自动伸缩规则之前,利用这些信息来了解你的服务在正常负载下的行为。
如何配置基于请求的自动伸缩
使用控制面板
前往云后台的 Apps 页面,选择你的应用,打开 Settings 标签,然后选择你的 web 服务组件。在 Resource Size 部分,点击 Edit。
选择 Shared CPU 或 Dedicated CPU 标签。在 Scaling 下,将 Autoscale 开关打开。设置你的 Minimum Containers 和 Maximum Containers,然后至少配置一条自动伸缩规则:

- 按每秒请求数伸缩:设置每实例目标 RPS
- 按响应时间和速度(P95)伸缩:设置以毫秒为单位的目标 P95 延迟
- 按 CPU 使用率阈值伸缩:适用于专用 CPU 计划
点击 Save。自动触发重新部署,你的应用便开始自动伸缩。
使用应用规格(App Spec)
在你的应用规格中,为服务组件添加一个自动伸缩块。下面的示例在 1 到 10 个容器之间伸缩,目标为每实例每秒 100 个请求和 500 毫秒的 P95 延迟:
name: my-app
services:
- name: web
github:
repo: your-org/your-repo
branch: main
autoscaling:
min_instance_count: 1
max_instance_count: 10
metrics:
requests_per_second:
per_instance: 100
request_duration:
p95_milliseconds: 500
通过 doctl apps update 或 Apps API 提交更新后的应用规格。你可以随时调整这些值——如果你的服务比你期望的更早开始伸缩,就提高目标值;如果在新的容器到达之前就已经看到延迟,就降低目标值。
几点注意事项:
-
基于请求的自动伸缩适用于接收外部 HTTP 流量的 web 服务组件。Worker 和函数组件不适用。
-
它不能与同一服务上的 缩容至零(闲置休眠)同时使用。
-
伸缩决策基于 5 分钟的速率窗口,因此自动伸缩器响应的是持续性负载,而不是瞬间尖峰。
开始使用基于请求的自动伸缩
你的流量不会按日程表到来,你的伸缩也不该如此。基于请求的自动伸缩现已在所有 DigitalOcean 账户上可用。前往 Insights 标签页了解你的流量模式,然后直接在控制台或通过应用规格配置你的自动伸缩规则。
相关产品与选型



