Skip to content

实例与扩缩容

应用的实例在有请求时启动,请求停止后休眠,休眠一段时间后被删除。实例的数量、运行位置,以及如何在响应之后让工作继续。

更新于

应用的每个实例都是一个从版本模板创建的沙箱,所以创建时其中的服务已经在运行。它出现在项目的沙箱列表中,带有 app 标签,和其他沙箱一样计量,你也可以在里面运行命令 (glac sandboxes exec)。

实例何时休眠

只有三样东西能让实例保持运行:

  • 它正在响应的请求(打开着的 HTTP/2 流,比如一次 gRPC 调用,在结束前都算一个请求);
  • 使用它的 API 调用,比如在里面运行的命令;
  • 它自己的程序提出的保持请求(见下文)。

CPU 占用、网络包、打开的连接和定时器都不会让它保持运行。最后一样结束后,它会等一会儿再休眠。等多久根据应用自己的流量决定:请求间隔比一次休眠加一次唤醒还短时,它会在间隔中保持运行;请求间隔很长时,它一响应完就休眠。scale.sleep_after_ms 是它最长的等待时间(默认三秒,最多 600,000 毫秒;0 表示总是立即休眠)。在应用收到少量请求之前,以及实例打开着 WebSocket 时,如果你设置了 sleep_after_ms,它会等满这个时间,否则等 100 毫秒。它在响应之后做的工作会被暂停,直到下一个请求把它唤醒。实例休眠时 WebSocket 保持打开,上面来了新数据就会唤醒它。

响应之后的工作

响应之后还有工作要做的处理程序(类似其他平台上的 ctx.waitUntil()),要在响应之前通过实例内的 Unix 套接字 /run/sbx/awake 提出保持请求,工作完成后再撤销。之后实例会像处理完请求后那样等一会儿,然后停止。如何提出保持请求,以及示例代码,见休眠与唤醒。

  • scale.sleep_hold_max_ms 限制空闲时间用完之后,保持请求最多还能让实例保持运行多久:默认 30,000 毫秒,最多 900,000 毫秒;0 表示忽略保持请求。
  • scale.sleep_notice_ms 让实例的程序在它停止前这么久收到 sleep <ms> 通知(默认不通知,最多 60,000 毫秒)。
  • 被保持期间,实例按运行计量。

实例何时被删除

在 scale.delete_after_ms 内没有任何东西让它保持运行的实例会被删除:默认一小时,你可以设得更短,最短一秒。下一个请求会在几毫秒内从模板创建一个新实例。被删除的实例什么都不保留,所以必须保存数据的服务要使用云盘,或者使用会被保留的键控实例。

实例数量

设置 作用
scale.min_instances 每个区域中保持运行的实例数,无论有没有请求(默认 0)。它们按运行计量。
scale.max_instances 一个区域中最多的实例数。不设置时,取套餐对未设置此项的应用规定的数量(见下文)。
scale.concurrency 一个实例同时处理的最多请求数,1 到 1,000。不设置时,实例的 CPU 或内存满了就算满,平台会再启动一个实例。一次只处理一个请求的服务应该设为 1。
glac cube update api --min-instances 1 --max-instances 20 --concurrency 50 --sleep-after-ms 2000

这些设置立即生效,不会产生新版本。超过套餐的数量时,部署或更新会被拒绝(403 plan_cap_reached,param 为 app_instances):

免费版 付费版
单个应用在一个区域的实例数:未设 max_instances 时 / 最多 2 / 5 50 / 500
同时运行的实例 5 500
vCPU 合计 10 500
内存合计 10 GiB 1,000 GiB

运行中的实例数、vCPU 和内存按整个账户计算,连同账户的沙箱一起。分布在多个区域的应用在这些区域之间分享账户剩余的额度:每个区域的份额取决于它最近运行的实例数,需要超出份额的区域会在几秒内得到其他区域没有用到的部分(在此期间,它的请求会送到应用在另一个区域的机器上)。这些限制是配额,不是预留:一个区域的机器满了时,即使还在限制之内,新实例也可能被拒绝。

在哪里运行

应用运行在它指定的区域中(regions:na、eu、ap;默认三个都有)。请求在它进入的区域中、由那里为应用提供服务的机器响应;只有那里没有机器能响应时,才由另一个区域接手。min_instances 和 max_instances 按每个区域计算。参见区域。

规格

size 是 {vcpus, memory_bytes}:至少 1 vCPU 和 128 MiB,内存必须是偶数 MiB(即机器内存加载时所用的 2 MiB 页的整数倍;否则会被拒绝,400 invalid_field),最大为套餐允许的最大实例(免费版为 2 vCPU 和 4 GiB,付费版为 8 vCPU 和 16 GiB)。不设置时为 2 vCPU 和 4 GiB。在命令行上写作 --vcpus 4 --memory-bytes 8GiB。规格是版本的一部分:修改它会部署一个新版本。

导航

输入以搜索……

↑↓ 切换↵ 选择Esc 关闭