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

Przeglądasz dokumentację Apigee Edge.
Otwórz dokumentację Apigee X.
Informacje

Serwer proxy interfejsu API to interfejs dla aplikacji klienckich służący do łączenia się z usługami backendu. Apigee Edge udostępnia wiele sposobów łączenia się z usługami backendu przez serwer proxy interfejsu API:

Stałe połączenia

Trwałe połączenie HTTP, nazywane też utrzymywaniem aktywności HTTP lub ponownym użyciem połączenia HTTP, to koncepcja, która pozwala pojedynczemu połączeniu TCP na wysyłanie i odbieranie wielu żądań i odpowiedzi HTTP zamiast otwierania nowego połączenia dla każdej pary żądania i odpowiedzi.

Apigee Edge używa stałego połączenia do komunikacji z usługami backendu. Domyślnie połączenie pozostaje aktywne przez 60 sekund. Oznacza to, że jeśli połączenie w puli połączeń będzie nieaktywne przez ponad 60 sekund, zostanie zamknięte.

Okres oczekiwania utrzymywania aktywności można ustawić za pomocą właściwości o nazwie keepalive.timeout.millis określonej w konfiguracji TargetEndpoint serwera proxy interfejsu API. Na przykład okres utrzymywania aktywności można ustawić na 30 sekund dla określonej usługi backendu w docelowym punkcie końcowym.

W tym przykładzie keepalive.timeout.millis w konfiguracji TargetEndpoint w konfiguracji TargetEndpoint jest ustawiony 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 określonej usługi backendu na serwerze proxy interfejsu API. Dostępna jest też właściwość, która kontroluje zachowanie aktywności wszystkich usług backendu we wszystkich serwerach proxy. Typ HTTPTransport.keepalive.timeout.millis można skonfigurować w komponencie procesora wiadomości. Ta właściwość też ma wartość domyślną 60 sekund. Wprowadzenie jakichkolwiek modyfikacji tej właściwości ma wpływ na zachowanie połączenia między Apigee Edge a wszystkimi usługami backendu we wszystkich serwerach proxy interfejsu API.

Antywzór

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

W przykładzie poniżej konfiguracja TargetEndpoint wyłącza trwałe (utrzymywane) połączenia dla określonej 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 utrzymywanie aktywnych połączeń jest wyłączone dla co najmniej 1 usługi backendu, Edge musi otwierać nowe połączenie dla każdego nowego żądania do docelowych usług backendu. Jeśli backend obsługuje protokół HTTP, Edge będzie też przeprowadzać uzgadnianie połączenia SSL dla każdego nowego żądania, co zwiększy ogólny czas oczekiwania żądań do interfejsu API.

Wpływ

  • Wydłuża ogólny czas odpowiedzi żądań do interfejsu API, ponieważ Apigee Edge musi otwierać nowe połączenie i przeprowadzać uzgadnianie połączenia SSL dla każdego nowego żądania.
  • W warunkach dużego natężenia ruchu połączenia mogą być wyczerpane, ponieważ zwolnienie połączeń z powrotem do systemu może trochę potrwać.

Sprawdzona metoda

  • Usługi backendu powinny obsługiwać trwałe połączenie HTTP zgodnie ze standardami HTTP 1.1.
  • Usługi backendu powinny odpowiadać nagłówkiem Connection:keep-alive, jeśli są w stanie obsługiwać trwałe połączenia (utrzymujące aktywność).
  • Usługi backendu powinny odpowiadać nagłówkiem Connection:close, jeśli nie są w stanie obsługiwać trwałych połączeń.

Implementacja tego wzorca sprawi, że Apigee Edge będzie w stanie automatycznie obsługiwać trwałe lub nietrwałe połączenie z usługami backendu bez konieczności wprowadzania zmian w serwerze proxy interfejsu API.

Więcej informacji