服务群组

对于多个子服务共同承接业务流量的场景,您可以创建服务群组。服务群组拥有统一的流量入口,系统按照流量分配策略将入口流量分配给每个服务。本文为您介绍如何创建服务群组、查看流量入口及修改流量分配策略。

应用场景

通过服务群组功能,您可以实现以下几种典型的应用场景:

  • 灰度发布

    将生产服务和灰度服务加入同一分组,灰度服务分配较少的流量。发布新版本时,先更新灰度服务,观察运行情况。若有问题,回滚灰度服务或停止灰度服务并切换流量到生产服务;若正常,则全量更新生产服务,更新后缩容灰度服务至0或保留少量流量。

  • 预付费和后付费弹性伸缩

    在同一分组中,预付费服务部署在专属资源组,固定实例数支撑基本需求;后付费服务部署在公共资源组,按需弹性伸缩,降低成本。

  • 使用异构硬件资源

    GPU加速场景中,服务部署完成后,部分卡型在某些地域可能会出现停卡或库存不足的问题,导致服务无法正常扩容。使用服务群组功能在同一服务群组中动态创建不同卡型的服务,适配不同CUDA环境,实现多服务使用异构资源支持同一业务场景。因服务群组的流量入口不变,故前端透明无感知。

创建服务群组

创建服务时,您可以指定服务归属于某个服务群组,通过这种方式创建服务群组,并将对应的服务归纳到该服务群组中。

说明

创建服务时,如果指定的服务群组名称不存在,系统会自动创建该群组;如果存在,则新服务会加入该群组。删除服务群组中最后一个服务时,服务群组会自动删除。

下面以创建一个pmml服务群组,并将pmml_prodpmml_grey两个服务归属到该服务群组为例,示例如何创建服务群组。

通过控制台方式创建

  1. 登录PAI控制台,在页面上方选择目标地域,并在右侧选择目标工作空间,然后单击进入EAS

  2. 灰度发布页签,单击新建群组与服务

  3. 自定义部署页面,配置参数,并单击部署

    其中:

    • 服务名称:参考界面提示信息配置,示例值为pmml_prod

    • 所属群组:选择新建群组,示例值为pmml

    其他参数配置,详情请参见控制台自定义部署参数说明

参照步骤2~3,创建服务pmml_grey归属于服务群组pmml

服务创建成功后,您可以在灰度发页签单击群组名称pmml进入群组详情页面,查看归属于该群组的服务列表。

image

重要

后加入群组的服务默认不承载流量,请参考修改流量分配策略

通过客户端方式创建

  1. 准备服务的配置文件service.json,示例如下。

    单击查看pmml_prod服务的配置文件

    {
      "name":"pmml_prod",
      "model_path":"http://examplebucket.oss-cn-shanghai.aliyuncs.com/models/lr_xxxx.pmml",
      "processor":"pmml",
      "metadata":{
        "cpu":1,
        "instance":4,
        "group":"pmml"
      }
    }

    单击查看pmml_grey服务的配置文件

    {
      "name":"pmml_grey",
      "model_path":"http://examplebucket.oss-cn-shanghai.aliyuncs.com/models/lr_xxxx.pmml",
      "processor":"pmml",
      "metadata":{
        "cpu":1,
        "instance":1,
        "group":"pmml"
      }
    }

    其中,group指定服务归属于哪个服务群组,即创建的服务群组的名称。其他参数请参见JSON部署参数说明

  2. 创建服务及服务群组。

    登录eascmd客户端后使用create命令创建服务及服务群组,详情请参见下载并认证客户端,使用示例如下所示。

    $ eascmd create service.json
  3. 查看服务及群组详情。

    您可以使用ls命令查看服务及群组详情,使用示例如下所示。

    $ eascmd ls

    系统输出如下结果。

    [RequestId]: 716BEBFC-E8A4-51FD-A3F7-56376B167923
    +---------------------------+----------+-----+--------+----------------------+----------------------+---------+--------+--------------+---------------------------+
    |        SERVICENAME        | INSTANCE | CPU | MEMORY |      CREATETIME      |      UPDATETIME      | STATUS  | WEIGHT | TRAFFICSTATE |       SERVICEGROUP        |
    +---------------------------+----------+-----+--------+----------------------+----------------------+---------+--------+--------------+---------------------------+
    | pmml_prod                 |        4 |   1 | 1000M  | 2022-06-05T14:30:49Z | 2022-06-05T14:30:49Z | Running |     80 | grouping     | pmml                      |
    | pmml_grey                 |        1 |   1 | 1000M  | 2022-06-05T14:31:38Z | 2022-06-05T14:31:38Z | Running |     20 | grouping     | pmml                      |
    +---------------------------+----------+-----+--------+----------------------+----------------------+---------+--------+--------------+---------------------------+

    其中

    • SERVICEGROUP pmml,表示两个服务均归属于pmml服务群组。

    • TRAFFICSTATEgrouping,表示两个服务同时承载流量,且两个服务的流量比例为80%和20%,与实例个数相匹配。

查看流量入口

服务群组拥有统一的流量入口,群组中各服务还拥有独立的流量入口。

服务群组流量入口

<endpoint>/api/predict/<group_name>

使用示例:

