全部产品
Search
文档中心

Alibaba Cloud Service Mesh:Percepat komunikasi jaringan antar pod dalam instance ASM menggunakan eRDMA

更新时间:Jul 06, 2025

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

Kluster telah ditambahkan ke instance ASM.

Batasan

Prosedur

Langkah 1: Inisialisasi node terkait

SMC menggunakan antarmuka RDMA elastis (ERI) untuk mempercepat komunikasi jaringan. Sebelum mengaktifkan SMC, Anda harus menginisialisasi node terkait.

  1. Tingkatkan versi kernel Alibaba Cloud Linux 3 ke 5.10.134-17.3 atau lebih baru. Untuk informasi lebih lanjut, lihat Ubah Versi Kernel.

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

  1. Aktifkan injeksi proxy sidecar otomatis untuk namespace default, yang digunakan dalam pengujian berikut. Untuk informasi lebih lanjut, lihat Aktifkan Injeksi Proxy Sidecar Otomatis.

  2. Buat file fortioserver.yaml yang berisi konten berikut:

    Perluas untuk Melihat File 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. Gunakan kubectl untuk terhubung ke kluster ACK berdasarkan informasi dalam file kubeconfig, lalu jalankan perintah berikut untuk menerapkan aplikasi uji:

    kubectl apply -f fortioserver.yaml
  4. Jalankan perintah berikut untuk melihat 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 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.

  1. 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:8080
  2. Dalam bilah alamat browser Anda, masukkan http://localhost:8080/fortio untuk mengakses konsol aplikasi fortioclient dan modifikasi konfigurasi terkait.

    image

    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

  3. Setelah konfigurasi selesai, klik Start di bagian bawah halaman untuk memulai pengujian. Pengujian berakhir setelah bilah kemajuan mencapai akhir.

    image

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

    image

    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

  1. 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: true
  2. Gunakan 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.

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

image

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

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

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

      sudo yum install -y aliyun-smc-extensions
    2. Periksa 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:

      p910680

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