全部产品
Search
文档中心

API Gateway:Referensi performa Plugin

更新时间:Jun 28, 2025

Topik ini menjelaskan performa plugin bawaan dari Cloud-native API Gateway dan plugin kustom yang dikembangkan menggunakan berbagai bahasa pemrograman. Performa dinilai berdasarkan latensi permintaan.

Performa plugin bawaan

Plugin bawaan dari Cloud-native API Gateway menawarkan latensi dalam orde mikrodetik. Sebagai contoh, plugin key-auth memproses setiap permintaan dengan latensi sekitar 20 mikrodetik, sedangkan plugin basic-auth memproses setiap permintaan dengan latensi sekitar 30 mikrodetik.

Performa plugin kustom

Contoh berikut membandingkan performa beberapa plugin yang dikembangkan menggunakan berbagai bahasa pemrograman. Semua plugin digunakan untuk mengimplementasikan logika pemrosesan berikut: Header permintaan diatur sebanyak 20 kali berturut-turut, diperoleh sebanyak 20 kali berturut-turut, lalu dihapus sebanyak 20 kali berturut-turut.

  • Kode sampel untuk plugin kustom yang dikembangkan menggunakan C++

    FilterHeadersStatus PluginContext::onRequestHeaders(uint32_t, bool) {
      std::string fake_header_key_prefix = "fake_key_";
      std::string fake_header_value_prefix = "fake_value_";
      // Tambahkan 20 header ke header permintaan
      for (size_t i = 0; i < 20; i++) {
        addRequestHeader(fake_header_key_prefix + std::to_string(i),
                         fake_header_value_prefix + std::to_string(i));
      }
    
      // Periksa header sebanyak 20 kali.
      for (size_t i = 0; i < 20; i++) {
        getRequestHeader(fake_header_key_prefix + std::to_string(i));
      }
    
      // hapus header tambahan
      for (size_t i = 0; i < 20; i++) {
        removeRequestHeader(fake_header_key_prefix + std::to_string(i));
      }
      return FilterHeadersStatus::Continue;
    }
  • Kode sampel untuk plugin kustom yang dikembangkan menggunakan Golang

    func (ctx *httpContext) OnHttpRequestHeaders(numHeaders int, endOfStream bool) types.Action {
            fake_header_key_prefix := "fake_key_"
            fake_header_value_prefix := "fake_value_"
            for i := 0; i < 20; i++ {
                    proxywasm.AddHttpRequestHeader(fake_header_key_prefix+strconv.Itoa(i),
                            fake_header_value_prefix+strconv.Itoa(i))
            }
            for i := 0; i < 20; i++ {
                    proxywasm.GetHttpRequestHeader(fake_header_key_prefix + strconv.Itoa(i))
            }
            for i := 0; i < 20; i++ {
                    proxywasm.RemoveHttpRequestHeader(fake_header_key_prefix + strconv.Itoa(i))
            }
            return types.ActionContinue
    }
  • Kode sampel untuk plugin kustom yang dikembangkan menggunakan Rust

    fn on_http_request_headers(&mut self, _: usize, _: bool) -> Action {
        for i in 0..20 {
            let key = "fake_key_".to_string() + &i.to_string();
            let value = "fake_value_".to_string() + &i.to_string();
            self.set_http_request_header(&key, Some(&value));
        }
        for i in 0..20 {
            let key = "fake_key_".to_string() + &i.to_string();
            self.get_http_request_header(&key);
        }
        for i in 0..20 {
            let key = "fake_key_".to_string() + &i.to_string();
            self.set_http_request_header(&key, None);
        }
        Action::Continue
    }
  • Kode sampel untuk plugin kustom yang dikembangkan menggunakan AssemblyScript

    function onRequestHeaders(a: u32, end_of_stream: bool): FilterHeadersStatusValues {
      let fake_header_key_prefix: string = "fake_key_";
      let fake_header_value_prefix: string = "fake_value_";
      for (let i = 0; i < 20; i++) {
         stream_context.headers.request.add(fake_header_key_prefix + i.toString(), fake_header_value_prefix + i.toString())
      }
      for (let i = 0; i < 20; i++) {
         stream_context.headers.request.get(fake_header_key_prefix + i.toString())
      }
      for (let i = 0; i < 20; i++) {
         stream_context.headers.request.remove(fake_header_key_prefix + i.toString())
      }
      return FilterHeadersStatusValues.Continue;
    }

Perbandingan performa di antara plugin kustom yang dikembangkan berdasarkan bahasa berbeda

Bahasa pemrograman

Peningkatan latensi permintaan

C++

0,19 ms

Golang

0,20 ms

Rust

0,21 ms

AssemblyScript

0,21 ms

Hasil perbandingan menunjukkan bahwa plugin kustom yang dikembangkan menggunakan berbagai bahasa pemrograman memberikan performa serupa dalam hal latensi permintaan.