
# 通过VPC高速访问通道的方式访问在线服务
#### 背景说明
访问在线服务的实际业务中，用户可能会存在如下需求：
- 高吞吐量、低时延
- TCP或者RPC请求
因此，ModelArts提供了VPC直连的高速访问通道功能以满足用户的需求。
使用VPC直连的高速访问通道，用户的业务请求不需要经过推理平台，而是直接经VPC对等连接发送到实例处理，访问速度更快。此访问方式适用于需要高带宽和低延迟的场景，例如实时数据处理、视频流传输等。
![](https://support.huaweicloud.com/usermanual-standard-modelarts/public_sys-resources/warning_3.0-zh-cn.png)
由于请求不经过推理平台，所以通过VPC高速访问通道的方式访问在线服务会丢失以下功能：
- 认证鉴权

- 流量按配置分发
- 负载均衡
- 告警、监控和统计
 
图1VPC直连的高速访问通道示意图   
![](https://support.huaweicloud.com/usermanual-standard-modelarts/figure/zh-cn_image_0000002122397521.png "点击放大")
#### 约束限制
调用API访问在线服务时，对预测请求体大小和预测时间有限制：
- 请求体的大小不超过12MB，超过后请求会被拦截。
- 因APIG（API网关）限制，平台每次请求预测的时间不超过40秒。
- 只有专属资源池部署的服务才支持VPC直连的高速访问通道。
- VPC直连的高速访问通道，目前只支持访问在线服务。
- 因流量限控，获取在线服务的IP和端口号次数有限制，每个主账号租户调用次数不超过2000次/分钟，每个子账号租户不超过20次/分钟。
- 目前仅支持自定义镜像导入模型，部署的服务支持高速访问通道。
 
#### 准备工作
使用专属资源池部署在线服务，服务状态为"运行中"。
#### 操作步骤
使用VPC直连的高速访问通道访问在线服务，基本操作步骤如下：
1. [将专属资源池的网络打通VPC]
2. [VPC下创建弹性云服务器]
3. [获取在线服务的IP和端口号]
4. [通过IP和端口号直连应用]

1. 将专属资源池的网络打通VPC
   
   登录ModelArts控制台，进入"资源管理 \> 专属资源池"找到服务部署使用的专属资源池，单击"名称/ID"，进入资源池详情页面，查看网络配置信息。返回控制台，左侧导航栏选择"网络管理"，找到专属资源池关联的网络，打通VPC。打通VPC网络后，网络列表和资源池详情页面将显示VPC名称，单击后可以跳转至VPC详情页面。
   图2查看网络配置   
   ![](https://support.huaweicloud.com/usermanual-standard-modelarts/figure/zh-cn_image_0000002080832153.png "点击放大")
   
   图3打通VPC   
   ![](https://support.huaweicloud.com/usermanual-standard-modelarts/figure/zh-cn_image_0000001986182753.png "点击放大")
   
   
   
2. VPC下创建弹性云服务器
   
   登录弹性云服务器ECS控制台，单击右上角"购买弹性云服务器"，进入购买弹性云服务器页面，完成基本配置后单击"下一步：网络配置"，进入网络配置页面，选择[1]中打通的VPC，完成其他参数配置，完成高级配置并确认配置，下发购买弹性云服务器的任务。等待服务器的状态变为"运行中"时，弹性云服务器创建成功。单击"名称/ID"，进入服务器详情页面，查看虚拟私有云配置信息。
   图4购买弹性云服务器时选择VPC   
   ![](https://support.huaweicloud.com/usermanual-standard-modelarts/figure/zh-cn_image_0000002080658757.png "点击放大")
   
   图5查看虚拟私有云配置信息   
   ![](https://support.huaweicloud.com/usermanual-standard-modelarts/figure/zh-cn_image_0000002044487876.png "点击放大")
   
   
   
3. 获取在线服务的IP和端口号
   
   可以通过使用图形界面的软件（以Postman为例）获取服务的IP和端口号，也可以登录弹性云服务器（ECS），创建Python环境运行代码，获取服务IP和端口号。
   API接口：
   ```
   GET /v1/{project_id}/services/{service_id}/predict/endpoints?type=host_endpoints
   ```
   - 方式一：图形界面的软件获取服务的IP和端口号
     图6接口返回示例   
     ![](https://support.huaweicloud.com/usermanual-standard-modelarts/figure/zh-cn_image_0000001986022865.png "点击放大") 
   
   - 方式二：Python语言获取IP和端口号 Python代码如下，下述代码中以下参数需要手动修改：
     - project_id：用户项目ID，获取方法请参见[获取项目ID和名称](https://support.huaweicloud.com/api-modelarts/modelarts_03_0147.html)。
     
     - service_id：服务ID，在服务详情页可查看。
     
     - REGION_ENDPOINT：服务的终端节点，查询请参见[终端节点](https://support.huaweicloud.com/api-modelarts/modelarts_03_0141.html)。
     
     
     ```
     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访问在线服务   
     ![](https://support.huaweicloud.com/usermanual-standard-modelarts/figure/zh-cn_image_0000001986022873.png "点击放大") 
   
   
   
   - 创建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)
     ```
     
    
   ![](https://support.huaweicloud.com/usermanual-standard-modelarts/public_sys-resources/note_3.0-zh-cn.png)
   由于高速通道特性会缺失负载均衡的能力，因此在多实例时需要自主制定负载均衡策略。
   
   
 
