Esta é a documentação do Apigee Edge.
Acesse
Documentação da Apigee X. informações
Um proxy de API é uma interface para aplicativos clientes usados para se conectar a serviços de back-end. O Apigee Edge oferece várias maneiras de se conectar a serviços de back-end por meio de um proxy de API:
- TargetEndpoint para se conectar a qualquer serviço HTTP/HTTPs, NodeJS ou Hosted Target.
- Política ServiceCallout para invocar qualquer serviço externo pré ou pós invocação do servidor de destino em TargetEndpoint.
- Código personalizado adicionado à política de JavaScript ou à política de JavaCallout para se conectar a serviços de back-end.
Conexões persistentes
Conexão permanente HTTP, também chamada de keep-alive HTTP ou reutilização de conexão HTTP, é um conceito que permite apenas uma conexão TCP enviar e receber várias respostas/solicitações HTTP, em vez de abrir uma nova conexão para cada par de solicitação/resposta.
O Apigee Edge usa uma conexão permanente para se comunicar com serviços de back-end. Por padrão, uma conexão permanece ativa por 60 segundos. Ou seja, se uma conexão estiver inativa no pool por mais de 60 segundos, ela será encerrada.
O tempo limite de sinal de atividade é configurável por meio de uma propriedade chamada keepalive.timeout.millis
,
especificada na configuração do TargetEndpoint de um proxy de API. Por exemplo, o período de
sinal de atividade 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 do sinal de atividade de um
serviço de back-end específico em um proxy de API. Há também uma propriedade que controla o comportamento do sinal de atividade
de todos os serviços de back-end em todos os proxies. O HTTPTransport.keepalive.timeout.millis
é configurável no componente "Processador de mensagens". Essa propriedade também tem um valor padrão de 60
segundos. Fazer modificações nessa propriedade afeta o comportamento de conexão do sinal de atividade entre o
Apigee Edge e todos os serviços de back-end em todos os proxies da API.
Antipadrão
Não é recomendável desativar as conexões persistentes (sinal de atividade) 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, porque
isso afetará o desempenho.
No exemplo abaixo, a configuração TargetEndpoint desativa conexões permanentes (sinal de atividade)
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 conexões de sinal de atividade forem desativadas para um ou mais serviços de back-end, o Edge precisará abrir uma nova conexão para cada nova solicitação para os serviços de back-end de destino. Se o back-end for HTTPs, o Edge também executará um handshake SSL para cada nova solicitação, acrescentando a latência geral das solicitações de API.
Impacto
- aumenta o tempo total de resposta das solicitações de API, porque o Apigee Edge precisa abrir uma nova conexão e executar um handshake SSL para cada nova solicitação.
- As conexões podem se esgotar em condições de alto tráfego, já que leva algum tempo para liberar conexões com o sistema.
Prática recomendada
- Os serviços de back-end devem respeitar e processar a conexão permanente HTTP de acordo com os padrões HTTP 1.1.
- Os serviços de back-end precisam responder com um cabeçalho
Connection:keep-alive
se puderem processar conexões permanentes (sinal de atividade). - Os serviços de back-end precisam responder com um cabeçalho
Connection:close
se não conseguirem lidar com conexões persistentes.
A implementação desse padrão garantirá que o Apigee Edge possa lidar automaticamente com uma conexão persistente ou não persistentes com serviços de back-end, sem exigir alterações no proxy de API.