自动扩缩#
SkyServe 为您的服务提供了开箱即用的自动扩缩功能。
固定副本数#
在服务 YAML 中,要启动的副本数量在 service
部分的 replicas
字段中指定
service:
readiness_probe: /
replicas: 2
# ...
在这种情况下,SkyServe 将启动服务的 2 个副本。但是,这种部署是固定的,无法根据动态流量进行调整。SkyServe 提供了自动扩缩功能,可帮助您根据流量对服务进行扩容和缩容,如下所示。
启用自动扩缩#
以下是启用服务自动扩缩的最小示例
service:
readiness_probe: /
replica_policy:
min_replicas: 2
max_replicas: 10
target_qps_per_replica: 2.5
# ...
在此示例中,SkyServe 将
最初启动服务的 2 个副本 (
min_replicas
)如果流量高,则逐渐扩容,最多 10 个副本 (
max_replicas
)如果流量低,则逐渐缩容,最少 2 个副本 (
min_replicas
)
副本数量将始终在 [min_replicas, max_replicas]
范围内。
自动扩缩基于服务的 QPS(每秒查询数)进行。SkyServe 将扩缩您的服务,以便最终每个副本每秒接收大约 target_qps_per_replica
个查询。此值可以是浮点数;例如
如果每个副本的 QPS 高于 2.5,SkyServe 将启动更多副本(但不会超过 10 个副本)
如果每个副本的 QPS 低于 2.5,SkyServe 将缩减副本(但不会少于 2 个副本)
具体来说,当前目标副本数量计算如下
current_target_replicas = ceil(current_qps / target_qps_per_replica)
final_target_replicas = min(max_replicas, max(min_replicas, current_target_replicas))
提示
replicas
是 replica_policy.min_replicas
的快捷方式。这两个字段不能同时指定。
提示
target_qps_per_replica
可以是任何正浮点数。如果在一个副本中处理一个请求需要两秒钟,我们可以使用 target_qps_per_replica=0.5
。
扩缩延迟#
SkyServe 不会立即扩容或缩容。相反,SkyServe 只会在服务 QPS 在一段时间内高于或低于目标 QPS 时才会扩容或缩容您的服务。这是为了避免过于激进的扩容和缩容。
默认的扩容延迟为 300 秒,缩容延迟为 1200 秒。您可以通过指定 upscale_delay_seconds
和 downscale_delay_seconds
字段来更改扩缩延迟
service:
readiness_probe: /
replica_policy:
min_replicas: 2
max_replicas: 10
target_qps_per_replica: 3
upscale_delay_seconds: 300
downscale_delay_seconds: 1200
# ...
如果您希望更激进的扩缩,请将这些值设置得更低,反之亦然。
缩容至零#
SkyServe 支持缩容至零。
如果您的服务可能会长时间没有流量,请考虑使用 min_replicas: 0
service:
readiness_probe: /
replica_policy:
min_replicas: 0
max_replicas: 3
target_qps_per_replica: 6.3
# ...
当系统没有流量时,服务将缩减所有副本,从而节省空闲副本的成本。从零扩容时,将忽略扩容延迟,以便更快地启动服务。
提示
如果设置了缩容至零,访问端点的客户端应确保具备重试机制,以便能够等待副本被配置并就绪,即在没有可用副本时启动新副本。