全部产品
Search
文档中心

Elastic Compute Service:Menyebarkan aplikasi bRPC berperforma tinggi berbasis eRDMA

更新时间:Jul 06, 2025

Anda dapat menyebarkan aplikasi Remote Procedure Call (bRPC) pada Instance ECS yang mendukung Elastic Remote Direct Memory Access (eRDMA). Dengan pendekatan ini, Anda dapat memanfaatkan latensi rendah, throughput tinggi, dan pemanfaatan CPU rendah yang disediakan oleh eRDMA untuk mengoptimalkan efisiensi transmisi data dari aplikasi bRPC. Solusi ini cocok untuk skenario dengan kebutuhan throughput pesan tinggi dan sensitivitas terhadap latensi. Topik ini menjelaskan cara menyebarkan aplikasi bRPC pada Instance ECS yang mendukung eRDMA serta cara menguji peningkatan performa ketika menggunakan eRDMA.

Catatan
  • bRPC adalah kerangka kerja panggilan prosedur jarak jauh berperforma tinggi yang ditulis dalam C++. Kerangka kerja ini menyediakan berbagai fitur dan alat untuk menyederhanakan pengembangan serta penyebaran layanan. bRPC biasanya digunakan dalam skenario pencarian, penyimpanan, pembelajaran mesin, dan periklanan. bRPC juga dapat digunakan untuk membangun layanan mikro dengan konkurensi tinggi dan latensi rendah serta sistem terdistribusi berskala besar. Untuk informasi lebih lanjut tentang bRPC, lihat Memulai.

  • eRDMA adalah layanan Remote Direct Memory Access (RDMA) yang dikembangkan oleh Alibaba Cloud untuk memastikan performa jaringan tinggi dengan latensi rendah, throughput tinggi, dan elastisitas tinggi. Untuk informasi lebih lanjut, lihat Ikhtisar.

Langkah 1: Persiapan awal

Buat dua Instance ECS yang mendukung eRDMA. Satu instance berfungsi sebagai server, dan instance lainnya sebagai klien. Selama pembuatan instance, perhatikan hal-hal berikut:

  • Tipe instance: Pilih tipe instance yang mendukung eRDMA. Untuk informasi lebih lanjut, lihat bagian Batasan dari topik "Mengonfigurasi eRDMA pada instance tingkat perusahaan". Contoh: ecs.g8a.8xlarge.

  • Gambar: Pilih gambar yang mendukung eRDMA. Untuk informasi lebih lanjut, lihat bagian Batasan dari topik "Mengonfigurasi eRDMA pada instance tingkat perusahaan". Contoh: Alibaba Cloud Linux 3.2104 LTS 64-bit.

  • Driver eRDMA: Pilih Auto-install eRDMA Driver. Driver eRDMA akan diinstal secara otomatis selama pembuatan Instance ECS.

    Catatan

    Setelah instance dijalankan, tunggu 3 hingga 5 menit agar driver eRDMA selesai diinstal. Untuk informasi lebih lanjut, lihat Aktifkan eRDMA pada instance tingkat perusahaan.

  • Jaringan:

    • Aktifkan akses Internet untuk setiap instance.

    • Secara default, instance dalam virtual private cloud (VPC) yang sama dapat berkomunikasi satu sama lain melalui jaringan internal.

    • Elastic network interface (ENI): Pilih eRDMA Interface di sisi kanan bagian ENI.

Untuk informasi tentang parameter lainnya, lihat Buat instance di tab Peluncuran Kustom.

Langkah 2: Menyebarkan dan mengompilasi bRPC

