All Products
Search
Document Center

Alibaba Cloud Service Mesh:Percepat kinerja jaringan pod-ke-pod di ASM dengan eRDMA

Last Updated:Jun 22, 2026

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

Kluster telah ditambahkan ke instans ASM.

Batasan

Prosedur

Langkah 1: Inisialisasi lingkungan node

SMC menggunakan antarmuka elastic RDMA untuk mempercepat kinerja jaringan. Sebelum mengaktifkan SMC, Anda harus menginisialisasi node terlebih dahulu.

  1. 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.

  2. Instal komponen erdma-controller pada node dan aktifkan akselerasi transparan untuk SMC-R. Untuk informasi selengkapnya, lihat Gunakan eRDMA untuk mempercepat jaringan kontainer.

Langkah 2: Sebarkan aplikasi uji

  1. Aktifkan injeksi proxy sidecar otomatis untuk namespace default yang digunakan untuk pengujian. Untuk informasi selengkapnya, lihat Aktifkan injeksi sidecar otomatis.

  2. Buat file bernama fortioserver.yaml dengan konten berikut.

    fortioserver.yaml

    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: fortioserver
    spec:
      ports:
      - name: http-echo
        port: 8080
        protocol: TCP
      - name: tcp-echoa
        port: 8078
        protocol: TCP
      - name: grpc-ping
        port: 8079
        protocol: TCP
      selector:
        app: fortioserver
      type: ClusterIP
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      labels:
        app: fortioserver
      name: fortioserver
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: fortioserver
      template:
        metadata:
          labels:
            app: fortioserver
          annotations:
            sidecar.istio.io/inject: "true"
            sidecar.istio.io/proxyCPULimit: 2000m
            proxy.istio.io/config: |
              concurrency: 2 
        spec:
          shareProcessNamespace: true
          containers:
          - name: captured
            image: fortio/fortio:latest_release
            ports:
            - containerPort: 8080
              protocol: TCP
            - containerPort: 8078
              protocol: TCP
            - containerPort: 8079
              protocol: TCP
          - name: anolis
            securityContext:
              runAsUser: 0
            image: openanolis/anolisos:latest
            args:
            - /bin/sleep
            - 3650d
    ---
    apiVersion: v1
    kind: Service
    metadata:
      annotations:
          service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-switch: "off"
      name: fortioclient
    spec:
      ports:
      - name: http-report
        port: 8080
        protocol: TCP
      selector:
        app: fortioclient
      type: LoadBalancer
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      labels:
        app: fortioclient
      name: fortioclient
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: fortioclient
      template:
        metadata:
          annotations:
            sidecar.istio.io/inject: "true"
            sidecar.istio.io/proxyCPULimit: 4000m
            proxy.istio.io/config: |
               concurrency: 4
          labels:
            app: fortioclient
        spec:
          shareProcessNamespace: true
          affinity:
            podAntiAffinity:
              requiredDuringSchedulingIgnoredDuringExecution:
              - labelSelector:
                  matchExpressions:
                  - key: app
                    operator: In
                    values:
                    - fortioserver
                topologyKey: "kubernetes.io/hostname"
          containers:
          - name: captured
            volumeMounts:
            - name: shared-data
              mountPath: /var/lib/fortio
            image: fortio/fortio:latest_release
            ports:
            - containerPort: 8080
              protocol: TCP
          - name: anolis
            securityContext:
              runAsUser: 0
            image: openanolis/anolisos:latest
            args:
            - /bin/sleep
            - 3650d
          volumes:
          - name: shared-data
            emptyDir: {}
    
  3. Menggunakan file kubeconfig untuk kluster ACK, jalankan perintah berikut untuk menyebarkan aplikasi uji:

    kubectl apply -f fortioserver.yaml
  4. Jalankan perintah berikut untuk memeriksa status aplikasi uji.

    kubectl get pods | grep fortio

    Output yang diharapkan:

    NAME                            READY   STATUS    RESTARTS      
    fortioclient-8569b98544-9qqbj   3/3     Running   0
    fortioserver-7cd5c46c49-mwbtq   3/3     Running   0

    Output 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.

  1. Gunakan kubeconfig kluster ACK untuk menjalankan perintah berikut guna meneruskan port 8080 layanan fortioclient ke port 8080 pada mesin lokal Anda.

    kubectl port-forward service/fortioclient 8080:8080
  2. Buka browser Anda, lalu kunjungi http://localhost:8080/fortio untuk 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

  3. 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.

    image

    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

  1. Gunakan kubeconfig service mesh untuk mengedit konfigurasi mesh. Tambahkan smcEnabled: true untuk 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
  2. Gunakan kubeconfig kluster ACK untuk menjalankan perintah berikut guna mengubah Penyebaran fortioserver dan fortioclient serta 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.

    1. 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"
              
    2. 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.

image

Perbandingan dengan data garis dasar menunjukkan bahwa mengaktifkan akselerasi SMC di ASM mengurangi latensi dan meningkatkan QPS secara signifikan.

FAQ

  1. 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:

    1. Instal toolkit aliyun-smc-extensions pada node:

      sudo yum install -y aliyun-smc-extensions
    2. Gunakan aliyunsmc-check untuk memeriksa tautan komunikasi ke URL tujuan:

      aliyunsmc-check syn_check --url <url>

      Perintah aliyunsmc-check memeriksa 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.