Tous les produits
Search
Centre de documentation

Platform For AI:Appeler un service via une connexion directe VPC

Dernière mise à jour :Aug 09, 2026

Connectez directement les clients aux instances de service au sein d'un VPC, en contournant la redirection par passerelle pour réduire la latence.

Fonctionnement

EAS crée une interface réseau élastique (ENI) gratuite pour chaque instance de service et l'attache au VPC et au vSwitch que vous spécifiez, établissant ainsi un chemin réseau direct sans redirection par passerelle.

EAS fournit une API de découverte de service qui renvoie en temps réel des paires IP:PORT pour toutes les instances de service. Les clients interrogent cette API pour mettre en œuvre l'équilibrage de charge et le basculement.

VPC direct connection architecture

Prérequis

Effectuez les tâches suivantes avant d'appeler un service via une connexion directe VPC :

  • Déployez un service EAS avec la connexion directe VPC activée. Pour plus de détails, consultez la rubrique Configuration réseau.

  • Assurez-vous que le vSwitch dispose de suffisamment d'adresses IP disponibles. Chaque ENI nécessite une adresse IP. Le nombre d'IP disponibles doit être supérieur ou égal au nombre d'instances.

  • Configurez les règles du groupe de sécurité pour autoriser le trafic entre les clients et les instances de service.

Important

Les règles du groupe de sécurité contrôlent l'accès réseau entre les clients (tels que les instances ECS) et les instances de service :

Format du point de terminaison

Les points de terminaison de connexion directe VPC respectent le format suivant :

{Uid}.vpc.{RegionId}.pai-eas.aliyuncs.com
Paramètre Description Exemple
{Uid} ID du compte Alibaba Cloud 123**********
{RegionId} Région où le service est déployé cn-shanghai

Exemple : 123**********.vpc.cn-shanghai.pai-eas.aliyuncs.com

Appeler le service à l'aide des SDK (recommandé)

Les SDK EAS gèrent automatiquement la découverte de service, l'équilibrage de charge et les nouvelles tentatives en cas de basculement. Utilisez un SDK pour des appels fiables via une connexion directe VPC.

Python SDK

  1. Installez ou mettez à niveau le SDK :

       pip install -U eas-prediction --user
  2. Appelez le service en utilisant le format de requête TensorFlow. Pour les autres formats, consultez le Guide du SDK Python.

    Le constructeur PredictClient nécessite le point de terminaison de connexion directe VPC et le nom du service. Appelez set_endpoint_type(ENDPOINT_TYPE_DIRECT) pour activer la connexion directe VPC, puis appelez init() pour initialiser.
       #!/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
    
       # VPC direct connection endpoint: {Uid}.vpc.{RegionId}.pai-eas.aliyuncs.com
       # Replace with your account ID and region
       ENDPOINT = "123**********.vpc.cn-shanghai.pai-eas.aliyuncs.com"
    
       # Replace with your EAS service name
       SERVICE_NAME = "mnist_saved_model_example"
    
       # Replace with your service token from the service details page
       # Store tokens in environment variables or KMS, not in code
       TOKEN = "M2FhNjJlZDBmMzBmMzE4NjFiNzZhMmUxY2IxZjkyMDczNzAzYjFi****"
    
       if __name__ == '__main__':
           client = PredictClient(ENDPOINT, SERVICE_NAME)
           client.set_token(TOKEN)
           client.set_endpoint_type(ENDPOINT_TYPE_DIRECT)  # Enable VPC direct connection
           client.init()
    
           req = TFRequest('predict_images')
           req.add_feed('images', [1, 784], TFRequest.DT_FLOAT, [1] * 784)
           resp = client.predict(req)
           print(resp)

