更新时间:2024-11-22 GMT+08:00

通过VPC高速访问通道的方式访问在线服务

背景说明

访问在线服务的实际业务中,用户可能会存在如下需求:

  • 高吞吐量、低时延
  • TCP或者RPC请求

因此,ModelArts提供了VPC直连的高速访问通道功能以满足用户的需求。

使用VPC直连的高速访问通道,用户的业务请求不需要经过推理平台,而是直接经VPC对等连接发送到实例处理,访问速度更快。

由于请求不经过推理平台,所以会丢失以下功能:

  • 认证鉴权
  • 流量按配置分发
  • 负载均衡
  • 告警、监控和统计
图1 VPC直连的高速访问通道示意图

约束限制

调用API访问在线服务时,对预测请求体大小和预测时间有限制:
  • 请求体的大小不超过12MB,超过后请求会被拦截。
  • 因APIG(API网关)限制,平台每次请求预测的时间不超过40秒。

准备工作

使用专属资源池部署在线服务,服务状态为“运行中”。

  • 需使用新版专属资源池部署服务,详情请参见ModelArts Standard资源池功能介绍
  • 只有专属资源池部署的服务才支持VPC直连的高速访问通道。
  • VPC直连的高速访问通道,目前只支持访问在线服务。
  • 因流量限控,获取在线服务的IP和端口号次数有限制,每个主账号租户调用次数不超过2000次/分钟,每个子账号租户不超过20次/分钟。
  • 目前仅支持自定义镜像导入模型,部署的服务支持高速访问通道。

操作步骤

使用VPC直连的高速访问通道访问在线服务,基本操作步骤如下:

  1. 将专属资源池的网络打通VPC
  2. VPC下创建弹性云服务器
  3. 获取在线服务的IP和端口号
  4. 通过IP和端口号直连应用
  1. 将专属资源池的网络打通VPC

    登录ModelArts控制台,进入“AI专属资源池 > 弹性集群Cluster”找到服务部署使用的专属资源池,单击“名称/ID”,进入资源池详情页面,查看网络配置信息。返回专属资源池列表,选择“网络”页签,找到专属资源池关联的网络,打通VPC。打通VPC网络后,网络列表和资源池详情页面将显示VPC名称,单击后可以跳转至VPC详情页面。

    图2 查看网络配置

    图3 打通VPC

  2. VPC下创建弹性云服务器

    登录弹性云服务器ECS控制台,单击右上角“购买弹性云服务器”,进入购买弹性云服务器页面,完成基本配置后单击“下一步:网络配置”,进入网络配置页面,选择1中打通的VPC,完成其他参数配置,完成高级配置并确认配置,下发购买弹性云服务器的任务。等待服务器的状态变为“运行中”时,弹性云服务器创建成功。单击“名称/ID”,进入服务器详情页面,查看虚拟私有云配置信息。

    图4 购买弹性云服务器时选择VPC

    图5 查看虚拟私有云配置信息

  3. 获取在线服务的IP和端口号

    可以通过使用图形界面的软件(以Postman为例)获取服务的IP和端口号,也可以登录弹性云服务器(ECS),创建Python环境运行代码,获取服务IP和端口号。

    API接口:

    GET /v1/{project_id}/services/{service_id}/predict/endpoints?type=host_endpoints
    • 方式一:图形界面的软件获取服务的IP和端口号
      图6 接口返回示例
    • 方式二:Python语言获取IP和端口号

      Python代码如下,下述代码中以下参数需要手动修改:

      • project_id:用户项目ID,获取方法请参见获取项目ID和名称
      • service_id:服务ID,在服务详情页可查看。
      • REGION_ENDPOINT:服务的终端节点,查询请参见终端节点
      def get_app_info(project_id, service_id):
          list_host_endpoints_url = "{}/v1/{}/services/{}/predict/endpoints?type=host_endpoints"
          url = list_host_endpoints_url.format(REGION_ENDPOINT, project_id, service_id)
          headers = {'X-Auth-Token': X_Auth_Token}
          response = requests.get(url, headers=headers)
          print(response.content)

  4. 通过IP和端口号直连应用

    登录弹性云服务器(ECS),可以通过Linux命令行访问在线服务,也可以创建Python环境运行Python代码访问在线服务。schema、 ip、port参数值从3获取。
    • 执行命令示例如下,直接访问在线服务。
      curl --location --request POST 'http://192.168.205.58:31997' \
      --header 'Content-Type:  application/json' \
      --data-raw '{"a":"a"}'
      图7 访问在线服务
    • 创建Python环境,运行Python代码访问在线服务。
      def vpc_infer(schema, ip, port, body):
          infer_url = "{}://{}:{}"
          url = infer_url.format(schema, ip, port)
          response = requests.post(url, data=body)
          print(response.content)

    由于高速通道特性会缺失负载均衡的能力,因此在多实例时需要自主制定负载均衡策略。