Anti-Pattern: Nichtflüchtige HTTP-Verbindungen (wiederverwendbare Keep-Alive-Verbindungen) deaktivieren

<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:

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.

Weitere Informationen