Java SDK

  1. Ajoutez la dépendance Maven au fichier pom.xml. Pour obtenir la dernière version, consultez le dépôt Maven. Pour plus de détails, voir le Guide du SDK Java.

       <dependency>
         <groupId>com.aliyun.openservices.eas</groupId>
         <artifactId>eas-sdk</artifactId>
         <version>2.0.20</version>
       </dependency>
  2. Appelez le service.

       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 {
               // Create and initialize the client once at startup
               // Do not create a new client for each request
               PredictClient client = new PredictClient(new HttpConfig());
    
               // Replace with your service token from the service details page
               client.setToken("YWFlMDYyZDNmNTc3M2I3MzMwYmY0MmYwM2Y2MTYxMTY4NzBkNzdj****");
    
               // Set VPC direct connection endpoint: {Uid}.vpc.{RegionId}.pai-eas.aliyuncs.com
               // Replace with your account ID and region
               client.setDirectEndpoint("123**********.vpc.cn-shanghai.pai-eas.aliyuncs.com");
    
               // Replace with your EAS service name
               client.setModelName("scorecard_pmml_example");
    
               // Define input string
               String request = "[{\"money_credit\": 3000000}, {\"money_credit\": 10000}]";
               System.out.println(request);
    
               // Send prediction request
               try {
                   String response = client.predict(request);
                   System.out.println(response);
               } catch (Exception e) {
                   e.printStackTrace();
               }
    
               // Shut down client when finished
               client.shutdown();
           }
       }

Go SDK

Le gestionnaire de packages Go télécharge automatiquement le SDK lors de la compilation. Pour plus de détails, consultez le Guide du SDK Go.

package main

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

func main() {
    // VPC direct connection endpoint: {Uid}.vpc.{RegionId}.pai-eas.aliyuncs.com
    // Replace with your account ID, region, and service name
    client := eas.NewPredictClient("123**********.vpc.cn-shanghai.pai-eas.aliyuncs.com", "scorecard_pmml_example")

    // Replace with your service token from the service details page
    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)
        }
    }
}

Créer un client personnalisé

Si les SDK ne répondent pas à vos besoins, implémentez vous-même la logique d'invocation HTTP.

Avertissement

Les clients personnalisés doivent gérer la découverte de service, l'équilibrage de charge et les nouvelles tentatives en cas de basculement. Une mauvaise implémentation affecte directement la disponibilité du service. Le SLA de la plateforme ne couvre pas les interruptions de service causées par des implémentations de clients personnalisés. Utilisez un SDK chaque fois que possible.

API de découverte de service

EAS fournit une API HTTP pour la découverte de service au sein du VPC configuré. L'API renvoie les adresses IP, les ports et les poids de toutes les instances backend d'un service.

Propriété Détails
URL http://{Uid}.vpc.{RegionId}.pai-eas.aliyuncs.com/exported/apis/eas.alibaba-inc.k8s.io/v1/upstreams/{ServiceName}
Authentification Aucune authentification requise. Accessible uniquement depuis le VPC configuré.
Intervalle d'interrogation Appelez l'API toutes les 5 à 10 secondes depuis un thread d'arrière-plan.
Important

L'API de découverte de service est un service d'arrière-plan. Ne l'appelez pas pour chaque requête d'inférence, car des appels fréquents dégradent considérablement les performances.

Exemple de requête :

Cet exemple interroge un service nommé mnist_saved_model_example déployé en Chine (Hangzhou). Remplacez 123********** par votre ID de compte.

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

Exemple de réponse :

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

Exigences d'implémentation

Des clients personnalisés fiables doivent inclure trois composants principaux :

Mettre en cache la liste des instances et actualiser périodiquement

Démarrez un thread d'arrière-plan qui interroge l'API de découverte de service toutes les 5 à 10 secondes.

  • En cas de succès (HTTP 200 avec une liste d'instances non vide) : Écrasez le cache local avec la nouvelle liste.

  • En cas d'échec (délai dépassé, statut différent de 200 ou liste vide) : Continuez à utiliser le cache local. Ne videz pas le cache. Cela préserve la disponibilité du service lors de pannes transitoires.

Équilibrer la charge des requêtes entre les instances

Lors de l'envoi d'une requête, sélectionnez une instance cible à partir du cache local. Utilisez un algorithme tel que le round-robin pondéré, ou sélectionnez les instances en fonction de la logique métier.

Retenter les requêtes ayant échoué sur différentes instances

Si la connexion à une instance échoue (par exemple, en raison d'un crash de l'instance), retentez la requête. Si le cache local contient plusieurs instances, sélectionnez une autre instance pour la nouvelle tentative.

Pour une implémentation de référence complète, consultez le code source du SDK Python.

Références