日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

VPC高速直連調用

EAS支持通過Python官方SDK或自行實現調用邏輯的方式對服務進行VPC高速直連調用。本文詳細介紹這兩種調用方式的實現方法。

調用原理

VPC高速直連調用、公網調用及VPC地址調用的鏈路如下圖所示。

image

開啟服務運行所在資源組的VPC高速直連功能后,EAS會在您指定的安全組內綁定輔助網卡,打通您的VPC和EAS服務實例之間的網絡。之后您可以在自己的VPC中直接訪問EAS實例,無需通過網關訪問服務,避免了四層SLB和七層網絡轉發。同時,EAS預置的RPC實現了HTTP相關協議棧,對于高QPS(Queries Per Second)的大流量服務(例如圖像服務),可以大幅度提高訪問性能、降低訪問延時。

前提條件

如果您使用專屬資源組部署服務,則部署服務前,需要為專屬資源組開通VPC高速直連功能,詳情請參見配置網絡連通。

重要

安全組控制ECS實例機器的出入流量,用戶的ECS實例和EAS服務實例之間的網絡互通也受安全組的配置控制。默認普通安全組內,實例之間是內網互通的,您可以在配置VPC高速直連時,選擇需要訪問在線服務的ECS實例所在安全組,從而支持實例之間網絡互通。當需要配置使用不同的安全組時,請設置安全組的規則支持ECS實例之間能夠互通。

調用方式

為方便用戶調用服務,EAS提供了以下兩種方式實現VPC高速直連調用:

  • 使用官方SDK調用

    EAS封裝了調用邏輯并提供了Python SDK、Java SDK和Golang SDK的調用方法,您可以直接使用SDK實現VPC高速直連調用。

  • 自行實現調用邏輯

    推薦使用官方SDK調用服務,從而有效減少編寫調用邏輯的時間并提高服務調用穩定性。如果您需要使用其他語言或希望自己編寫實現調用邏輯,下文也提供了方法指導供您參考。此外,自行實現調用邏輯需要根據不同框架構建服務請求,詳情請參見構建通用Processor服務請求。

使用官方SDK調用

Python SDK調用

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

  1. 安裝。

    pip install -U eas-prediction --user

    該Python SDK的調用詳情請參見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
    if __name__ == '__main__':
        client = PredictClient('http://pai-eas-vpc.cn-shanghai.aliyuncs.com', 'mnist_saved_model_example')
        # 替換為服務Token。您可以單擊目標服務的服務方式列下的調用信息來查看Token信息。
        client.set_token('M2FhNjJlZDBmMzBmMzE4NjFiNzZhMmUxY2IxZjkyMDczNzAzYjFi****')
        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)
        for x in range(0, 1000000):
            resp = client.predict(req)
            print(resp)
    

    其中client = PredictClient()的函數入參分別為高速直連Endpoint地址(endpoint參數),服務的名稱(service_name參數)。高速直連Endpoint地址和地域綁定的,他的格式是pai-eas-vpc.{RegionId}.aliyuncs.com,例如華東2(上海)地域的高速直連Endpoint地址為pai-eas-vpc.cn-shanghai.aliyuncs.com

Java SDK調用

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

  1. 添加依賴項,EAS SDK的最新版本以Maven倉庫中顯示的為準。

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

    該Java SDK的調用詳情請參見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方法,設置pai-eas-vpc.{region_id}.aliyuncs.com的域名進行訪問,例如華東2(上海)為cn-shanghai。
            client.setDirectEndpoint("pai-eas-vpc.cn-shanghai.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() {
    // 設置pai-eas-vpc.{region_id}.aliyuncs.com的域名進行訪問,例如華東2(上海)為cn-shanghai。請替換為目標服務所在地域和服務名稱。
    client := eas.NewPredictClient("pai-eas-vpc.cn-shanghai.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)
        }
    }
}

自行實現調用邏輯

推薦您使用PAI提供的官方SDK來進行直連訪問,如果您有特殊業務場景的需求,需要使用其他語言或希望自己編寫調用邏輯,則可以參見如下方法,自行實現直連訪問功能,采用HTTP接口調用。EAS提供服務發現機制,在VPC環境中,通過如下地址即可獲得服務的后端地址列表。

地域

地址

華東2(上海)

http://pai-eas-vpc.cn-shanghai.aliyuncs.com/exported/apis/eas.alibaba-inc.k8s.io/v1/upstreams/

華北2(北京)

http://pai-eas-vpc.cn-beijing.aliyuncs.com/exported/apis/eas.alibaba-inc.k8s.io/v1/upstreams/

華東1(杭州)

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

例如訪問華東1(杭州)的mnist_saved_model_example服務(該服務有兩個Instance),示例如下。

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

獲得的服務后端地址列表如下。

{
  "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
      }
    ]
  }
}

如上所示,通過服務發現可以獲得客戶模型服務mnist_saved_model_example的兩個實例的ip、portweight信息。相關的IP在用戶部署服務時選擇的VPC中即可直接連通。

對于通過服務發現來進行直連訪問的方法請參考如下步驟:

  1. 客戶端代碼中建立后臺線程,定時訪問上述的服務發現服務,建議每5秒訪問一次,獲取當前服務最新的實例列表,并將其保存在本地緩存中。

  2. 在發起推理請求時,從本地緩存中獲取一個實例IP+端口發起訪問,可使用Weighted Round Robin算法進行獲取,也可根據自己的業務邏輯來進行選擇。

  3. 發起請求時,如遇連接失敗等情況,則表示服務實例可能發生異常(如用戶實例發生crash等),客戶端需要進行重試,重新從緩存中獲取一個新的實例,在本地緩存中實例數多于1的情況下,新IP+Port組合應該避免與已經失敗的IP+Port相同,即確保更換一個實例進行重試。

重要

在使用服務發現進行直連訪問時,請遵循下面幾條原則,否則可能導致服務訪問異常:

  1. 服務發現服務是一個旁路的服務,不可在每次發起請求時對服務發現服務進行請求。

  2. 訪問服務發現服務時,在返回狀態碼為200且返回實例數不為空時,再更新緩存,返回非200時,千萬不能清空緩存。

  3. 直連的方式負載均衡和重試邏輯都需要在客戶端側完成,穩定性依賴客戶端實現,平臺側不負責直連場景的客戶端請求容錯,在實現時請嚴格遵循上述的步驟來實現容錯邏輯,否則平臺側無法保障SLA。

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

相關文檔

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