网站
扩展和自动扩展 Node.js 应用
Auto-scaling grows and shrinks the number of instances running your Node.js app as CPU load changes, so busy periods get more capacity and quiet periods cost less. This guide covers the KPanel tab…
Node.js 应用的扩展与自动扩展
自动扩展会根据 CPU 负载变化自动增加或减少运行 Node.js 应用的实例数量,使繁忙时段获得更多容量,而空闲时段的成本更低。本指南涵盖 KPanel 标签页、所有设置、账单计算方式,以及如何使应用安全地扩展。
KPanel 中扩展功能的位置
- 登录 KPanel。
- 点击左侧边栏中的网站,然后点击相应网站。
- 在网站的标签页中,打开高级,然后扩展。
直接地址是 /websites/<site-id>/autoscale。较旧的 /websites/<site-id>/scaling 地址仍然有效,会将您重定向到同一位置。

此标签页仅在 Node.js 网站上显示。对于 WordPress、WooCommerce、静态、PHP、Python 或 Ruby 网站,此选项不会出现在菜单中,因为扩展机制是针对 Node.js 进程集群的。
一个标签页,一个配置
KPanel 过去在此处有两个标签页,扩展和自动扩展,对应同一组设置。它们是同一配置的两种视图,这只会导致混淆,因此现在合并为单个扩展标签页:实时状态、设置、最近扩展事件,以及当前计费周期的使用情况和成本面板,全部集中在一个地方。
工作原理
您的应用作为进程集群运行。自动扩展监控运行中实例的平均 CPU,并根据您设置的阈值添加或删除实例。
需要启用集群模式。如果您的应用尚未在集群模式下运行,启用自动扩展会自动切换,这涉及短暂的重新启动。页面会在发生此情况时通知您。
读取实时状态
状态卡显示三项信息:
- 实例数:当前正在运行的数量。
- 平均 CPU:这些实例的平均 CPU。
- 集群:应用是否处于集群模式。如果显示否,启用自动扩展将会切换它。
如果应用根本没有运行,卡片会显示相应提示,而不是显示零。
标签页还显示最后扩展,即最近一次扩展事件的时间,或从未。
设置
| 设置 | 范围 | 作用 |
|---|---|---|
| 最小实例数 | 1 至 16 | 下限。扩展不会低于此值 |
| 最大实例数 | 1 至 16 | 上限。扩展不会超过此值 |
| CPU % 时扩展 | 5 至 99 | 平均 CPU 超过此值时添加一个实例 |
| CPU % 时缩减 | 1 至 95 | 平均 CPU 低于此值时删除一个实例 |
| 冷却时间(秒) | 30 至 3600 | 扩展操作之间的最小等待时间 |
主开关是设置卡片标题中的切换开关。关闭自动扩展时,设置会变灰,您的应用将保持在当前实例数。
合理的起始值:
- 最小实例数为 1 或 2。如果您不能容忍单个实例重启导致应用离线,则设为 2。
- 最大实例数应根据您愿意在峰值时支付的成本,而不是按上限。
- 扩展阈值设为约 70%。足够高,使您不会为从不使用的预留容量付费;足够低,以便有时间在请求开始排队前添加容量。
- 缩减阈值设为约 30%。在两个阈值之间保留较大的间隙。
- 冷却时间为几分钟。这是最容易被忽视的设置。
将两个 CPU 阈值设置过接近会导致频繁波动:集群向上扩展,因为负载现在分散更宽,立即低于缩减阈值,然后缩减,再次增加,并重复。保持较大的间隙,使用充足的冷却时间。频繁波动会增加成本并使应用不稳定。
扩展事件
标签页列出最近的扩展事件,最新的优先,每个事件显示方向、扩展前后的实例数、触发扩展的 CPU 读数和时间。
这是当应用出现异常时应查阅的日志。几分钟内发生多次上下扩展事件意味着您的阈值过接近或冷却时间过短。单次扩展从未恢复意味着负载始终保持较高,这是容量问题而不是配置问题。当您预期有扩展事件但没有发生,意味着 CPU 从未跨越阈值或自动扩展已关闭。
自动扩展的成本
超出您计划基础分配的实例按秒计量和计费。标签页显示当前周期的:
- 已使用的实例时间,以小时和分钟显示,下面是原始实例秒数。
- 本周期已花费。
- 月末预计,根据迄今使用情况推断。
- 追踪,已计费的使用窗口数与记录的总数。
- 周期进度,本月已流逝的天数与月天数。
按秒费率显示在同一面板的顶部,因此您被计费的数字始终与其适用的使用情况相邻显示。
预计值是需要关注的数字。它根据迄今的使用情况推断,因此月初繁忙周的异常使用会高估它。几天后检查一次,然后在月中再次检查,再得出结论。如果高于您的预期,降低最大实例数而不是提高扩展阈值:上限是硬限制,阈值只是提示。
缩减到最小值会停止计量。如果完全关闭自动扩展,应用会保留在当前实例数,因此如果是出于成本考虑而关闭,请先将其降至最小值。
使应用安全地扩展
页面上有一条警告,这是其上最重要的内容:您的 Node.js 应用必须是集群安全的,才能在实例间平稳扩展。
实际上,这意味着:
没有内存中的会话状态。如果已登录用户的会话存在于一个实例的内存中,当请求落在不同实例上时,他们会被注销。将会话移至共享存储。
没有依赖其正确性的内存中缓存。每个实例都有自己的缓存。必须一致的缓存必须是共享的。
没有您期望读取回的本地文件系统写入。一个实例写入本地磁盘的上传对其他实例不可见。写入共享存储。
没有无保护的计划工作。如果计时器在应用内运行,每个实例都会运行它,因此四个实例的每夜任务会运行四次。将计划工作移至 cron 任务,或用锁保护它。请参阅 Cron 任务。
不要假设实例数是稳定的。任何按实例索引划分工作的内容在计数变化时会立即中断。
如果以上任何一项适用于您的应用,在启用自动扩展前修复它们。不符合集群安全的应用会以间歇性且难以重现的方式失败,因为这取决于哪个实例处理了哪个请求。
故障排除
切换开关无法启用。启用需要网站的写入权限。使用只读角色时,控件被禁用。
启用自动扩展时应用重新启动。这是预期的。切换到集群模式需要重新启动,这只发生一次。
用户随机被注销。经典的非集群安全症状。会话在内存中,请求落在不同实例上。
实例扩展后从未缩减。要么负载始终超过缩减阈值,要么某些因素独立于流量持续占用 CPU。检查事件列表并查看应用实际在做什么。
计划任务运行了多次。每个实例都运行了它。将其移至 cron 任务或添加锁。
没有扩展。确认切换已开启,应用正在运行,集群模式已启用。然后检查 CPU 是否真正在事件列表中跨越了扩展阈值。
成本高于预期。查看事件列表是否有频繁波动,然后降低最大实例数。
相关页面
- 网站性能和 APM,查看 CPU 是否真正是瓶颈。
- 网站正常运行时间监控,确认扩展是否真正改进了可用性。
- Cron 任务,用于必须恰好运行一次的计划工作。
- 调整云服务器大小,如果您需要更大的机器而不是更多实例。