Antywzór: wyłącza trwałe połączenia HTTP (umożliwiające podtrzymywanie aktywności) połączenia wielokrotnego użytku

Wyświetlasz dokumentację Apigee Edge.
Przejdź do dokumentacji Apigee X.
info

Proxy interfejsu API to interfejs dla aplikacji klienckich używany do łączenia się z usługami backendu. Apigee Edge udostępnia kilka sposobów łączenia się z usługami backendu za pomocą proxy interfejsu API:

Trwałe połączenia

Trwałe połączenie HTTP, nazywane też utrzymywaniem aktywności HTTP lub ponownym wykorzystywaniem połączeń HTTP, to koncepcja, która umożliwia wysyłanie i odbieranie wielu żądań HTTP/odpowiedzi za pomocą jednego połączenia TCP zamiast otwierania nowego połączenia dla każdej pary żądanie/odpowiedź.

Apigee Edge używa trwałych połączeń do komunikacji z usługami backendu. Domyślnie połączenie pozostaje aktywne przez 60 sekund. Oznacza to, że jeśli połączenie jest bezczynne w puli połączeń przez ponad 60 sekund, zostanie zamknięte.

Czas oczekiwania na utrzymywanie aktywności można skonfigurować za pomocą właściwości keepalive.timeout.millis, określonej w konfiguracji TargetEndpoint proxy interfejsu API. Na przykład czas utrzymywania aktywności można ustawić na 30 sekund w przypadku konkretnej usługi backendu w TargetEndpoint.

W poniższym przykładzie w konfiguracji TargetEndpoint ustawiono wartość keepalive.timeout.millis na 30 sekund:

<!-- /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>

W powyższym przykładzie keepalive.timeout.millis kontroluje zachowanie utrzymywania aktywności w przypadku konkretnej usługi backendu w proxy interfejsu API. Istnieje też właściwość, która kontroluje zachowanie utrzymywania aktywności w przypadku wszystkich usług backendu we wszystkich serwerach proxy. Właściwość HTTPTransport.keepalive.timeout.millis można skonfigurować w komponencie procesora komunikatów. Ta właściwość ma też wartość domyślną 60 sekund. Wprowadzenie jakichkolwiek zmian w tej właściwości wpływa na zachowanie połączenia utrzymywania aktywności między Apigee Edge a wszystkimi usługami backendu we wszystkich proxy interfejsu API.

Antywzorzec

Wyłączenie trwałych połączeń (utrzymywania aktywności) przez ustawienie właściwości keepalive.timeout.millis na 0 w konfiguracji TargetEndpoint konkretnego proxy interfejsu API lub ustawienie HTTPTransport.keepalive.timeout.millis na 0 w procesorach wiadomości nie jest zalecane, ponieważ wpłynie to na wydajność.

W poniższym przykładzie konfiguracja TargetEndpoint wyłącza trwałe połączenia (utrzymywanie aktywności) w przypadku konkretnej usługi backendu przez ustawienie keepalive.timeout.millis na 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>

Jeśli trwałe połączenia są wyłączone w przypadku co najmniej 1 usługi backendu, Edge musi otworzyć nowe połączenie dla każdego nowego żądania do docelowych usług backendu. Jeśli backend jest HTTPs, Edge będzie też wykonywać uzgadnianie SSL dla każdego nowego żądania, co zwiększy ogólne opóźnienie żądań interfejsu API.

Wpływ

  • Zwiększa ogólny czas odpowiedzi na żądania interfejsu API, ponieważ Apigee Edge musi otworzyć nowe połączenie i przeprowadzić uzgadnianie SSL dla każdego nowego żądania.
  • W warunkach dużego ruchu połączenia mogą zostać wyczerpane, ponieważ zwolnienie połączeń z powrotem do systemu zajmuje trochę czasu.

Sprawdzona metoda

  • Usługi backendu powinny honorować i obsługiwać trwałe połączenia HTTP zgodnie ze standardami HTTP 1.1 standards.
  • Usługi backendu powinny odpowiadać nagłówkiem Connection:keep-alive, jeśli mogą obsługiwać trwałe połączenia (utrzymywanie aktywności).
  • Usługi backendu powinny odpowiadać nagłówkiem Connection:close, jeśli nie mogą obsługiwać trwałych połączeń.

Wdrożenie tego wzorca zapewni, że Apigee Edge będzie automatycznie obsługiwać trwałe i nietrwałe połączenia z usługami backendu bez konieczności wprowadzania zmian w proxy interfejsu API.

Więcej informacji