为保证服务扩容时,不受专属资源组机器资源的限制,EAS提供了弹性资源池的能力。即部署在专属资源组中的服务,在扩容时遇到机器资源不足时,新扩出来的实例会自动启动在按量付费的公共资源上,并以公共资源组的方式来进行计费;在缩容时会优先缩掉公共资源组中的服务实例。
前提条件
已创建专属资源组,详情请参见使用专属资源组。
背景信息
在EAS的专属资源组中,您可以通过预付费包年包月和后付费按量付费的方式来购买机器节点。一方面可以保证持久持有一定量的保底资源,避免业务临时扩容资源时因库存不足(特别是GPU资源)导致业务受损;另一方面,在专属资源组中可以用更低的价格购买预付费的资源,您可以用更低的成本来持有保底资源。
而在实际应用中,用户通常希望服务资源能更弹性。即在业务高峰时段,能够更方便的使用更多的后付费资源;而在业务低峰时段,又能自动进行缩容。配合EAS提供的水平自动扩缩容的能力,服务可做到实例维度的自动伸缩。但在专属资源组中,机器节点资源有限的情况下,实例的伸缩会受到资源组中机器资源的限制,而动态扩缩资源组中的机器节点数量效率太低且使用不便。因此,EAS提供了专属资源组服务资源自动伸缩的功能。
功能优势
该功能非常适合配合水平自动扩缩容功能来使用,服务开启根据QPS或CPU等指标的波动自动伸缩的功能后,开启服务资源自动伸缩功能可保证资源不受专属资源组的限制。相当于更方便地在一个服务中组合使用按量付费和预付费资源,可以大幅降低服务的整体资源成本。
配置方法
服务部署时开启资源自动伸缩
通过控制台
通过本地客户端
使用eascmd客户端部署服务时,开启资源自动伸缩功能。以Windows 64版本为例,具体操作步骤如下:
配置JSON文件。
重要公共资源组和专属资源组中的服务,在资源配置和网络配置上有稍许不同。在公共资源组中可以通过配置实例类型来为服务申请资源(即通过cloud.computing字段配置);公共资源组的网络直连是配置在服务中的(即通过cloud.networking字段配置),而专属资源组的网络直连是配置在资源组级别的。因此,如果要保证网络直连功能在资源自动伸缩过程中同样可用,则在部署服务时,需要增加相关的网络配置项。
JSON文件配置示例如下。
{ "model_path": "http://examplebucket.oss-cn-shanghai.aliyuncs.com/models/lr.pmml", "name": "test_burstable_service", "processor": "pmml", "metadata": { "instance": 1, "cpu": 1, "resource": "eas-r-xxx", "resource_burstable": true }, "cloud": { "computing": { "instance_type": "ecs.r7.2xlarge" }, "networking": { "security_group_id": "sg-uf68iou5an8j7sxd****", "vswitch_id": "vsw-uf6nji7pzztuoe9i7****" } } }
其中:
resource_burstable:配置为true时,表示开启资源自动伸缩功能。
cloud.networking:在专属资源组中部署服务时,该参数不生效。为保证网络直连功能在资源伸缩过程中同样可用,需要配置该参数。
cloud.computing:可选,如果您希望扩容到公共资源的实例使用机器实例资源,则需要在JSON文件中配置该参数,详情请参见使用公共资源组。
其他参数配置说明,详情请参见服务模型所有相关参数说明。
使用eascmd客户端部署模型服务,详情请参见服务部署:EASCMD或DSW。
该服务部署在专属资源组中,当服务扩容时,如果专属资源组中机器资源不足,会自动将实例扩容到公共资源组中。
服务部署后,开启或关闭资源自动伸缩
通过控制台
登录PAI控制台,在页面上方选择目标地域,并在右侧选择目标工作空间,然后单击进入EAS。
单击已部署服务操作列下的更新。
在更新服务页面的资源部署区域开启或关闭资源自动伸缩功能。
开启资源自动伸缩
在资源部署区域,打开弹性资源池开关,并配置公共资源组资源规格。
关闭资源自动伸缩
在资源部署区域,关闭弹性资源池开关。
单击更新。
通过本地客户端
您可以使用以下命令,为已部署的服务快速打开或关闭自动伸缩功能。以Windows 64版本为例:
如果在专属资源组中部署服务时未配置cloud.networking参数,则开启自动伸缩功能后,扩容到公共资源组的实例不支持网络直连功能。
# 开启服务资源自动弹性伸缩。
eascmdwin64.exe modify <service_name> -Dmetadata.resource_burstable=true
# 关闭服务资源自动弹性伸缩。
eascmdwin64.exe modify <service_name> -Dmetadata.resource_burstable=false
其中:<service_name>:需要替换为已部署的服务名称。
服务资源自动伸缩功能的开启和关闭只会影响新创建的服务实例,老实例不会自动做迁移。例如:一个服务扩容完成后有2个实例为pending(等待中)状态,在开启了资源自动伸缩功能后,这2个pending(等待中)的实例不会自动迁移至公共资源组上。您可以在控制台上重启该实例,实例重启后会调度到公共资源中。同理,已经开启了自动伸缩的服务,调度到公共资源中的服务实例,在关闭了资源自动伸缩功能后,也不会自动调度回专属资源中。