Sie sehen die Dokumentation zu Apigee Edge.
Zur Apigee X-Dokumentation weitere Informationen
Ein API-Proxy ist eine Schnittstelle für Client-Anwendungen, die für die Verbindung mit Backend-Diensten verwendet wird. Apigee Edge bietet mehrere Möglichkeiten, eine Verbindung zu Back-End-Diensten über einen API-Proxy herzustellen:
- TargetEndpoint, um eine Verbindung zu HTTP/HTTP-, NodeJS- oder gehosteten Zieldiensten herzustellen.
- ServiceCallout-Richtlinie zum Aufrufen eines beliebigen externen Dienstes vor oder nach dem Aufrufen des Zielservers in TargetEndpoint.
- Benutzerdefinierter Code, der der JavaScript-Richtlinie oder der JavaCallout-Richtlinie hinzugefügt wird, um eine Verbindung zu Back-End-Diensten herzustellen.
Persistente Verbindungen
Persistente HTTP-Verbindung, auch HTTP-Keep-Alive oder Wiederverwendung von HTTP-Verbindungen genannt, ist ein Konzept, das es einer einzelnen TCP-Verbindung ermöglicht, mehrere HTTP-Anfragen/-Antworten/-Antworten zu senden und zu empfangen, anstatt für jedes Anfrage/Antwort-Paar eine neue Verbindung herzustellen.
Apigee Edge verwendet eine persistente Verbindung für die Kommunikation mit Back-End-Diensten. Eine Verbindung bleibt standardmäßig 60 Sekunden aktiv. Wenn also eine Verbindung länger als 60 Sekunden inaktiv ist, wird die Verbindung geschlossen.
Das Zeitlimit für KeepAlive kann über ein Attribut namens keepalive.timeout.millis
konfiguriert werden, das in der TargetEndpoint-Konfiguration eines API-Proxys angegeben ist. Der Keep-Alive-Zeitraum kann beispielsweise für einen bestimmten Back-End-Dienst in TargetEndpoint auf 30 Sekunden festgelegt werden.
Im folgenden Beispiel wird keepalive.timeout.millis
in der TargetEndpoint-Konfiguration auf 30 Sekunden festgelegt:
<!-- /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>
Im obigen Beispiel steuert keepalive.timeout.millis
das Keep-Alive-Verhalten für einen bestimmten Back-End-Dienst in einem API-Proxy. Es gibt auch ein Attribut, das das Live-Verhalten für alle Back-End-Dienste in allen Proxys steuert. HTTPTransport.keepalive.timeout.millis
kann in der Message Processor-Komponente konfiguriert werden. Dieses Attribut hat auch einen Standardwert von 60 Sekunden. Änderungen an diesem Attribut wirken sich auf das Verbindungsverhalten zwischen Apigee Edge und allen Back-End-Diensten in allen API-Proxys aus.
Anti-Pattern
Persistente (Keep-Alive-)Verbindungen sollten nicht deaktiviert werden. Dazu setzen Sie das Attribut keepalive.timeout.millis
in der TargetEndpoint-Konfiguration eines bestimmten API-Proxys auf 0 oder HTTPTransport.keepalive.timeout.millis
auf Message Processorn auf 0, da dies die Leistung beeinträchtigt.
Im folgenden Beispiel deaktiviert die TargetEndpoint-Konfiguration persistente (Keep-Alive-)Verbindungen für einen bestimmten Back-End-Dienst, indem keepalive.timeout.millis
auf 0 gesetzt wird:
<!-- /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>
Wenn Keep-Alive-Verbindungen für einen oder mehrere Back-End-Dienste deaktiviert sind, muss Edge für jede neue Anfrage an die Ziel-Back-End-Dienste eine neue Verbindung öffnen. Wenn das Back-End HTTPS ist, führt Edge auch einen SSL-Handshake für jede neue Anfrage aus, was zur Gesamtlatenz von API-Anfragen beiträgt.
Auswirkungen
- Erhöht die Gesamtantwortzeit von API-Anfragen, da Apigee Edge eine neue Verbindung öffnen und für jede neue Anfrage einen SSL-Handshake ausführen muss.
- Verbindungen können bei starkem Traffic ausgeschöpft werden, da es einige Zeit dauert, bis Verbindungen wieder im System freigegeben werden.
Best Practice
- Back-End-Dienste sollten nichtflüchtige HTTP-Verbindungen in Übereinstimmung mit HTTP 1.1-Standards berücksichtigen und verarbeiten.
- Back-End-Dienste sollten mit einem
Connection:keep-alive
-Header antworten, wenn sie dauerhafte Verbindungen (Keep-Alive) verarbeiten können. - Back-End-Dienste sollten mit einem
Connection:close
-Header antworten, wenn sie keine dauerhaften Verbindungen verarbeiten können.
Durch die Implementierung dieses Musters wird sichergestellt, dass Apigee Edge automatisch eine persistente oder nicht persistente Verbindung mit Back-End-Diensten verarbeiten kann, ohne Änderungen am API-Proxy erforderlich zu machen.