Está a ver a documentação do Apigee e do Apigee Hybrid.
Veja a documentação do
Apigee Edge.
Um proxy de API é uma interface para aplicações cliente usada para estabelecer ligação a serviços de back-end. O Apigee oferece várias formas de se ligar a serviços de back-end através de um proxy de API:
- TargetEndpoint para estabelecer ligação a quaisquer serviços HTTP/HTTPS, NodeJS ou de destino alojados.
- Política ServiceCallout para invocar qualquer serviço externo antes ou depois da invocação do servidor de destino em TargetEndpoint.
- Código personalizado adicionado à política de JavaScript ou à política JavaCallout para estabelecer ligação aos serviços de back-end.
Ligações persistentes
A ligação persistente HTTP, também denominada HTTP keep-alive ou reutilização de ligações HTTP, é um conceito que permite que uma única ligação TCP envie e receba várias pedidos/respostas HTTP, em vez de abrir uma nova ligação para cada par de pedido/resposta.
O Apigee usa uma ligação persistente para comunicar com os serviços de back-end. Uma ligação permanece ativa durante 60 segundos por predefinição. Ou seja, se uma ligação estiver inativa no conjunto de ligações durante mais de 60 segundos, a ligação é fechada.
O período de limite de tempo de manutenção ativo é configurável através de uma propriedade denominada keepalive.timeout.millis
,
especificada na configuração do TargetEndpoint de um proxy de API. Por exemplo, o período de tempo de manutenção ativo pode ser definido como 30 segundos para um serviço de back-end específico no TargetEndpoint.
No exemplo abaixo, o keepalive.timeout.millis
está definido como 30 segundos na configuração do 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>
No exemplo acima, keepalive.timeout.millis
controla o comportamento de manutenção ativo para um serviço de back-end específico num proxy de API. Também existe uma propriedade que controla o comportamento de manutenção ativa para todos os serviços de back-end em todos os proxies. O HTTPTransport.keepalive.timeout.millis
é configurável no componente Message Processor. Esta propriedade também tem um valor predefinido de 60 segundos. Fazer modificações a esta propriedade afeta o comportamento da ligação de manutenção entre o
Apigee e todos os serviços de back-end em todos os proxies de API.
Antipattern
Não recomendamos que desative as ligações persistentes (manter ativas) definindo a propriedade keepalive.timeout.millis
como 0 na configuração TargetEndpoint de um proxy de API específico ou definindo HTTPTransport.keepalive.timeout.millis
como 0 nos processadores de mensagens, uma vez que
afeta o desempenho.
No exemplo abaixo, a configuração TargetEndpoint desativa as ligações persistentes (manter ativas) para um serviço de back-end específico definindo keepalive.timeout.millis
como 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>
Se as ligações keep-alive estiverem desativadas para um ou mais serviços de back-end, o Apigee tem de abrir uma nova ligação para cada novo pedido aos serviços de back-end de destino. Se o back-end for HTTPS, o Apigee também realiza o handshake SSL para cada novo pedido, o que aumenta a latência geral dos pedidos de API.
Impacto
- Aumenta o tempo de resposta geral dos pedidos de API, uma vez que o Apigee tem de abrir uma nova ligação e realizar a confirmação de SSL para cada novo pedido.
- As ligações podem esgotar-se em condições de tráfego elevado, uma vez que demoram algum tempo a ser libertadas para o sistema.
Prática recomendada
- Os serviços de back-end devem respeitar e processar a ligação persistente HTTP de acordo com as normas HTTP 1.1.
- Os serviços de back-end devem responder com um cabeçalho
Connection:keep-alive
se forem capazes de processar ligações persistentes (manter ativas). - Os serviços de back-end devem responder com um cabeçalho
Connection:close
se não conseguirem processar ligações persistentes.
A implementação deste padrão garante que o Apigee pode processar automaticamente a ligação persistente ou não persistente com os serviços de back-end, sem exigir alterações ao proxy de API.