自动扩展#
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 不会立即进行扩展或缩减。相反,只有当您的服务的 QPS 在一段时间内高于或低于目标 QPS 时,SkyServe 才会对您的服务进行扩展或缩减。这是为了避免过于频繁地进行扩展和缩减。
默认的扩展延迟为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
# ...
当系统没有流量时,服务将缩减所有副本,并在空闲副本上节省成本。当从零扩展时,为了更快地启动服务,扩展延迟将被忽略。
提示
如果设置了缩放到零,访问端点的客户端应确保具有重试机制,以便能够等待副本被配置并准备就绪,即在没有可用副本时启动新副本。