全部產品
Search
文件中心

Platform For AI:VPC高速直連調用

更新時間:Nov 07, 2025

VPC高速直連是一種高效能的服務調用方式,允許用戶端在Virtual Private Cloud內部繞過公用網關,直接存取EAS服務執行個體。本文介紹其工作原理、配置方法,並提供使用官方SDK調用和自行實現調用邏輯的詳細指引。

功能概述

適用情境

  • 高效能要求:對於每秒查詢數(QPS)極高的大Cellular Data Package(如映像、語音辨識),直連可以大幅提升訪問效能。

  • 低延遲敏感:對於線上推薦、金融風控等對回應時間有嚴苛要求的業務,直連能有效降低延遲。

工作原理

核心機制包括:

  • 網路連通:為服務配置專用網路後,EAS會在指定的VPC和交換器內,為每個服務執行個體建立並綁定一張免費的輔助彈性網卡,打通VPC和EAS服務執行個體之間的網路。這樣VPC內用戶端可直接存取EAS服務執行個體,而無需通過網關,避免了四層SLB和七層網路轉寄。

  • 服務發現:EAS提供服務發現機制,允許用戶端擷取服務所有執行個體的即時IP:PORT列表。用戶端可基於該列表實現負載平衡和容錯移轉。

準備工作

在調用之前,請確認已為服務配置專用網路,詳情請參見專用網路配置

  • 每個彈性網卡會佔用交換器中的一個IP地址,請確保交換器的可用IP數不小於服務執行個體數,以滿足服務執行個體的IP需求。

  • 配置安全性群組規則,實現網路隔離和存取控制。

    重要

    用戶端(如ECS)與EAS服務執行個體之間的網路訪問受安全性群組規則控制。

    • 預設普通安全性群組內,執行個體之間是內網互連的。可以在為EAS服務配置VPC高速直連時,選擇需要訪問EAS服務的ECS執行個體所在安全性群組。

    • 當需要配置使用不同的安全性群組時,請設定安全性群組的規則支援ECS執行個體之間能夠互連。詳情請參見不同安全性群組的傳統網路執行個體內網互連

通過官方SDK調用(推薦)

EAS官方SDK封裝了服務發現、負載平衡和故障重試等複雜邏輯,是實現VPC高速直連調用的首選方式。

Python SDK調用

  1. 安裝或升級SDK。

    pip install -U eas-prediction --user

    更多詳情請參見Python SDK使用說明

  2. 編寫調用代碼。

    以字串作為輸入輸出的程式樣本如下,其他格式(TensorFlow或PyTorch等)的輸入輸出的程式樣本請參見Python SDK使用說明

    #!/usr/bin/env python
    from eas_prediction import PredictClient
    from eas_prediction import StringRequest
    from eas_prediction import TFRequest
    from eas_prediction import ENDPOINT_TYPE_DIRECT
    
    # 替換為真實的地址。格式是{Uid}.vpc.{RegionId}.pai-eas.aliyuncs.com
    # Uid為阿里雲帳號UID, RegionId為EAS服務的地區
    ENDPOINT = "123**********.vpc.cn-shanghai.pai-eas.aliyuncs.com"
    # 替換為真實的EAS服務名稱
    SERVICE_NAME = "mnist_saved_model_example"
    # 替換為服務Token。可以在目標服務的詳情頁查看調用資訊來擷取。建議通過環境變數或Key Management Service(KMS)來管理和使用Token。
    TOKEN = "M2FhNjJlZDBmMzBmMzE4NjFiNzZhMmUxY2IxZjkyMDczNzAzYjFi****" 
    
    if __name__ == '__main__':
        client = PredictClient(ENDPOINT, SERVICE_NAME)
        client.set_token(TOKEN)
        client.set_endpoint_type(ENDPOINT_TYPE_DIRECT)  # 表示通過直連通道訪問服務。
        client.init()
        # request = StringRequest('[{}]')
        req = TFRequest('predict_images')
        req.add_feed('images', [1, 784], TFRequest.DT_FLOAT, [1] * 784)
        resp = client.predict(req)
        print(resp)

    其中:

    • client = PredictClient()的函數入參分別為高速直連Endpoint地址和服務的名稱。

    • 高速直連Endpoint地址:和地區綁定,格式為{Uid}.vpc.{RegionId}.pai-eas.aliyuncs.com。其中,{Uid}為阿里雲帳號UID。例如華東2(上海)地區的高速直連Endpoint地址為123**********.vpc.cn-shanghai.pai-eas.aliyuncs.com

    • TOKEN:可以在目標服務的詳情頁查看調用資訊來擷取。

Java SDK調用

  1. 添加Maven依賴。

    使用Java編寫用戶端代碼時,在Maven工程中使用EAS Java SDK,必須在pom.xml檔案<dependencies>中添加eas-sdk的依賴,樣本如下,最新版本以Maven倉庫中顯示的為準。

    <dependency>
      <groupId>com.aliyun.openservices.eas</groupId>
      <artifactId>eas-sdk</artifactId>
      <version>2.0.20</version>
    </dependency>

    更多詳情請參見Java SDK使用說明

  2. 編寫調用代碼。

    import com.aliyun.openservices.eas.predict.http.PredictClient;
    import com.aliyun.openservices.eas.predict.http.HttpConfig;
    
    public class TestString {
        public static void main(String[] args) throws Exception {
            // 為了確保client對象被正確共用,應當在啟動時建立並初始化client對象,而不是在每個請求中都建立一個新的client對象。
            PredictClient client = new PredictClient(new HttpConfig());
            // 替換為服務Token。您可以單擊目標服務的服務方式列下的調用資訊來查看Token資訊。
            client.setToken("YWFlMDYyZDNmNTc3M2I3MzMwYmY0MmYwM2Y2MTYxMTY4NzBkNzdj****");
            // 直連訪問時請使用setDirectEndpoint方法,設定123**********.vpc.{region_id}.pai-eas.aliyuncs.com的網域名稱進行訪問,其中123**********需要替換為您自己的UID。例如華東2(上海)為cn-shanghai。
            client.setDirectEndpoint("123**********.vpc.cn-shanghai.pai-eas.aliyuncs.com");
            // 替換為服務名稱。
            client.setModelName("scorecard_pmml_example");
    
            // 定義輸入字串。
            String request = "[{\"money_credit\": 3000000}, {\"money_credit\": 10000}]";
            System.out.println(request);
    
            // 通過EAS返回字串。
            try {
                String response = client.predict(request);
                System.out.println(response);
            } catch (Exception e) {
                e.printStackTrace();
            }
    
            // 關閉用戶端。
            client.shutdown();
            return;
        }
    }

