Alibaba Cloud Linux 3 menyediakan Komunikasi Memori Bersama (SMC), sebuah protokol jaringan berperforma tinggi yang berfungsi di ruang kernel. SMC memanfaatkan teknologi Remote Direct Memory Access (RDMA) dan bekerja dengan antarmuka soket untuk menetapkan komunikasi jaringan. Protokol ini dapat secara transparan mengoptimalkan kinerja komunikasi jaringan dari aplikasi Transmission Control Protocol (TCP). Namun, saat menggunakan SMC untuk mengoptimalkan kinerja komunikasi jaringan dalam lingkungan Elastic Compute Service (ECS) asli, Anda harus memelihara daftar putih SMC dan konfigurasinya dalam namespace jaringan pod terkait untuk mencegah SMC turun ke TCP secara tidak terduga. Service Mesh (ASM) menyediakan kemampuan optimalisasi SMC dalam lingkungan jaringan terkontrol (yaitu kluster) untuk secara otomatis mengoptimalkan komunikasi jaringan antar pod dalam instance ASM tanpa memerlukan konfigurasi manual.
Prasyarat
Batasan
Node harus menggunakan Instance ECS yang mendukung elastic Remote Direct Memory Access (eRDMA). Untuk informasi lebih lanjut, lihat Aktifkan eRDMA pada Instance Tingkat Perusahaan.
Node harus menggunakan Alibaba Cloud Linux 3. Untuk informasi lebih lanjut, lihat Alibaba Cloud Linux 3.
Versi instance ASM Anda adalah V1.23 atau lebih baru. Untuk informasi lebih lanjut tentang cara memperbarui instance ASM, lihat Perbarui Instance ASM.
Kluster Container Service for Kubernetes (ACK) Anda menggunakan plugin jaringan Terway. Untuk informasi lebih lanjut, lihat Bekerja dengan Terway.
Akses internet ke API server kluster ACK diaktifkan. Untuk informasi lebih lanjut, lihat Pajankan API Server ke Internet.
Prosedur
Langkah 1: Inisialisasi node terkait
SMC menggunakan antarmuka RDMA elastis (ERI) untuk mempercepat komunikasi jaringan. Sebelum mengaktifkan SMC, Anda harus menginisialisasi node terkait.
Tingkatkan versi kernel Alibaba Cloud Linux 3 ke 5.10.134-17.3 atau lebih baru. Untuk informasi lebih lanjut, lihat Ubah Versi Kernel.
Instal erdma-controller pada node dan aktifkan Komunikasi Memori Bersama melalui RDMA (SMC-R). Untuk informasi lebih lanjut, lihat Gunakan eRDMA untuk Mempercepat Jaringan Kontainer.
Langkah 2: Deploy aplikasi uji
Aktifkan injeksi proxy sidecar otomatis untuk namespace default, yang digunakan dalam pengujian berikut. Untuk informasi lebih lanjut, lihat Aktifkan Injeksi Proxy Sidecar Otomatis.
Buat file fortioserver.yaml yang berisi konten berikut:
Gunakan kubectl untuk terhubung ke kluster ACK berdasarkan informasi dalam file kubeconfig, lalu jalankan perintah berikut untuk menerapkan aplikasi uji:
kubectl apply -f fortioserver.yamlJalankan perintah berikut untuk melihat 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 menunjukkan bahwa kedua aplikasi uji dimulai sesuai harapan.
Langkah 3: Jalankan pengujian dalam lingkungan dasar dan lihat hasil pengujian dasar
Setelah aplikasi fortio dimulai, port mendengarkan 8080 diekspos. Anda dapat mengakses port ini untuk membuka halaman konsol aplikasi fortio. Untuk menghasilkan lalu lintas uji, Anda dapat memetakan port aplikasi fortioclient ke port lokal. Kemudian, buka halaman konsol aplikasi fortio di host lokal Anda.
Gunakan kubectl untuk terhubung ke kluster ACK berdasarkan informasi dalam file kubeconfig, lalu jalankan perintah berikut untuk memetakan port 8080 aplikasi fortioclient ke port lokal 8080.
kubectl port-forward service/fortioclient 8080:8080Dalam bilah alamat browser Anda, masukkan
http://localhost:8080/fortiountuk mengakses konsol aplikasi fortioclient dan modifikasi konfigurasi terkait.
Modifikasi pengaturan parameter pada halaman yang ditampilkan pada gambar sebelumnya sesuai dengan tabel berikut.
Parameter
Contoh
URL
http://fortioserver:8080/echo
QPS
100000
Duration
30s
Threads/Simultaneous connections
64
Payload
Masukkan string berikut (128 byte):
xhsyL4ELNoUUbC3WEyvaz0qoHcNYUh0j2YHJTpltJueyXlSgf7xkGqc5RcSJBtqUENNjVHNnGXmoMyILWsrZL1O2uordH6nLE7fY6h5TfTJCZtff3Wib8YgzASha8T8g
Setelah konfigurasi selesai, klik Start di bagian bawah halaman untuk memulai pengujian. Pengujian berakhir setelah bilah kemajuan mencapai akhir.

