全部產品
Search
文件中心

Platform For AI:VPC高速直連調用

更新時間:Jul 02, 2026

VPC高速直連允許用戶端在Virtual Private Cloud內繞過公用網關,直接存取EAS服務執行個體,適用於高QPS、低延遲的推理情境。您可以使用官方SDK調用,也可以自行實現調用邏輯。

功能概述

適用情境

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

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

工作原理

VPC高速直連基於以下兩點實現:

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

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

準備工作

在調用之前,請確認已為服務配置專用網路,詳情參見EAS訪問公網或內網資源

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

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

    重要

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

    • 普通安全性群組預設組內內網互連,故可以直接讓用戶端和EAS服務使用同一普通安全性群組。

    • 若用戶端和EAS服務需使用不同安全性群組,請設定安全性群組規則實現互連。詳情參見不同安全性群組的執行個體內網互連

通過官方SDK調用(推薦)

核心邏輯

VPC高速直連情境下,用戶端繞過網關直接存取服務執行個體,需自行處理服務發現、負載平衡和故障重試。EAS官方SDK已封裝這三項邏輯:

  • 服務發現:SDK在初始化時啟動後台線程,定期調用EAS服務發現API,擷取後端執行個體的IP:PORT和權重列表,緩衝到用戶端本地。API失敗時沿用上一次緩衝,保證可用性。

  • 負載平衡:每次發起請求時,SDK從本地執行個體緩衝中按加權輪詢(Weighted Round Robin)演算法選擇一個目標執行個體,權重由服務發現API返回的執行個體權重決定。

  • 故障重試:當請求失敗(網路異常、連線逾時、5xx響應)時,SDK從本機快取中重新選擇一個不同的執行個體進行重試。在多執行個體情境下,可避免單一實例異常導致請求失敗。

如果您計劃自行實現調用邏輯而不使用SDK,需要參考自行實現調用邏輯實現等價能力。

調用樣本

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依賴。

    在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調用時,編譯代碼時包管理工具會自動從Github下載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
      }
    ]
  }
}

實現要點

自行實現用戶端調用邏輯時,您需要在用戶端處理服務發現、負載平衡和故障重試。完整的實現樣本可參考Python SDK源碼。下面是實現時需要特別注意的事項:

  1. 本機快取執行個體列表並定時重新整理:啟動後台線程,定時(建議每5-10秒)調用服務發現API,將返回的執行個體列表覆蓋到本機快取。

    重要

    服務發現是旁路服務,嚴禁在每次推理請求時調用。API失敗或返回空列表時,必須沿用本機快取,切勿清空,否則服務不可用。

  2. 請求時負載平衡:每次發起推理請求時從本機快取中選擇一個執行個體,建議使用加權輪詢演算法,也可根據商務邏輯自訂。

  3. 失敗重試:請求出現串連失敗、逾時或5xx響應時,從本機快取中選擇一個不同的執行個體重試(要求執行個體數大於1才能切換)。

相關文檔

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