Sie lesen gerade die Dokumentation zu Apigee Edge.
Zur
Dokumentation zuApigee X wechseln. info
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 Backend-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 Backend-Diensten herzustellen.
Persistente Verbindungen
Das Konzept der vollständigen HTTP-Verbindung, auch HTTP-Keep-Alive- oder Wiederverwendung der HTTP-Verbindung genannt, ermöglicht einer einzelnen TCP-Verbindung das Senden und Empfangen mehrerer HTTP-Anfragen/-Antworten, anstatt eine neue Verbindung für jedes Anfrage-/Antwort-Paar herzustellen.
Apigee Edge verwendet für die Kommunikation mit Back-End-Diensten eine nichtflüchtige Verbindung. 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 für einen bestimmten Back-End-Dienst im TargetEndpoint beispielsweiseauf 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 Backend-Dienst in einem API-Proxy. Es gibt auch ein Attribut, das das Keep-Alive-Verhalten für alle Backend-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 Keep-Alive-Verhalten der Verbindung zwischen
Apigee Edge und allen Backend-Diensten in allen API-Proxys aus.
Anti-Pattern
Das Deaktivieren von nichtflüchtigen (Keep-Alive-)Verbindungen, indem Sie das Attribut keepalive.timeout.millis
auf 0 in der TargetEndpoint-Konfiguration eines bestimmten API-Proxys oder
HTTPTransport.keepalive.timeout.millis auf 0 in Message Processors setzen, wird nicht empfohlen, da
dies die Leistung beeinträchtigt.
Im folgenden Beispiel deaktiviert die TargetEndpoint-Konfiguration nichtflüchtige (Keep-Alive-)Verbindungen
für einen bestimmten Backend-Dienst durch Festlegung von keepalive.timeout.millis auf 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>
Wenn Keep-Alive-Verbindungen für einen oder mehrere Backend-Dienste deaktiviert sind, muss Edge für jede neue Anfrage an die Ziel-Backend-Dienste eine neue Verbindung herstellen. Wenn das Backend HTTPS ist, führt Edge für jede neue Anfrage einen SSL-Handshake aus, was die Gesamtlatenz von API-Anfragen erhöht.
Auswirkungen
- Erhöht die Gesamtantwortzeit von API-Anfragen, da Apigee Edge eine neue Verbindung öffnen und einen SSL-Handshake für jede neue Anfrage 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
- Backend-Dienste müssen die HTTP-Verbindung gemäß den HTTP 1.1-Standards anerkennen und verarbeiten.
- Backend-Dienste sollten mit einem
Connection:keep-alive-Header antworten, wenn dieser in der Lage ist, nichtflüchtige (Keep-Alive-)Verbindungen zu verarbeiten. - Backend-Dienste sollten mit einem
Connection:closeHeader antworten, wenn dieser nicht in der Lage ist, nichtflüchtige Verbindungen zu verarbeiten.
Durch die Implementierung dieses Musters kann Apigee Edge sicherstellen, dass dauerhafte oder nicht dauerhafte Verbindungen mit Back-End-Diensten automatisch verarbeitet werden können, ohne Änderungen am API-Proxy vorzunehmen.