Todos los productos
Search
Centro de documentos

API Gateway:Referencias de rendimiento de plug-ins

Última actualización: Sep 03, 2026

Los plug-ins integrados de Cloud-native API Gateway añaden solo microsegundos de latencia por solicitud. Los plug-ins personalizados desarrollados en C++, Golang, Rust y AssemblyScript ofrecen un rendimiento similar.

Rendimiento de los plug-ins integrados

Los plug-ins integrados añaden una latencia del orden de microsegundos a cada solicitud. Por ejemplo, el plug-in key-auth añade aproximadamente 20 microsegundos y el plug-in basic-auth añade cerca de 30 microsegundos.

Rendimiento de los plug-ins personalizados

A continuación se presentan ejemplos que implementan la misma lógica de procesamiento en diferentes lenguajes de programación: añadir 20 encabezados de solicitud, leerlos 20 veces y luego eliminarlos.

  • Código de ejemplo en C++

    FilterHeadersStatus PluginContext::onRequestHeaders(uint32_t, bool) {
      std::string fake_header_key_prefix = "fake_key_";
      std::string fake_header_value_prefix = "fake_value_";
      // Add 20 headers to request headers
      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));
      }
    
      // Check 20 times headers.
      for (size_t i = 0; i < 20; i++) {
        getRequestHeader(fake_header_key_prefix + std::to_string(i));
      }
    
      // remove add headers
      for (size_t i = 0; i < 20; i++) {
        removeRequestHeader(fake_header_key_prefix + std::to_string(i));
      }
      return FilterHeadersStatus::Continue;
    }
  • Código de ejemplo en 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
    }
  • Código de ejemplo en 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
    }
  • Código de ejemplo en 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;
    }

Comparación de rendimiento entre plug-ins personalizados desarrollados en distintos lenguajes

Lenguaje de programación

Incremento en la latencia de la solicitud

C++

0.19 ms

Golang

0.20 ms

Rust

0.21 ms

AssemblyScript

0.21 ms

Los plug-ins personalizados desarrollados en diferentes lenguajes presentan una latencia de solicitud similar.