Alibaba Cloud Linux 3 menyediakan Shared Memory Communication (SMC), tumpukan protokol jaringan kernel berkinerja tinggi yang kompatibel dengan lapisan socket. Teknologi ini memanfaatkan Remote Direct Memory Access (RDMA) untuk mengoptimalkan kinerja jaringan secara transparan bagi aplikasi TCP. Namun, saat menggunakan SMC untuk mengoptimalkan kinerja jaringan di lingkungan ECS native, Anda harus memelihara daftar putih dan konfigurasi SMC di namespace jaringan kontainer secara hati-hati agar SMC tidak terdegradasi ke TCP secara tak terduga. ASM menyediakan lingkungan terkendali (di dalam kluster) untuk optimisasi SMC. ASM secara otomatis mengoptimalkan lalu lintas antar pod dalam service mesh, sehingga Anda tidak perlu lagi mengelola konfigurasi SMC secara manual.
Prasyarat
Batasan
-
Node harus berupa instance ECS yang mendukung eRDMA. Untuk informasi selengkapnya, lihat Aktifkan eRDMA untuk instance enterprise-level.
-
Node harus menjalankan Alibaba Cloud Linux 3. Untuk informasi selengkapnya, lihat Alibaba Cloud Linux 3.
-
Instans ASM harus versi 1.23 atau lebih baru. Untuk informasi tentang cara melakukan upgrade instans, lihat Upgrade instans ASM.
-
Kluster ACK harus menggunakan plug-in jaringan Terway. Untuk informasi selengkapnya, lihat Gunakan plug-in jaringan Terway.
-
Kluster ACK harus mengizinkan akses Internet ke server API. Untuk informasi selengkapnya, lihat Kontrol akses Internet ke server API.
Prosedur
Langkah 1: Inisialisasi lingkungan node
SMC menggunakan antarmuka elastic RDMA untuk mempercepat kinerja jaringan. Sebelum mengaktifkan SMC, Anda harus menginisialisasi node terlebih dahulu.
-
Pastikan versi kernel Alibaba Cloud Linux 3 adalah 5.10.134-17.3 atau lebih baru. Untuk informasi tentang cara memperbarui kernel, lihat Ubah versi kernel.
-
Instal komponen
erdma-controllerpada node dan aktifkan akselerasi transparan untuk SMC-R. Untuk informasi selengkapnya, lihat Gunakan eRDMA untuk mempercepat jaringan kontainer.
Langkah 2: Sebarkan aplikasi uji
-
Aktifkan injeksi proxy sidecar otomatis untuk namespace
defaultyang digunakan untuk pengujian. Untuk informasi selengkapnya, lihat Aktifkan injeksi sidecar otomatis. -
Buat file bernama
fortioserver.yamldengan konten berikut. -
Menggunakan file kubeconfig untuk kluster ACK, jalankan perintah berikut untuk menyebarkan aplikasi uji:
kubectl apply -f fortioserver.yaml -
Jalankan perintah berikut untuk memeriksa status aplikasi uji.
kubectl get pods | grep fortioOutput yang diharapkan:
NAME READY STATUS RESTARTS fortioclient-8569b98544-9qqbj 3/3 Running 0 fortioserver-7cd5c46c49-mwbtq 3/3 Running 0Output ini mengonfirmasi bahwa kedua aplikasi sedang berjalan.
Langkah 3: Jalankan pengujian garis dasar
Setelah aplikasi Fortio dimulai, aplikasi tersebut mendengarkan pada port 8080. Anda dapat mengakses port ini untuk membuka konsol web Fortio. Untuk menghasilkan lalu lintas uji, gunakan penerusan port untuk memetakan port layanan fortioclient ke mesin lokal Anda, lalu buka konsol Fortio.
-
Gunakan kubeconfig kluster ACK untuk menjalankan perintah berikut guna meneruskan port 8080 layanan
fortioclientke port 8080 pada mesin lokal Anda.kubectl port-forward service/fortioclient 8080:8080 -
Buka browser Anda, lalu kunjungi
http://localhost:8080/fortiountuk mengakses konsol klien Fortio dan ubah parameter pengujian.Setelah mengonfigurasi parameter, klik Start di bagian bawah halaman konsol Fortio untuk memulai pengujian beban.
Ubah parameter pada halaman sesuai dengan tabel berikut.
Parameter
Nilai
URL
http://fortioserver:8080/echo
QPS
100000
Durasi
30s
Thread/koneksi simultan
64
Payload
Masukkan string 128-byte berikut:
xhsyL4ELNoUUbC3WEyvaz0qoHcNYUh0j2YHJTpltJueyXlSgf7xkGqc5RcSJBtqUENNjVHNnGXmoMyILWsrZL1O2uordH6nLE7fY6h5TfTJCZtff3Wib8YgzASha8T8g
-
Setelah menyelesaikan konfigurasi, klik Start di bagian bawah halaman untuk memulai pengujian. Tunggu hingga bilah progres selesai.
Setelah pengujian selesai, hasilnya akan ditampilkan pada halaman tersebut. Gambar berikut hanya sebagai referensi. Hasil aktual dapat berbeda tergantung pada lingkungan Anda.

