Koneksi langsung VPC merupakan metode berkinerja tinggi untuk memanggil layanan. Metode ini memungkinkan klien di dalam Virtual Private Cloud (VPC) melewati gateway publik dan mengakses instans layanan PAI-EAS secara langsung. Topik ini menjelaskan cara kerjanya, prosedur konfigurasinya, serta memberikan panduan terperinci untuk memanggil layanan menggunakan SDK resmi atau membangun klien kustom.
Ikhtisar
Kasus penggunaan
Kebutuhan berkinerja tinggi: Untuk layanan dengan trafik tinggi dan jumlah permintaan per detik (QPS) besar, seperti pengenalan gambar atau ucapan, koneksi langsung dapat meningkatkan kinerja akses secara signifikan.
Aplikasi yang sensitif terhadap latensi: Untuk layanan yang membutuhkan waktu respons cepat, seperti rekomendasi online dan pengendalian risiko keuangan, koneksi langsung dapat mengurangi latensi secara efektif.
Cara kerja
Koneksi langsung VPC mengandalkan dua mekanisme:
Konektivitas jaringan: Setelah Anda mengonfigurasi VPC untuk suatu layanan, PAI-EAS membuat dan menyambungkan antarmuka jaringan elastis tambahan gratis untuk setiap instans layanan di dalam VPC dan vSwitch yang ditentukan. Hal ini membangun jalur jaringan langsung antara VPC dan instans layanan PAI-EAS. Akibatnya, klien di dalam VPC dapat langsung mengakses instans layanan PAI-EAS tanpa melewati gateway, sehingga menghindari penerusan jaringan SLB Lapisan 4 dan Lapisan 7.
Penemuan layanan: PAI-EAS menyediakan mekanisme penemuan layanan yang memungkinkan klien mengambil daftar real-time pasangan
IP:PORTuntuk semua instans layanan. Klien dapat menggunakan daftar ini untuk menerapkan load balancing dan failover.
Akses cross-region dan penagihan
T: Apa perbedaan antara akses internal VPC cross-region dan akses jaringan publik?
Perbedaan utamanya bergantung pada jenis gateway Anda:
Dedicated gateway: Selain menetapkan konektivitas VPC, Anda harus melakukan langkah konfigurasi tambahan terkait CEN di PAI-EAS. Untuk informasi lebih lanjut, lihat Akses cross-VPC ke dedicated gateway menggunakan CEN.
T: Apakah akses internal VPC cross-region dikenai biaya trafik? Mengapa tetap direkomendasikan?
Ya, trafik jaringan internal cross-region dikenai biaya. Meski demikian, akses internal VPC tetap direkomendasikan untuk lingkungan produksi karena alasan berikut:
Keamanan: Trafik tidak melewati internet publik, sehingga menghilangkan risiko eksposur publik.
Kinerja: Latensi lebih rendah dan koneksi lebih stabil dibandingkan akses jaringan publik.
Efisiensi biaya: Biaya trafik jaringan internal cross-region umumnya lebih rendah daripada biaya egress jaringan publik.
Prasyarat
Sebelum memulai, pastikan Anda telah mengonfigurasi VPC untuk layanan Anda. Untuk informasi lebih lanjut, lihat Konfigurasi jaringan.
Setiap antarmuka jaringan elastis mengonsumsi satu alamat IP dari vSwitch. Pastikan vSwitch memiliki cukup alamat IP yang tersedia untuk semua instans layanan.
Konfigurasikan aturan security group untuk mengelola isolasi jaringan dan kontrol akses.
PentingAturan security group mengontrol akses jaringan antara klien, seperti Instance ECS, dan layanan PAI-EAS.
Secara default, instans dalam kelompok keamanan dasar yang sama dapat saling berkomunikasi melalui jaringan internal. Anda dapat menempatkan klien dan layanan PAI-EAS dalam security group yang sama.
Jika klien dan layanan PAI-EAS harus menggunakan security group berbeda, Anda harus mengonfigurasi aturan untuk mengizinkan komunikasi di antara keduanya. Untuk informasi lebih lanjut, lihat Izinkan akses antar instans dalam security group berbeda di jaringan klasik.
Konfigurasi titik akhir stabil untuk layanan multi-replika
Saat layanan Anda diskalakan menjadi beberapa replika, alamat IP instans backend dapat berubah. Gunakan pendekatan berikut untuk mempertahankan alamat koneksi yang stabil.
Prinsip dasar: PAI-EAS menggunakan SLB (Server Load Balancer) untuk mengekspos Service Endpoint terpadu untuk setiap layanan. Terlepas dari jumlah replika backend yang berjalan, klien hanya perlu terhubung ke alamat tunggal ini — Anda tidak perlu melacak perubahan IP instans individual.
Opsi 1 (Direkomendasikan): Gunakan domain publik dengan daftar izin IP backend. Konfigurasikan backend agar hanya mengizinkan trafik dari rentang IP VPC peer Anda. Pendekatan ini menyediakan alamat domain stabil tanpa konfigurasi DNS tambahan.
Opsi 2: Konfigurasikan Alibaba Cloud PrivateZone di VPC peer Anda untuk mengarahkan domain kustom ke alamat IP pribadi PAI-EAS. Perhatikan bahwa jika alamat IP berubah, Anda harus memperbarui rekaman DNS atau mengintegrasikan mekanisme penemuan layanan agar resolusi tetap mutakhir.
Memanggil layanan EAS lain dari kontainer EAS
Jika layanan EAS Anda perlu memanggil layanan EAS lain dari dalam kontainernya, perhatikan hal berikut:
Error 401 atau kegagalan koneksi: Biasanya terjadi ketika aplikasi kontainer memanggil layanan EAS lain menggunakan titik akhir publik. Penyebab umumnya adalah pembatasan jaringan di lingkungan kontainer atau konfigurasi token yang salah.
Pendekatan yang direkomendasikan: Gunakan alamat internal VPC untuk pemanggilan antar layanan. Hal ini menjamin konektivitas dan meningkatkan keamanan.
Alternatif: Jika Anda harus menggunakan titik akhir publik, konfigurasikan dedicated gateway. Perhatikan bahwa hal ini melibatkan biaya ALB tambahan.
Persyaratan autentikasi: Terlepas dari jenis alamat yang digunakan, setiap permintaan harus menyertakan token Authorization yang valid di header permintaan.
Panggil layanan menggunakan SDK resmi (Direkomendasikan)
Logika inti
Saat menggunakan koneksi langsung VPC, klien melewati gateway dan terhubung langsung ke instans layanan. Artinya, klien bertanggung jawab menangani penemuan layanan, load balancing, dan retry failover. SDK resmi PAI-EAS mengenkapsulasi logika ini untuk Anda:
Penemuan layanan: SDK memulai thread latar belakang saat inisialisasi untuk secara berkala memanggil API penemuan layanan PAI-EAS. SDK mengambil dan menyimpan cache daftar pasangan
IP:PORTdan bobot instans backend. Jika pemanggilan API gagal, SDK tetap menggunakan daftar cache terakhir untuk memastikan ketersediaan.Load balancing: Untuk setiap permintaan, SDK memilih instans target dari cache lokal menggunakan algoritma Round-robin berbobot. Bobot ditentukan oleh bobot instans yang dikembalikan oleh API penemuan layanan.
Retry failover: Jika permintaan gagal karena error jaringan, timeout koneksi, atau respons 5xx, SDK mencoba ulang permintaan tersebut pada instans berbeda dari cache lokal. Dalam penerapan multi-instans, hal ini mencegah satu instans bermasalah menyebabkan kegagalan permintaan.
Jika Anda berencana membangun klien kustom tanpa menggunakan SDK, Anda harus menerapkan kemampuan setara. Untuk informasi lebih lanjut, lihat Bangun klien kustom.
Contoh
Python SDK
Instal atau upgrade SDK.
pip install -U eas-prediction --userUntuk informasi lebih lanjut, lihat Panduan Python SDK.
Tulis kode pemanggilan.
Kode berikut memberikan contoh program yang menggunakan string sebagai input dan output. Untuk contoh yang menggunakan format input dan output lain, seperti TensorFlow atau PyTorch, lihat Panduan 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 aktual dalam format {Uid}.vpc.{RegionId}.pai-eas.aliyuncs.com. # Uid adalah ID akun Alibaba Cloud Anda, dan RegionId adalah ID wilayah layanan PAI-EAS Anda. ENDPOINT = "123**********.vpc.cn-shanghai.pai-eas.aliyuncs.com" # Ganti dengan nama layanan PAI-EAS Anda. SERVICE_NAME = "mnist_saved_model_example" # Ganti dengan token layanan Anda. Anda dapat menemukan token di halaman detail layanan. Kami merekomendasikan mengelola token menggunakan 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) # Akses layanan melalui 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)Di mana:
Konstruktor
client = PredictClient()menerima titik akhir koneksi langsung VPC dan nama layanan sebagai argumen.Titik akhir koneksi langsung VPC: Titik akhir ini spesifik per wilayah dan menggunakan format
{Uid}.vpc.{RegionId}.pai-eas.aliyuncs.com.{Uid}adalah ID akun Alibaba Cloud Anda. Contohnya, titik akhir koneksi langsung VPC untuk China (Shanghai) adalah123**********.vpc.cn-shanghai.pai-eas.aliyuncs.com.TOKEN: Anda dapat menemukan token di bagian Informasi Pemanggilan pada halaman detail layanan.
Java SDK
Tambahkan dependensi Maven.
Untuk menggunakan Java SDK EAS di proyek Maven Anda, tambahkan dependensi eas-sdk ke bagian <dependencies> file pom.xml Anda. Untuk versi terbaru, periksa Repositori Maven.
<dependency> <groupId>com.aliyun.openservices.eas</groupId> <artifactId>eas-sdk</artifactId> <version>2.0.20</version> </dependency>Untuk informasi lebih lanjut, lihat Panduan 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 client dibagikan dengan benar, buat dan inisialisasi saat startup. Jangan buat client baru untuk setiap permintaan. PredictClient client = new PredictClient(new HttpConfig()); // Ganti dengan token layanan Anda. Anda dapat menemukan token di bagian Informasi Pemanggilan pada halaman detail layanan. client.setToken("YWFlMDYyZDNmNTc3M2I3MzMwYmY0MmYwM2Y2MTYxMTY4NzBkNzdj****"); // Untuk koneksi langsung, gunakan metode setDirectEndpoint dengan nama domain dalam format {Uid}.vpc.{RegionId}.pai-eas.aliyuncs.com. Ganti {Uid} dengan ID akun Anda. Contohnya, ID wilayah untuk China (Shanghai) adalah cn-shanghai. client.setDirectEndpoint("123**********.vpc.cn-shanghai.pai-eas.aliyuncs.com"); // Ganti dengan nama layanan Anda. client.setModelName("scorecard_pmml_example"); // Definisikan string input. String request = "[{\"money_credit\": 3000000}, {\"money_credit\": 10000}]"; System.out.println(request); // Dapatkan respons string dari PAI-EAS. try { String response = client.predict(request); System.out.println(response); } catch (Exception e) { e.printStackTrace(); } // Matikan client. client.shutdown(); return; } }
Go SDK
Saat menggunakan Go SDK, manajer paket Go secara otomatis mengunduh kode sumber SDK dari GitHub selama kompilasi. Anda tidak perlu menginstalnya terlebih dahulu. Untuk informasi lebih lanjut tentang penggunaan Go SDK, lihat Panduan Go SDK.
Kode berikut menunjukkan cara memanggil layanan menggunakan Go SDK:
package main
import (
"fmt"
"github.com/pai-eas/eas-golang-sdk/eas"
)
func main() {
// Gunakan titik akhir dalam format {Uid}.vpc.{RegionId}.pai-eas.aliyuncs.com. Ganti {Uid} dengan ID akun Anda dan tentukan wilayah serta nama layanan. Contohnya, ID wilayah untuk China (Shanghai) adalah cn-shanghai.
client := eas.NewPredictClient("123**********.vpc.cn-shanghai.pai-eas.aliyuncs.com", "scorecard_pmml_example")
// Ganti dengan token layanan Anda. Anda dapat menemukan token di bagian Informasi Pemanggilan pada halaman detail layanan.
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)
}
}
}Bangun client kustom
Jika Anda perlu menggunakan bahasa pemrograman lain atau memiliki persyaratan khusus, Anda dapat mengikuti panduan berikut untuk menerapkan logika pemanggilan HTTP.
Saat membangun klien kustom, Anda bertanggung jawab menangani logika toleransi kesalahan kompleks, termasuk penemuan layanan, load balancing, dan retry failover. Implementasi klien Anda secara langsung memengaruhi ketersediaan layanan. Kami sangat menyarankan menggunakan SDK resmi. Perjanjian Tingkat Layanan (SLA) platform tidak mencakup gangguan layanan yang disebabkan oleh klien yang diimplementasikan secara tidak tepat.
API penemuan layanan
PAI-EAS menyediakan API HTTP untuk penemuan layanan di dalam VPC yang dikonfigurasi. API ini mengembalikan daftar alamat IP, port, dan bobot untuk semua instans backend suatu layanan.
URL:
http://<ID Akun Alibaba Cloud Anda>.vpc.<RegionID>.pai-eas.aliyuncs.com/exported/apis/eas.alibaba-inc.k8s.io/v1/upstreams/<Nama Layanan>Autentikasi: Tidak diperlukan token. API ini hanya dapat diakses dari dalam VPC yang dikonfigurasi untuk layanan tersebut.
Interval polling: Ini adalah API side-channel dan harus dipanggil secara berkala oleh tugas latar belakang, misalnya setiap 5 hingga 10 detik. Jangan memanggil API ini untuk setiap permintaan inferensi. Melakukannya akan sangat menurunkan kinerja.
Contoh:
Contoh berikut menunjukkan cara mengkueri layanan bernama mnist_saved_model_example yang diterapkan di China (Hangzhou) dan memiliki dua instans.
$curl http://123**********.vpc.cn-hangzhou.pai-eas.aliyuncs.com/exported/apis/eas.alibaba-inc.k8s.io/v1/upstreams/mnist_saved_model_exampleGanti 123********** dengan ID akun Anda.
Respons berikut menunjukkan daftar alamat layanan backend:
{
"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
}
]
}
}Pemecahan masalah: Kegagalan akses domain VPC
Gejala: Domain VPC tidak dapat dijangkau, tetapi layanan dapat diakses melalui alamat IP langsung yang dikembalikan oleh API penemuan layanan.
Penyebab umum: Sintaks perintah curl yang salah — misalnya, URL tidak diapit tanda kutip, sehingga shell salah mengartikan karakter khusus seperti & atau ? dalam URL.
Solusi: Apit URL dengan tanda kutip ganda dan jalankan permintaan uji minimal melalui alamat IP atau domain VPC untuk memverifikasi konektivitas:
# Uji menggunakan domain VPC (URL harus diapit tanda kutip ganda)
curl "http://123**********.vpc.cn-hangzhou.pai-eas.aliyuncs.com/api/predict/your-service-name" \
-H "Authorization: your-token"
# Uji menggunakan alamat IP langsung (ganti dengan IP dari respons API penemuan layanan)
curl "http://172.16.XX.XX:50000/api/predict/your-service-name" \
-H "Authorization: your-token"Persyaratan implementasi
Saat membangun klien kustom, Anda harus menangani penemuan layanan, load balancing, dan retry failover. Untuk referensi implementasi lengkap, lihat kode sumber Python SDK. Berikut adalah persyaratan implementasi utama:
Simpan cache daftar instans secara lokal dan segarkan secara berkala: Mulai thread latar belakang untuk secara berkala memanggil API penemuan layanan, misalnya setiap 5 hingga 10 detik. Timpa daftar instans cache lokal dengan daftar yang dikembalikan.
PentingAPI penemuan layanan adalah layanan side-channel. Jangan memanggilnya untuk setiap permintaan inferensi. Jika pemanggilan API gagal atau mengembalikan daftar kosong, Anda harus tetap menggunakan daftar cache lokal. Jangan hapus cache. Jika tidak, layanan Anda akan menjadi tidak tersedia.
Seimbangkan permintaan: Untuk setiap permintaan inferensi, pilih instans dari cache lokal. Kami merekomendasikan menggunakan algoritma Round-robin berbobot, tetapi Anda juga dapat menggunakan algoritma kustom berdasarkan logika bisnis Anda.
Coba ulang permintaan yang gagal: Jika permintaan gagal karena error koneksi, timeout, atau respons 5xx, coba ulang permintaan tersebut pada instans berbeda dari cache lokal. Hal ini memerlukan setidaknya dua instans yang tersedia.
Dokumentasi terkait
Untuk informasi lebih lanjut tentang metode pemanggilan layanan, lihat Ikhtisar metode pemanggilan.