Menyebarkan dan mengompilasi bRPC pada dua Instance ECS (server dan klien). Dalam contoh ini, sistem operasi Alibaba Cloud Linux 3 digunakan. Untuk informasi tentang cara menyebarkan bRPC di sistem operasi lain, lihat Build of bRPC.

  1. Masuk ke dua Instance ECS secara berurutan.

    Untuk informasi lebih lanjut, lihat Gunakan Workbench untuk terhubung ke instance Linux melalui SSH.

  2. Jalankan perintah berikut untuk mengubah mode pembentukan koneksi eRDMA agar kompatibel dengan bRPC.

    Catatan

    Secara default, eRDMA membentuk koneksi dalam mode RDMA_CM, sedangkan bRPC menggunakan mode Out-of-Band (OOB). Oleh karena itu, Anda harus mengubah mode pembentukan koneksi eRDMA agar kompatibel dengan bRPC.

    sudo sh -c "echo 'options erdma compat_mode=Y' >> /etc/modprobe.d/erdma.conf"
    sudo dracut --force
    sudo rmmod erdma
    sudo modprobe erdma compat_mode=Y
  3. Buka kunci memory lock. Untuk aplikasi yang mendukung eRDMA dan memerlukan ruang memori besar, memory lock perlu dibuka untuk meningkatkan efisiensi transmisi data.

    1. Jalankan perintah berikut untuk memodifikasi file limits.conf:

      sudo vi /etc/security/limits.conf
    2. Tambahkan konten berikut ke akhir file, lalu simpan dan tutup file:

      * soft memlock unlimited
      * hard memlock unlimited
  4. Jalankan perintah berikut untuk menyebarkan aplikasi bRPC:

    sudo yum install git gcc-c++ make openssl-devel gflags-devel protobuf-devel protobuf-compiler leveldb-devel -y
    git clone https://github.com/apache/brpc.git
  5. Ketika menggunakan eRDMA untuk menguji bRPC, kami sarankan Anda menginstal patch berikut pada server dan klien untuk mencapai performa yang lebih baik.

    1. Buat file di direktori brpc berdasarkan lingkungan aktual. Sebagai contoh, nama file adalah erdma-multi-sge.patch. Contoh perintah:

      cd ~/brpc
      sudo vi erdma-multi-sge.patch
    2. Tambahkan konten berikut ke file, lalu simpan dan tutup file:

      diff --git a/src/brpc/rdma/rdma_helper.cpp b/src/brpc/rdma/rdma_helper.cpp
      index cf1cce95..d2592cbb 100644
      --- a/src/brpc/rdma/rdma_helper.cpp
      +++ b/src/brpc/rdma/rdma_helper.cpp
      @@ -619,7 +619,7 @@ void DeregisterMemoryForRdma(void* buf) {
       }
      
       int GetRdmaMaxSge() {
      -    return g_max_sge;
      +    return 4;
       }
      
       int GetRdmaCompVector() {
      --
      2.39.3
    3. Jalankan perintah berikut untuk menerapkan file patch ke kode sumber bRPC:

      patch -p1 < erdma-multi-sge.patch
    4. Jalankan perintah berikut untuk mengompilasi kode sumber bRPC:

      sh config_brpc.sh --with-rdma --headers="/usr/include" --libs="/usr/lib64 /usr/bin"
      make -j
      cd example/rdma_performance; make -j

Langkah 3: Uji performa

Uji performa bRPC ketika eRDMA digunakan dan ketika tidak digunakan, lalu bandingkan hasil pengujian untuk mengevaluasi peningkatan performa yang diberikan oleh eRDMA kepada bRPC.

  1. Uji performa bRPC dalam skenario berikut.

    Uji performa ketika eRDMA digunakan

    1. Jalankan perintah berikut di server untuk memulai server dan mengaktifkan komunikasi melalui eRDMA:

      ./server --rdma_gid_index=1 --rdma_prepared_qp_cnt=0 --use_rdma=true
    2. Jalankan perintah berikut di klien untuk terhubung ke server dan mengaktifkan komunikasi melalui eRDMA:

      ./client --servers=<Private IP address of the server>:8002 --rpc_timeout_ms=-1 --attachment_size=1024 --rdma_gid_index=1 --rdma_prepared_qp_cnt=0 --use_rdma=true --queue_depth=16

      Perhatikan parameter berikut:

      • <Private IP address of the server>: Ganti nilai parameter dengan alamat IP privat server yang sebenarnya.

      • --attachment_size: Tentukan ukuran data yang dilampirkan pada setiap panggilan bRPC atau data yang akan ditransfer. Parameter ini memengaruhi efisiensi transmisi data. Transmisi data blok besar dapat memanfaatkan keunggulan eRDMA dengan lebih efisien. Namun, ukuran data yang terlalu besar meningkatkan kompleksitas manajemen memori. Kami sarankan Anda menyetel parameter ini berdasarkan kebutuhan pengujian aktual Anda.

      • --queue_depth: Tentukan kedalaman antrian permintaan, yaitu jumlah permintaan konkuren dalam antrian. Nilai kedalaman antrian yang lebih besar membantu menghadapi banjir permintaan dalam skenario konkurensi tinggi dan mencegah penolakan permintaan akibat antrian penuh. Namun, nilai kedalaman antrian yang terlalu besar dapat menggunakan lebih banyak sumber daya memori. Kami sarankan Anda menyetel parameter ini berdasarkan kebutuhan pengujian aktual Anda.

    Uji performa ketika eRDMA tidak digunakan

    1. Jalankan perintah berikut di server untuk memulai server dan mengaktifkan komunikasi melalui TCP:

      ./server --rdma_gid_index=1 --rdma_prepared_qp_cnt=0 --use_rdma=false
    2. Jalankan perintah berikut di klien untuk terhubung ke server dan mengaktifkan komunikasi melalui TCP:

      ./client --servers=<Private IP address of the server>:8002 --rpc_timeout_ms=-1 --attachment_size=1024 --rdma_gid_index=1 --rdma_prepared_qp_cnt=0 --use_rdma=false --queue_depth=16

      Perhatikan parameter berikut:

      • <Private IP address of the server>: Ganti nilai parameter dengan alamat IP privat server yang sebenarnya.

      • --attachment_size: Tentukan ukuran data yang dilampirkan pada setiap panggilan bRPC atau data yang akan ditransfer. Parameter ini memengaruhi efisiensi transmisi data. Transmisi data blok besar dapat memanfaatkan keunggulan eRDMA dengan lebih efisien. Namun, ukuran data yang terlalu besar meningkatkan kompleksitas manajemen memori. Kami sarankan Anda menyetel parameter ini berdasarkan kebutuhan pengujian aktual Anda.

      • --queue_depth: Tentukan kedalaman antrian permintaan, yaitu jumlah permintaan konkuren dalam antrian. Nilai kedalaman antrian yang lebih besar membantu menghadapi banjir permintaan dalam skenario konkurensi tinggi dan mencegah penolakan permintaan akibat antrian penuh. Namun, nilai kedalaman antrian yang terlalu besar dapat menggunakan lebih banyak sumber daya memori. Kami sarankan Anda menyetel parameter ini berdasarkan kebutuhan pengujian aktual Anda.

  2. Dapatkan hasil dari dua pengujian untuk mengevaluasi peningkatan performa yang diberikan oleh eRDMA kepada bRPC dalam hal latensi dengan melihat bidang Avg-Latency dan bandwidth dengan melihat bidang QPS.