Grafik hasil pengujian menampilkan latensi permintaan pada sumbu x dan jumlah permintaan yang selesai pada sumbu y. Distribusi batang menunjukkan distribusi latensi, sedangkan kurva ungu menunjukkan jumlah permintaan yang selesai dalam rentang waktu respons tertentu. Grafik ini juga mencantumkan data latensi P50, P75, P90, P99, dan P99.9. Setelah memperoleh data garis dasar ini, Anda akan mengaktifkan SMC untuk mengukur peningkatan kinerja dari akselerasi.
Langkah 4: Aktifkan akselerasi SMC
-
Gunakan kubeconfig service mesh untuk mengedit konfigurasi mesh. Tambahkan
smcEnabled: trueuntuk mengaktifkan fitur akselerasi SMC.$ kubectl edit asmmeshconfig apiVersion: istio.alibabacloud.com/v1beta1 kind: ASMMeshConfig metadata: name: default spec: ambientConfiguration: redirectMode: "" waypoint: {} ztunnel: {} cniConfiguration: enabled: true repair: {} smcEnabled: true -
Gunakan kubeconfig kluster ACK untuk menjalankan perintah berikut guna mengubah Penyebaran
fortioserverdanfortioclientserta menambahkan anotasi ke pod.Setelah Anda mengaktifkan akselerasi untuk instans ASM, Anda juga harus mengaktifkannya untuk beban kerja. Untuk melakukannya, tambahkan anotasi
smc.asm.alibabacloud.com/enabled: "true"ke pod. Anda harus mengaktifkan akselerasi untuk beban kerja di kedua ujung komunikasi yang ingin Anda optimalkan.-
Edit definisi Penyebaran
fortioclient.$ kubectl edit deployment fortioclient apiVersion: apps/v1 kind: Deployment metadata: ...... name: fortioclient spec: ...... template: metadata: ...... annotations: smc.asm.alibabacloud.com/enabled: "true" -
Edit definisi Penyebaran
fortioserver.$ kubectl edit deployment fortioserver apiVersion: apps/v1 kind: Deployment metadata: ...... name: fortioserver spec: ...... template: metadata: ...... annotations: smc.asm.alibabacloud.com/enabled: "true"
-
Langkah 5: Jalankan pengujian berakselerasi
Modifikasi Penyebaran menyebabkan beban kerja direstart. Anda harus membuat ulang penerusan port untuk layanan fortioclient seperti yang dijelaskan dalam Langkah 3, lalu jalankan kembali pengujian tersebut. Tunggu hingga pengujian selesai dan lihat hasilnya.

Perbandingan dengan data garis dasar menunjukkan bahwa mengaktifkan akselerasi SMC di ASM mengurangi latensi dan meningkatkan QPS secara signifikan.
FAQ
-
Mengapa akses ke beberapa layanan database hang dan gagal membangun koneksi setelah saya mengaktifkan SMC?
Masalah ini terjadi karena lalu lintas ke layanan database sering melewati load balancer. Beberapa implementasi load balancer tidak mengikuti standar opsi TCP secara ketat dan salah menangani opsi TCP dengan jenis 254 yang ditentukan dalam protokol SMC. Hal ini menyebabkan kegagalan koneksi dan mencegah akses ke layanan tersebut.
Untuk mendiagnosis masalah ini, lakukan langkah-langkah berikut:
-
Instal toolkit
aliyun-smc-extensionspada node:sudo yum install -y aliyun-smc-extensions -
Gunakan
aliyunsmc-checkuntuk memeriksa tautan komunikasi ke URL tujuan:aliyunsmc-check syn_check --url <url>Perintah
aliyunsmc-checkmemeriksa adanya replay opsi TCP, konflik, dan masalah panjang berlebih pada jalur akses ke URL tujuan. Berikut contoh outputnya:The check results mean: PASS: pass the test or meet the requirement. SKIP: encounter some problems when running the check. FAIL: test failed or requirements are not met. XXXX: information, e.g. smcr_tcp2smc config, ipv6_disable config,. Check: syn_check Begin to run syn checks. Please make sure scapy have been installed(python3 -m pip install scapy). Name Result Desc result info ---------------------- -------------------- ---------------------------------------------------- ------------------------------------------- syn_option_replay PASS check whether smc option is replayed syn_option_conflict PASS check whether smc option kind is conflict syn_option_long PASS check whether syn options is overly long
Jika pemeriksaan mengonfirmasi penanganan opsi TCP yang tidak standar pada jalur akses layanan, nonaktifkan akselerasi SMC untuk pod yang mengakses layanan tersebut.
-