Estás consultando la documentación de Apigee Edge.
Consulta la
documentación de Apigee X. Información
Un proxy de API es una interfaz para aplicaciones cliente que se usan a fin de conectarse con servicios de backend. Apigee Edge proporciona varias formas de conectarse a los servicios de backend a través de un proxy de API:
- TargetEndpoint para conectarte a cualquier servicio HTTP/HTTPs, NodeJS o alojado de destino.
- Política ServiceCallout para invocar cualquier servicio externo anterior o posterior a la invocación del servidor de destino en TargetEndpoint.
- Código personalizado que se agrega a la política de JavaScript o a la política JavaCallout para conectarse a los servicios de backend.
Conexiones persistentes
La conexión HTTP persistente, también llamada keep-alive HTTP o reutilización de conexión HTTP, es un concepto que permite que una sola conexión TCP envíe y reciba varias solicitudes HTTP o respuestas, en lugar de abrir una conexión nueva para cada par de solicitud o respuesta.
Apigee Edge usa una conexión persistente para comunicarse con los servicios de backend. Una conexión permanece activa durante 60 segundos de forma predeterminada. Es decir, si una conexión está inactiva en el grupo de conexiones durante más de 60 segundos, la conexión se cierra.
El tiempo de espera del keep-alive se puede configurar a través de una propiedad llamada keepalive.timeout.millis
, especificada en la configuración de TargetEndpoint de un proxy de API. Por ejemplo, el período del keep alive se puede establecer en 30 segundos para un servicio de backend específico en el TargetEndpoint.
En el siguiente ejemplo, keepalive.timeout.millis
se establece en 30 segundos en la configuración de TargetEndpoint:
<!-- /antipatterns/examples/disable-persistent-connections-1.xml --> <TargetEndpoint name="default"> <HTTPTargetConnection> <URL>http://mocktarget.apigee.net</URL> <Properties> <Property name="keepalive.timeout.millis">30000</Property> </Properties> </HTTPTargetConnection>Disable HTTP persistent (Reusable keep-alive) connections </TargetEndpoint>
En el ejemplo anterior, keepalive.timeout.millis
controla el comportamiento de keep-alive para un servicio de backend específico en un proxy de API. También existe una propiedad que controla el comportamiento de keep-alive para todos los servicios de backend en todos los proxies. Se puede configurar HTTPTransport.keepalive.timeout.millis
en el componente Message Processor. Esta propiedad también tiene un valor predeterminado de 60 segundos. Las modificaciones en esta propiedad afectan el comportamiento de la conexión de mantenimiento en vivo entre
Apigee Edge y todos los servicios de backend en todos los proxies de API.
Antipatrón
No se recomienda inhabilitar las conexiones persistentes (mantener en vivo) estableciendo la propiedad keepalive.timeout.millis
en 0 en la configuración de TargetEndpoint de un proxy de API específico o establecer HTTPTransport.keepalive.timeout.millis
en 0 en Message Processors, ya que
afectará el rendimiento.
En el siguiente ejemplo, la configuración de TargetEndpoint inhabilita las conexiones persistentes (mantenidas activas) para un servicio de backend específico mediante la configuración de keepalive.timeout.millis
en 0:
<!-- /antipatterns/examples/disable-persistent-connections-2.xml --> <TargetEndpoint name="default"> <HTTPTargetConnection> <URL>http://mocktarget.apigee.net</URL> <Properties> <Property name="keepalive.timeout.millis">0</Property> </Properties> </HTTPTargetConnection> </TargetEndpoint>
Si se inhabilitan las conexiones de mantenimiento en vivo para uno o más servicios de backend, Edge debe abrir una conexión nueva por cada solicitud nueva a los servicios de backend de destino. Si el backend es HTTP, Edge también realizará el protocolo de enlace SSL para cada solicitud nueva, lo que se suma a la latencia general de las solicitudes a la API.
Impacto
- Aumenta el tiempo de respuesta general de las solicitudes a la API, ya que Apigee Edge debe abrir una nueva conexión y realizar el protocolo de enlace SSL para cada solicitud nueva.
- Es posible que las conexiones se agoten cuando haya condiciones de tráfico alto, ya que lleva tiempo liberar las conexiones de vuelta al sistema.
Práctica recomendada
- Los servicios de backend deben respetar y manejar la conexión persistente HTTP de acuerdo con los estándares HTTP 1.1.
- Los servicios de backend deben responder con un encabezado
Connection:keep-alive
si pueden manejar conexiones persistentes (keep-alive). - Los servicios de backend deben responder con un encabezado
Connection:close
si no pueden controlar conexiones persistentes.
La implementación de este patrón garantizará que Apigee Edge pueda manejar de forma automática una conexión persistente o no persistente con los servicios de backend, sin necesidad de realizar cambios en el proxy de la API.