<ph type="x-smartling-placeholder"></ph>
Sie sehen die Dokumentation zu Apigee Edge.
Gehen Sie 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, über einen API-Proxy eine Verbindung zu Back-End-Diensten 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 eine persistente Verbindung zur 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 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 dieser Eigenschaft wirken sich auf das Keep-Alive-Verbindungsverhalten zwischen
Apigee Edge und alle Back-End-Dienste in allen API-Proxys.
Anti-Pattern
Das Deaktivieren von nichtflüchtigen (Keep-Alive-)Verbindungen, indem Sie das Attribut keepalive.timeout.millis
in der TargetEndpoint-Konfiguration eines bestimmten API-Proxys auf 0 oder in Message Processors HTTPTransport.keepalive.timeout.millis
auf 0 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 Back-End-Dienste deaktiviert sind, muss Edge eine neue Verbindung für jede neue Anfrage an die Ziel-Back-End-Dienste. Wenn das Back-End HTTPS ist, Edge führt auch einen SSL-Handshake für jede neue Anfrage durch, was zur gesamten Latenz von API-Anfragen.
Auswirkungen
- Erhöht die Gesamtantwortzeit von API-Anfragen, da Apigee Edge eine neue Verbindung öffnen und und führen für jede neue Anfrage einen SSL-Handshake aus.
- 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:close
-Header antworten, wenn dieser nicht in der Lage ist, nichtflüchtige Verbindungen zu verarbeiten.
Durch die Implementierung dieses Musters wird sichergestellt, dass Apigee Edge automatisch persistente oder nicht persistente Verbindung mit Back-End-Diensten, ohne dass Änderungen am API-Proxy erforderlich sind.