<ph type="x-smartling-placeholder"></ph>
Vous consultez la documentation Apigee Edge.
Accédez à la page
Documentation sur Apigee X. En savoir plus
Un proxy d'API est une interface pour les applications clientes permettant de se connecter aux services de backend. Apigee Edge propose plusieurs façons de se connecter aux services de backend via un proxy d'API:
- TargetEndpoint pour se connecter à n'importe quel service HTTP/HTTPS, NodeJS ou cible hébergé.
- Stratégie ServiceCallout pour appeler tout service externe avant ou après un appel du serveur cible dans TargetEndpoint.
- Ajout d'un code personnalisé à la règle JavaScript ou à la règle JavaCallout pour se connecter aux services de backend.
Connexions persistantes
La connexion persistante HTTP, également appelée connexion HTTP ou connexion de message keep-alive HTTP réutilisée, est un concept qui permet à une connexion TCP unique d'envoyer et de recevoir plusieurs requêtes HTTP/réponses, au lieu d'ouvrir une nouvelle connexion pour chaque paire requête/réponse.
Apigee Edge utilise une connexion persistante pour communiquer avec les services de backend. Par défaut, une connexion reste active pendant 60 secondes. En d'autres termes, si une connexion est inactive dans le pool de connexion pendant plus de 60 secondes, la connexion se ferme.
Le délai avant expiration du message keep-alive est configurable via une propriété nommée keepalive.timeout.millis
, qui est spécifiée dans la configuration TargetEndpoint d'un proxy d'API. Par exemple, la période du message keep-alive peut être définie sur 30 secondes pour un service de backend spécifique dans TargetEndpoint.
Dans l'exemple ci-dessous, la valeur keepalive.timeout.millis
est définie sur 30 secondes dans la configuration 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>
Dans l'exemple ci-dessus, keepalive.timeout.millis
contrôle le comportement du message keep-alive d'un service de backend spécifique dans un proxy d'API. Il existe également une propriété qui contrôle le comportement du message keep-alive de tous les services de backend dans tous les proxys. La valeur HTTPTransport.keepalive.timeout.millis
est configurable dans le composant Message Processor. Cette propriété a également une valeur par défaut de 60 secondes. Toute modification apportée à cette propriété affecte le comportement de connexion du message keep-alive entre Apigee Edge et tous les services de backend de tous les proxys d'API.
Antimodèle
Il est déconseillé de désactiver les connexions persistantes (message keep-alive) en définissant la propriété keepalive.timeout.millis
sur 0 dans la configuration TargetEndpoint d'un proxy d'API spécifique, ou sur HTTPTransport.keepalive.timeout.millis
sur les processeurs de messages, car cela en affectera les performances.
Dans l'exemple ci-dessous, la configuration TargetEndpoint désactive les connexions persistantes (message keep-alive) à un service de backend spécifique en définissant keepalive.timeout.millis
sur 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 les connexions du message keep-alive sont désactivées pour un ou plusieurs services de backend, Edge doit ouvrir une nouvelle connexion pour chaque nouvelle requête adressée aux services de backend cibles. Si le backend est HTTPS, Edge effectue également un handshake SSL pour chaque nouvelle requête, ajoutant la latence globale des requêtes API.
Impact
- Accroît le temps de réponse global des requêtes API, car Apigee Edge doit ouvrir une nouvelle connexion et effectuer un handshake SSL pour chaque nouvelle requête.
- Les connexions peuvent être épuisées en cas de conditions de circulation élevées. En effet, il faut un certain temps pour rétablir les connexions au système.
Bonne pratique
- Les services de backend doivent respecter et gérer la connexion persistante HTTP conformément aux normes HTTP 1.1.
- Les services de backend doivent répondre avec un en-tête
Connection:keep-alive
s'ils sont en mesure de gérer les connexions persistantes (message keep-alive). - Les services de backend doivent répondre avec un en-tête
Connection:close
s'ils ne sont pas en mesure de gérer les connexions persistantes.
L'application de ce modèle permet de garantir qu'Apigee Edge peut automatiquement gérer une connexion persistante ou non persistante avec les services de backend, sans avoir à modifier le proxy d'API.