http://182848887922****.vpc.cn-shanghai.pai-eas.aliyuncs.com/api/predict/pmml

灰度发布页签,查看服务群组流量入口。该入口的流量会根据策略分配到不同服务。服务群组中的服务可以创建或删除,但入口地址不变,可用于在线调试。

image

单个服务流量入口

<endpoint>/api/predict/<group_name>.<service_name>

使用示例:

http://182848887922****.vpc.cn-shanghai.pai-eas.aliyuncs.com/api/predict/pmml.pmml_prod

推理服务页签,查看单个服务流量入口。该入口与具体服务的生命周期相关联,流量始终会流入指定的服务。服务删除后,入口会被销毁。完成群组切流后,仍需使用该入口地址访问服务并进行在线调试。

image

修改流量分配策略

EAS当前支持两种流量分配方式:

  • 实例数分配:流量会根据各服务的推理实例数量动态分配。例如,服务A1个实例,服务B3个实例,则A分配25%流量,B分配75%的流量。关闭流量分配功能后,该服务不再参与群组流量分配,但可单独访问调用。

  • 自定义权重分配:流量会根据各服务的权重进行加权分配。例如,服务A的流量权重为100,服务B的流量权重为400,则A分配20%流量,B分配80%流量。

重要

无论哪种流量分配方式,服务关闭流量分配功能后,不再参与群组流量分配,但可单独访问调用。

具体修改方式如下:

按实例数分配

方式一:通过控制台

打开流量分配列开关,表示该服务承接流量;关闭,表示该服务不承接流量。

image

方式二:使用EASCMD

使用release命令,命令格式如下所示。如何登录eascmd客户端,请参见下载并认证客户端

$ eascmd release <service_name> -s grouping|standalone

其中:

  • <service_name>:服务名称,需要替换为待修改的服务名称。

  • grouping|standalone:修改后的状态,grouping表示承载流量,standalone表示不承载流量。

使用示例如下所示:

  • 修改服务pmml_grey的状态为standalone,即不承载流量,可执行如下命令。

    $ eascmd release pmml_grey -s standalone

    系统输出结果如下。

    Confirmed to release service [pmml_grey] to group traffic [Y/n]yes
    [RequestId]: 40C787DF-8900-5F7A-8A01-30F7D5A8BF3B
    [OK] Service [pmml_grey] has entered the traffic state: standalone

    使用eascmd ls命令查看服务的运行状态,系统输出如下结果。

    [RequestId]: 83BE3FBB-8CE2-5008-B435-1938A20B13AA
    +---------------------------+----------+-----+--------+----------------------+----------------------+---------+--------+--------------+---------------------------+
    |        SERVICENAME        | INSTANCE | CPU | MEMORY |      CREATETIME      |      UPDATETIME      | STATUS  | WEIGHT | TRAFFICSTATE |       SERVICEGROUP        |
    +---------------------------+----------+-----+--------+----------------------+----------------------+---------+--------+--------------+---------------------------+
    | pmml_prod                 |        4 |   1 | 1000M  | 2022-06-05T14:30:49Z | 2022-06-05T14:30:49Z | Running |    100 | grouping     | pmml                      |
    | pmml_grey                 |        1 |   1 | 1000M  | 2022-06-05T14:42:41Z | 2022-06-05T14:42:41Z | Running |     0  | standalone   | pmml                      |
    +---------------------------+----------+-----+--------+----------------------+----------------------+---------+--------+--------------+---------------------------+

    其中服务pmml_greyTRAFFICSTATE已更新为standaloneWEIGHT0,表示全部的流量由pmml_prod承载。

  • 修改服务pmml_grey的状态为grouping,即服务承载流量,可执行如下命令。

    $ eascmd release pmml_grey -s grouping

    系统输出结果如下。

    Confirmed to release service [pmml_grey] to group traffic [Y/n]yes
    [RequestId]: 40C787DF-8900-5F7A-8A01-30F7D5A8BF3B
    [OK] Service [pmml_grey] has entered the traffic state: grouping

    使用eascmd ls命令查看服务的运行状态,系统输出如下结果。

    [RequestId]: 83BE3FBB-8CE2-5008-B435-1938A20B13AA
    +---------------------------+----------+-----+--------+----------------------+----------------------+---------+--------+--------------+---------------------------+
    |        SERVICENAME        | INSTANCE | CPU | MEMORY |      CREATETIME      |      UPDATETIME      | STATUS  | WEIGHT | TRAFFICSTATE |       SERVICEGROUP        |
    +---------------------------+----------+-----+--------+----------------------+----------------------+---------+--------+--------------+---------------------------+
    | pmml_prod                 |        4 |   1 | 1000M  | 2022-06-05T14:30:49Z | 2022-06-05T14:30:49Z | Running |     80 | grouping     | pmml                      |
    | pmml_grey                 |        1 |   1 | 1000M  | 2022-06-05T14:42:41Z | 2022-06-05T14:42:41Z | Running |     20 | grouping     | pmml                      |
    +---------------------------+----------+-----+--------+----------------------+----------------------+---------+--------+--------------+---------------------------+

    其中服务pmml_greyTRAFFICSTATE已更新为grouping,并按实例比例承载了20%的流量。

自定义权重

在流量权重列直接编辑。

image