文档

服务分组

更新时间:

对于多个子服务共同承接业务流量的场景,您可以创建服务分组。服务分组拥有统一的流量入口,系统按照流量分配策略将入口流量分配给每个服务,您也可以指定服务分组中每个服务的流量比例,实现资源有效利用。本文为您介绍如何创建服务分组、查看流量入口及修改流量分配策略。

应用场景

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

  • 灰度发布

    将两个服务加入同一个服务分组,一个服务用做生产,一个服务用作灰度,灰度服务配置较少的实例个数,两个服务承载的流量比例按照服务的实例个数进行分配。

    新版本服务发布时,您可以先更新灰度服务,并观察线上运行情况。如果运行出现问题,可以将灰度服务版本快速回滚,您也可以停止灰度服务,并将流量切换到生产服务中;如果灰度服务运行正常,则可以全量更新生产服务,更新完成后将灰度服务缩容至0,也可以保留灰度服务继续承载线上少部分流量。

  • 蓝绿发布

    将两个独立的服务加入同一个服务分组,每个服务承载的流量比例不再按照服务的实例个数进行分配,您可以指定每个服务承载的流量比例,比如服务A承载25%的流量,服务B承载75%的流量。

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

    您可以在同一个服务分组中创建服务,将一个服务部署在预付费专属资源组中,并固定服务中的实例个数来支撑基本的业务需求;同时在公共资源组中创建后付费服务,将该服务按照业务属性配置弹性伸缩,满足弹性的业务流量,实现公共资源和专属资源的共用,有效降低成本。

  • 使用异构硬件资源

    在GPU加速场景中,单个服务一般使用一种卡型。服务部署完成后,部分卡型在某些地域可能会出现停卡或库存不足的问题,导致服务无法正常扩容。您可以通过服务分组功能,在同一个服务分组中使用不同的卡型动态创建新服务。因为不同卡型对CUDA环境有不同程度的依赖,不同服务可以适配不同的卡型,从而实现多个服务使用异构资源支持同一业务的场景。因为服务分组的流量入口不变,后端在分组中创建多少个服务,均可以实现前端透明无感知。

创建服务分组

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

说明

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

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

通过控制台方式创建服务分组

  1. 进入模型在线服务(EAS)页面。

    1. 登录PAI控制台

    2. 在左侧导航栏单击工作空间列表,在工作空间列表页面中单击待操作的工作空间名称,进入对应的工作空间。

    3. 在工作空间页面的左侧导航栏选择模型部署 > 模型在线服务(EAS),进入模型在线服务(EAS)页面。

  2. 服务群组页签,单击新建分组服务

  3. 服务群组页面,配置参数,并单击部署

    其中:

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

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

    其他参数配置,详情请参见服务部署:控制台

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

服务创建成功后,您可以单击群组名称pmml进入群组详情页面,查看归属于该群组的服务列表。42bcfca1eadb090920de6d591d37fff0.png

通过客户端方式创建服务分组

  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",
          "traffic_state": "grouping"
        }
      }
    • 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",
          "traffic_state": "grouping"
        }
      }

    配置文件中的关键参数解释:

    • group:用来指定服务归属于哪个服务分组,即创建的服务分组的名称。

    • traffic_state:用来指定服务在服务分组中是否承载流量,支持配置以下两个参数:

      • grouping:表示承载服务分组中的流量。

      • standalone:表示不承载服务分组中的流量。

      说明

      如果配置文件中没有配置traffic_state字段,表示服务默认承载服务分组的流量。如果您不希望加入服务分组的服务立即承载服务分组的流量,可以将traffic_state字段配置为standalone

      当服务分组中只有一个服务时,如果该服务的流量状态为standalone,则系统会自动将该服务的流量状态设置为grouping。

    配置文件中的其他参数解释,详情请参见命令使用说明

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

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

    $ 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

    您可以在控制台页面,参照下图操作指引,查看服务群组流量入口。dd92fabdc07f27bb0e8b8d12fb05a19d.png

    从该流量入口进入的流量,会根据不同的流量分配策略分配到服务分组中不同的服务,您可以在服务分组中创建服务或删除服务,该入口始终保持不变,您可以使用该入口地址进行在线调试。

  • 单个服务流量入口。

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

    使用示例。

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

    您可以在控制台页面,参照下图操作指引,查看单个服务流量入口。5759b861c52f9631fdf68032af224d62.png

    该入口与具体服务的生命周期相关联,从该入口进入的流量始终会流入指定的服务中,与流量分配策略无关。相关的服务删除后,该入口会同时被销毁。通常在完成分组切流后,您仍需要使用该入口的访问地址访问服务并进行在线调试。

