Koneksi langsung VPC adalah metode pemanggilan layanan berkinerja tinggi yang memungkinkan klien dalam virtual private cloud (VPC) melewati gerbang publik dan langsung mengakses instans layanan EAS. Topik ini menjelaskan cara kerja koneksi langsung VPC, cara mengonfigurasinya, serta cara memanggil layanan menggunakan SDK resmi atau menerapkan logika pemanggilan kustom.
Ikhtisar fungsi
Skenario
Persyaratan berkinerja tinggi: Untuk layanan dengan lalu lintas tinggi dan banyak permintaan per detik (QPS), seperti layanan pengenalan citra atau ucapan, koneksi langsung dapat secara signifikan meningkatkan kinerja akses.
Sensitivitas latensi rendah: Untuk layanan yang memiliki persyaratan ketat terhadap waktu tanggapan, seperti rekomendasi daring dan kontrol risiko keuangan, koneksi langsung dapat secara efektif mengurangi latensi.
Cara kerja
Mekanisme intinya mencakup:
Konektivitas jaringan: Setelah Anda mengonfigurasi VPC untuk suatu layanan, EAS membuat antarmuka jaringan elastis (ENI) tambahan gratis untuk setiap instans layanan dan menyambungkannya ke VPC dan vSwitch yang ditentukan. Hal ini membangun koneksi jaringan antara VPC Anda dan instans layanan EAS. Dengan demikian, klien dalam VPC dapat langsung mengakses instans layanan EAS tanpa melewati gerbang, sehingga menghindari penerusan jaringan SLB Lapisan 4 dan Lapisan 7.
Penemuan layanan: EAS menyediakan mekanisme penemuan layanan yang memungkinkan klien memperoleh daftar real-time pasangan
IP:PORTuntuk semua instans layanan. Berdasarkan daftar ini, klien dapat menerapkan load balancing dan failover.
Persiapan
Sebelum memanggil layanan, pastikan Anda telah mengonfigurasi VPC untuk layanan tersebut. Untuk informasi selengkapnya, lihat Konfigurasi jaringan.
Setiap ENI menempati satu alamat IP di vSwitch. Pastikan jumlah alamat IP yang tersedia di vSwitch lebih besar dari atau sama dengan jumlah instans layanan agar memenuhi kebutuhan alamat IP.
Tambahkan aturan grup keamanan untuk menerapkan isolasi jaringan dan kontrol akses.
PentingAkses jaringan antara klien, seperti Instance ECS, dan instans layanan EAS dikendalikan oleh aturan grup keamanan.
Secara default, instans dalam kelompok keamanan dasar dapat saling berkomunikasi melalui jaringan internal. Saat Anda mengonfigurasi koneksi langsung VPC untuk layanan EAS, Anda dapat memilih grup keamanan tempat Instance ECS yang perlu mengakses layanan EAS berada.
Untuk menggunakan grup keamanan yang berbeda, Anda harus mengatur aturan grup keamanan agar memungkinkan komunikasi antar Instance ECS. Untuk informasi selengkapnya, lihat Mengizinkan akses antar instans dalam grup keamanan berbeda di jaringan klasik.
Pemanggilan menggunakan SDK resmi (Direkomendasikan)
SDK resmi EAS mengenkapsulasi logika kompleks, seperti penemuan layanan, load balancing, dan retry failover. Kami menyarankan Anda menggunakan metode ini untuk memanggil layanan melalui koneksi langsung VPC.
Pemanggilan menggunakan Python SDK
Instal atau tingkatkan SDK.
pip install -U eas-prediction --userUntuk informasi selengkapnya, lihat Menggunakan Python SDK.
Tulis kode pemanggilan.
Kode berikut memberikan contoh program yang menggunakan string sebagai input dan output. Untuk contoh program yang menggunakan format input dan output lainnya, seperti TensorFlow atau PyTorch, lihat Menggunakan 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 # Ganti dengan titik akhir yang sebenarnya. Formatnya adalah {Uid}.vpc.{RegionId}.pai-eas.aliyuncs.com # Uid adalah ID akun Alibaba Cloud Anda, dan RegionId adalah wilayah layanan EAS. ENDPOINT = "123**********.vpc.cn-shanghai.pai-eas.aliyuncs.com" # Ganti dengan nama layanan EAS yang sebenarnya. SERVICE_NAME = "mnist_saved_model_example" # Ganti dengan token layanan. Anda dapat memperoleh token dari informasi pemanggilan di halaman detail layanan. Kami menyarankan agar Anda mengelola dan menggunakan token melalui Variabel lingkungan atau Key Management Service (KMS). TOKEN = "M2FhNjJlZDBmMzBmMzE4NjFiNzZhMmUxY2IxZjkyMDczNzAzYjFi****" if __name__ == '__main__': client = PredictClient(ENDPOINT, SERVICE_NAME) client.set_token(TOKEN) client.set_endpoint_type(ENDPOINT_TYPE_DIRECT) # Menentukan bahwa layanan diakses melalui saluran koneksi langsung. 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)Catatan:
Parameter input fungsi
client = PredictClient()adalah Titik akhir koneksi langsung VPC dan nama layanan.Titik akhir koneksi langsung VPC: Ini terikat pada suatu wilayah dan memiliki format
{Uid}.vpc.{RegionId}.pai-eas.aliyuncs.com.{Uid}adalah ID akun Alibaba Cloud Anda. Sebagai contoh, Titik akhir koneksi langsung VPC di wilayah Tiongkok (Shanghai) adalah123**********.vpc.cn-shanghai.pai-eas.aliyuncs.com.TOKEN: Anda dapat memperoleh token dari informasi pemanggilan di halaman detail layanan.
Pemanggilan menggunakan Java SDK
Tambahkan dependensi Maven.
Untuk mengintegrasikan SDK EAS untuk Java ke dalam proyek Anda, tambahkan dependensi eas-sdk dalam file pom.xml. Untuk informasi versi terbaru SDK, kunjungi Repositori Maven. Contoh kode:
<dependency> <groupId>com.aliyun.openservices.eas</groupId> <artifactId>eas-sdk</artifactId> <version>2.0.20</version> </dependency>Untuk informasi selengkapnya, lihat Menggunakan Java SDK.
Tulis kode pemanggilan.
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 { // Untuk memastikan objek klien dibagikan dengan benar, buat dan inisialisasi objek klien saat startup, bukan membuat objek klien baru untuk setiap permintaan. PredictClient client = new PredictClient(new HttpConfig()); // Ganti dengan token layanan. Anda dapat mengklik Metode Pemanggilan di kolom Jenis Layanan layanan target untuk melihat informasi token. client.setToken("YWFlMDYyZDNmNTc3M2I3MzMwYmY0MmYwM2Y2MTYxMTY4NzBkNzdj****"); // Untuk akses langsung, gunakan metode setDirectEndpoint dan atur nama domain menjadi 123**********.vpc.{region_id}.pai-eas.aliyuncs.com. Ganti 123********** dengan UID Anda. Sebagai contoh, ID wilayah untuk Tiongkok (Shanghai) adalah cn-shanghai. client.setDirectEndpoint("123**********.vpc.cn-shanghai.pai-eas.aliyuncs.com"); // Ganti dengan nama layanan. client.setModelName("scorecard_pmml_example"); // Definisikan string input. String request = "[{\"money_credit\": 3000000}, {\"money_credit\": 10000}]"; System.out.println(request); // Mengembalikan string melalui EAS. try { String response = client.predict(request); System.out.println(response); } catch (Exception e) { e.printStackTrace(); } // Matikan klien. client.shutdown(); return; } }
Pemanggilan menggunakan Golang SDK
Saat Anda memanggil layanan menggunakan Golang SDK, manajer paket Go secara otomatis mengunduh SDK dari GitHub selama kompilasi. Oleh karena itu, Anda tidak perlu menginstal Golang SDK terlebih dahulu. Untuk informasi selengkapnya, lihat Panduan Golang SDK.
Kode berikut menunjukkan cara memanggil layanan menggunakan Golang SDK resmi:
package main
import (
"fmt"
"github.com/pai-eas/eas-golang-sdk/eas"
)
func main() {
// Atur nama domain menjadi 123**********.vpc.{region_id}.pai-eas.aliyuncs.com untuk akses. Ganti 123********** dengan UID Anda. Sebagai contoh, ID wilayah untuk Tiongkok (Shanghai) adalah cn-shanghai. Ganti wilayah dan nama layanan dengan layanan target Anda.
client := eas.NewPredictClient("123**********.vpc.cn-shanghai.pai-eas.aliyuncs.com", "scorecard_pmml_example")
// Ganti dengan token layanan. Anda dapat mengklik Metode Pemanggilan di kolom Jenis Layanan layanan target untuk melihat informasi 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("gagal memprediksi: %v\n", err.Error())
} else {
fmt.Printf("%v\n", resp)
}
}
}Terapkan logika pemanggilan kustom
Jika Anda ingin menggunakan bahasa lain atau memiliki persyaratan khusus, Anda dapat merujuk pada konten berikut untuk menerapkan logika pemanggilan HTTP sendiri.
Penerapan logika pemanggilan kustom mengharuskan klien menangani logika toleransi kesalahan yang kompleks, seperti penemuan layanan, load balancing, dan retry failover. Implementasi klien secara langsung memengaruhi ketersediaan layanan. Kami sangat menyarankan Anda menggunakan SDK resmi. Perjanjian Tingkat Layanan (SLA) platform tidak mencakup gangguan layanan yang disebabkan oleh implementasi klien yang tidak tepat.
API penemuan layanan
EAS menyediakan API HTTP untuk penemuan layanan di lingkungan VPC. Dengan mengakses API ini, Anda dapat memperoleh daftar alamat IP, port, dan bobot semua instans backend untuk suatu layanan.
Format URL:
http://<ID akun Alibaba Cloud Anda>.vpc.<RegionID>.pai-eas.aliyuncs.com/exported/apis/eas.alibaba-inc.k8s.io/v1/upstreams/<Nama layanan>Metode autentikasi: API ini tidak memerlukan autentikasi token, tetapi hanya dapat diakses dari dalam VPC yang dikonfigurasi untuk layanan tersebut.
Waktu pemanggilan: Ini adalah API bypass dan harus dipanggil secara berkala oleh tugas latar belakang, misalnya setiap 5 hingga 10 detik. Jangan memanggil API ini untuk setiap permintaan inferensi. Hal ini sangat berdampak pada kinerja.
Contoh pemanggilan:
Contoh berikut menunjukkan cara memanggil layanan mnist_saved_model_example, yang memiliki dua instans dan diterapkan di Tiongkok (Hangzhou):
$curl http://123**********.vpc.cn-hangzhou.pai-eas.aliyuncs.com/exported/apis/eas.alibaba-inc.k8s.io/v1/upstreams/mnist_saved_model_examplePastikan untuk mengganti 123********** dalam alamat dengan UID Anda.
Kode berikut menunjukkan daftar alamat layanan backend yang dikembalikan:
{
"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
}
]
}
}Logika implementasi terperinci
Pemanggilan klien kustom yang andal harus mencakup tiga komponen inti berikut:
Cache daftar instans secara lokal dan segarkan secara berkala
PentingLayanan penemuan layanan adalah layanan bypass. Jangan memanggil API penemuan layanan untuk setiap permintaan inferensi.
Klien memulai thread latar belakang yang secara berkala memanggil API penemuan layanan, misalnya setiap 5 hingga 10 detik.
Jika berhasil: Ketika kode status HTTP adalah 200 dan daftar instans yang dikembalikan tidak kosong, timpa cache lokal dengan daftar baru.
Jika gagal: Jika pemanggilan API gagal, misalnya karena timeout atau kode status bukan 200, atau jika pemanggilan mengembalikan daftar kosong, Anda harus tetap menggunakan cache lokal. Jangan menghapus cache. Hal ini memastikan ketersediaan layanan.
Menyeimbangkan beban permintaan
Setiap kali Anda memulai permintaan inferensi, pilih instans target dari cache lokal. Kami menyarankan Anda menggunakan algoritma seperti Round-robin berbobot. Anda juga dapat memilih instans berdasarkan logika bisnis Anda.
Retry saat gagal
Jika koneksi gagal saat Anda memulai permintaan, hal ini menunjukkan bahwa instans layanan mungkin tidak normal, misalnya instans pengguna crash. Klien perlu melakukan retry. Jika cache lokal berisi lebih dari satu instans, ambil instans berbeda dari cache dan coba ulang permintaan tersebut.
Untuk alur implementasi lengkap, lihat implementasi Python SDK.
Referensi
Untuk informasi selengkapnya tentang metode pemanggilan layanan lainnya, lihat Ikhtisar metode pemanggilan.