Golang SDK調用

使用Golang SDK進行服務調用時,由於在編譯代碼時,Golang的包管理工具會自動從Github上將Golang SDK的代碼下載到本地,因此您無需提前安裝Golang SDK。該Golang SDK的調用詳情請參見Golang SDK使用說明

使用Golang官方SDK調用服務的方法如下:

package main

import (
        "fmt"
        "github.com/pai-eas/eas-golang-sdk/eas"
)

func main() {
    // 設定123**********.vpc.{region_id}.pai-eas.aliyuncs.com的網域名稱進行訪問,其中123**********需要替換為您自己的UID。例如華東2(上海)為cn-shanghai。請替換為目標服務所在地區和服務名稱。
    client := eas.NewPredictClient("123**********.vpc.cn-shanghai.pai-eas.aliyuncs.com", "scorecard_pmml_example")
    // 替換為服務Token。您可以單擊目標服務的服務方式列下的調用資訊來查看Token資訊。
    client.SetToken("YWFlMDYyZDNmNTc3M2I3MzMwYmY0MmYwM2Y2MTYxMTY4NzBkNzdj****")
    client.SetEndpointType(eas.EndpointTypeDirect)
    client.Init()
    req := "[{\"fea1\": 1, \"fea2\": 2}]"
    for i := 0; i < 100; i++ {
        resp, err := client.StringPredict(req)
        if err != nil {
            fmt.Printf("failed to predict: %v\n", err.Error())
        } else {
            fmt.Printf("%v\n", resp)
        }
    }
}

自行實現調用邏輯

如果需要使用其他語言或有定製化需求,可以參考如下內容自行實現HTTP調用邏輯。

警告

自行實現調用邏輯需要用戶端自行處理服務發現、負載平衡、故障重試等複雜的容錯邏輯。用戶端的實現將直接影響服務可用性。強烈建議使用官方SDK。平台SLA不覆蓋因用戶端實現不當導致的服務中斷。

服務發現API

EAS在VPC環境中提供了一個HTTP介面用於服務發現。通過訪問該介面,您可以擷取服務所有後端執行個體的IP、連接埠和權重列表。

  • URL格式http://<您的阿里雲帳號ID>.vpc.<RegionID>.pai-eas.aliyuncs.com/exported/apis/eas.alibaba-inc.k8s.io/v1/upstreams/<服務名稱>

  • 認證方式:該API無需Token認證,但僅限在為服務配置的VPC內部訪問。

  • 調用時機:此API為旁路介面,應由背景工作定期調用(例如,每5-10秒一次)。嚴禁在每次推理請求時調用此API,否則會嚴重影響效能。

調用樣本

對於部署在華東1(杭州)的mnist_saved_model_example服務(該服務有兩個Instance),調用樣本如下:

$curl http://123**********.vpc.cn-hangzhou.pai-eas.aliyuncs.com/exported/apis/eas.alibaba-inc.k8s.io/v1/upstreams/mnist_saved_model_example

注意將上述地址中的123**********替換為您自己的UID。

獲得的服務後端地址清單如下:

{
  "correlative": [
    "mnist_saved_model_example"
  ],
  "endpoints": {
    "items": [
      {
        "app": "mnist-saved-model-example",
        "ip": "172.16.XX.XX",
        "port": 50000,
        "weight": 100
      },
      {
        "app": "mnist-saved-model-example",
        "ip": "172.16.XX.XX",
        "port": 50000,
        "weight": 100
      }
    ]
  }
}

實現邏輯詳解

一個健壯的自訂用戶端調用應包含以下三個核心邏輯:

  1. 本機快取執行個體列表並定時重新整理

    重要

    服務探索服務是一個旁路的服務,不可在每次發起推理請求時調用服務發現API。

    用戶端啟動一個後台線程,定時(建議每5-10秒)調用服務發現API。

    • 成功時:當HTTP狀態代碼為200且返回的執行個體列表不為空白時,用新列表覆蓋本機快取。

    • 失敗時:當API調用失敗(如逾時、返回非200狀態代碼)或返回空列表時,必須沿用本機快取切勿清空,以保證服務的可用性。

  2. 請求時負載平衡

    每次發起推理請求時,根據本機快取的執行個體列表選擇一個目標執行個體。建議採用加權輪詢(Weighted Round Robin)等演算法,也可根據自己的商務邏輯來進行選擇。

  3. 失敗重試

    發起請求時,如遇串連失敗等情況,則表示服務執行個體可能發生異常(如使用者執行個體發生crash等),用戶端需要進行重試。在本機快取中執行個體數多於1的情況下,重新從緩衝中擷取一個不同的執行個體進行重試。

完整的實現流程,請參見Python SDK的實現

相關文檔

更多的服務調用方式,請參見調用方式概覽