修改流量分配策略(分组切流与蓝绿切流)

EAS当前支持两种切流方式:分组切流和蓝绿切流,服务创建成功后默认为分组切流,支持将分组切流切换为蓝绿切流,且两种切流方式均支持修改流量分配策略。

分组切流

  • 切流模式介绍

    新创建服务并指定服务分组后,加入服务分组的服务默认为分组切流方式,且直接开始承接服务分组的流量,服务分组按照服务中实例的个数来分配流量,因此实例数多的服务会分配更多的流量。

  • 修改流量分配策略

    • 通过控制台方式,参照下图操作指引,修改流量分配策略。fe180b073bad30ff925f018b0660bc73打开③位置开关,表示该服务承接流量;关闭③位置开关,表示该服务不承接流量。

    • 使用release命令修改流量分配策略,命令格式如下所示。

      $ eascmd release <service_name> -s grouping|standalone

      其中

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

      • grouping|standalone:修改后的状态,包括groupingstandalone,分别表示承载流量和不承载流量。

      使用示例如下所示:

      • 修改服务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已更新为standaloneWEIGHT为0,表示全部的流量由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%的流量。

蓝绿切流

  • 切流模式介绍

    蓝绿切流功能仅支持一个服务分组中有两个服务的场景,当使用蓝绿切流功能为其中一个服务切流N%的时候,另一个服务的流量比例自动切换为(100-N)%。如果删除服务分组中的一个服务,流量会全部流入另一个服务中。

  • 修改切流模式

    当服务使用分组切流方式时,支持切换为蓝绿切流方式,命令格式如下所示。

    重要

    蓝绿切流和分组切流两种方式互斥,当服务切换为蓝绿切流方式后,不再支持使用分组切流方式。

    $ eascmd release <service_name> -w <权重值>

    其中

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

    • <权重值>:服务的流量权重,取值为[0,100]。

    使用示例请参见下文的修改流量分配策略。

  • 修改流量分配策略

    您可以通过蓝绿切流功能,指定不同服务的流量权重,使用示例如下所示。

    $ eascmd release pmml_grey -w 27

    系统输出如下结果。

    Confirmed to release service [pmml_grey] at weight [27%]? [Y/n]yes
    [RequestId]: DD8F8EC2-D726-5E37-9C0B-B360F61C810A
    [OK] Service [pmml_grey] is weighted to 27% now

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

    [RequestId]: 51789E0B-88E7-5293-828B-1EFAD2EEA003
    +---------------------------+----------+-----+--------+----------------------+----------------------+---------+--------+--------------+---------------------------+
    |        SERVICENAME        | INSTANCE | CPU | MEMORY |      CREATETIME      |      UPDATETIME      | STATUS  | WEIGHT | TRAFFICSTATE |       SERVICEGROUP        |
    +---------------------------+----------+-----+--------+----------------------+----------------------+---------+--------+--------------+---------------------------+
    | pmml_prod                 |        4 |   1 | 1000M  | 2022-06-05T14:30:49Z | 2022-06-05T14:53:20Z | Running |     73 | blue-green   | pmml                      |
    | pmml_grey                 |        1 |   1 | 1000M  | 2022-06-05T14:50:14Z | 2022-06-05T14:53:20Z | Running |     27 | blue-green   | pmml                      |
    +---------------------------+----------+-----+--------+----------------------+----------------------+---------+--------+--------------+---------------------------+

    其中服务pmml_greyTRAFFICSTATE已更新为blue-green,表示使用蓝绿切流方式,WEIGHT27,表示将27%的流量切入pmml_grey服务中。