Setelah pengujian berakhir, hasil pengujian ditampilkan di halaman. Gambar berikut hanya untuk referensi. Hasil pengujian bervariasi tergantung pada lingkungan pengujian.

Pada halaman hasil pengujian, sumbu x menunjukkan latensi permintaan. Anda dapat memperoleh distribusi latensi permintaan dengan mengamati distribusi data pada sumbu x histogram. Kurva ungu menunjukkan jumlah permintaan yang diproses dalam waktu respons yang berbeda. Sumbu y menunjukkan jumlah permintaan yang diproses. Di bagian atas histogram, latensi P50, P75, P90, P99, dan P99.9 permintaan disediakan. Setelah memperoleh data pengujian lingkungan dasar, Anda perlu mengaktifkan SMC untuk aplikasi guna menguji kinerja aplikasi setelah SMC diaktifkan.
Langkah 4: Aktifkan percepatan komunikasi jaringan berbasis SMC untuk instance ASM dan workload Anda
Gunakan kubectl untuk terhubung ke instance ASM berdasarkan informasi dalam file kubeconfig. Kemudian, jalankan perintah berikut untuk menambahkan bidang "smcEnabled: true" guna mengaktifkan percepatan komunikasi jaringan berbasis SMC.
$ kubectl edit asmmeshconfig apiVersion: istio.alibabacloud.com/v1beta1 kind: ASMMeshConfig metadata: name: default spec: ambientConfiguration: redirectMode: "" waypoint: {} ztunnel: {} cniConfiguration: enabled: true repair: {} smcEnabled: trueGunakan kubectl untuk terhubung ke kluster ACK berdasarkan informasi dalam file kubeconfig. Kemudian, jalankan perintah berikut untuk memodifikasi Deployment aplikasi fortioserver dan fortioclient serta tambahkan anotasi smc.asm.alibabacloud.com/enabled: "true" ke pod tempat aplikasi fortioserver dan fortioclient berada.
Setelah mengaktifkan SMC untuk instance ASM, Anda perlu lebih lanjut mengaktifkan SMC untuk workload. Untuk mengaktifkan SMC untuk workload, Anda dapat menambahkan anotasi
smc.asm.alibabacloud.com/enabled: "true"ke pod terkait. Anda harus mengaktifkan SMC untuk workload di sisi klien dan server.Modifikasi Deployment aplikasi fortioclient.
$ kubectl edit deployment fortioclient apiVersion: apps/v1 kind: Deployment metadata: ...... name: fortioclient spec: ...... template: metadata: ...... annotations: smc.asm.alibabacloud.com/enabled: "true"Modifikasi Deployment aplikasi 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 dalam lingkungan di mana SMC diaktifkan dan lihat hasil pengujian
Workload di-restart setelah Anda memodifikasi Deployment. Oleh karena itu, Anda harus memetakan ulang port aplikasi fortioclient ke port lokal lagi dengan merujuk ke Langkah 3. Kemudian, mulai pengujian lagi dan tunggu hingga pengujian selesai.

Dibandingkan dengan hasil pengujian ketika SMC tidak diaktifkan, Anda dapat melihat bahwa setelah mengaktifkan SMC untuk instance ASM, latensi permintaan berkurang dan queries per second (QPS) meningkat secara signifikan.
FAQ
Apa yang harus saya lakukan jika gagal mengakses layanan database setelah SMC diaktifkan?
Masalah ini terjadi karena jenis TCP-254 dalam protokol SMC salah diidentifikasi ketika Anda mengakses layanan database melalui load balancer yang tidak sesuai dengan spesifikasi TCP.
Anda dapat melakukan langkah-langkah berikut untuk menyelesaikan masalah ini:
Instal toolkit aliyun-smc-extensions pada node:
sudo yum install -y aliyun-smc-extensionsPeriksa tautan komunikasi URL akhir menggunakan aliyunsmc-check:
aliyunsmc-check syn_check --url <url>Aliyunsmc-check dapat mengidentifikasi masalah seperti replay opsi TCP, konflik, dan overlength ke URL akhir. Contoh output:

Jika opsi TCP tidak diproses dengan benar ketika Anda mengakses URL layanan, kami sarankan Anda menonaktifkan optimalisasi SMC ketika mengakses pod layanan.