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.
Przejdź do Dokumentacja Apigee X.
informacje.

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

Połączenia trwałe

Trwałe połączenie HTTP, tzw. utrzymywania aktywności HTTP lub ponownego użycia połączeń HTTP. Pozwala na połączenie TCP do wysyłania i odbieranie wielu żądań HTTP/odpowiedzi, zamiast otwierać nowe połączenie dla każdej pary żądania/odpowiedzi.

Apigee Edge używa trwałego połączenia do komunikacji z usługami backendu. Połączenie zostaje zachowane domyślnie aktywne przez 60 sekund. Oznacza to, że jeśli połączenie w puli połączeń jest nieaktywne przez ponad 60 sekund i zostanie ono zamknięte.

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

W poniższym przykładzie wartość keepalive.timeout.millis w docelowym punkcie końcowym jest ustawiona na 30 sekund Konfiguracja:

<!-- /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 parametr keepalive.timeout.millis kontroluje zachowanie aktywności z określonej usługi backendu na serwerze proxy API. Istnieje też usługa, która kontroluje zachowanie aktywności we wszystkich usługach backendu we wszystkich serwerach proxy. HTTPTransport.keepalive.timeout.millis można skonfigurować w komponencie procesora wiadomości. Ta właściwość ma również wartość domyślną 60. sek. Wprowadzanie jakichkolwiek zmian w tej usłudze wpływa na utrzymanie aktywnego połączenia między Apigee Edge i wszystkie usługi backendu na wszystkich serwerach proxy interfejsu API.

Antywzór

Wyłączenie trwałych połączeń (utrzymywania aktywności) przez ustawienie właściwości keepalive.timeout.millis na 0 w konfiguracji punktu końcowego określonego dla określonego serwera proxy interfejsu API lub ustawiając parametr Wartość HTTPTransport.keepalive.timeout.millis na 0 w procesorach wiadomości nie jest rekomendowana jako wpłynie to na wydajność.

W przykładzie poniżej konfiguracja punktu końcowego (TargetEndpoint) wyłącza trwałe (utrzymujące) 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 dla co najmniej 1 usługi backendu wyłączone są utrzymujące aktywne połączenia, Edge musi otworzyć plik nowe połączenie dla każdego nowego żądania z docelowymi usługami backendu. Jeśli backend to HTTP, Edge będzie również uzgadniać połączenie SSL dla każdego nowego żądania, co zwiększy ogólną czasu oczekiwania żądań do interfejsu API.

Wpływ

  • Wydłuża ogólny czas odpowiedzi na żądania do interfejsu API, ponieważ Apigee Edge musi otworzyć nowe połączenie i uzgadniania połączenia SSL dla każdego nowego żądania.
  • Połączenia mogą się wyczerpywać w warunkach dużego natężenia ruchu, ponieważ zwalnianie połączeń zajmuje trochę czasu z powrotem do systemu.

Sprawdzona metoda

  • Usługi backendu powinny uwzględniać i obsługiwać trwałe połączenia HTTP zgodnie z protokołem HTTP 1.1 do standardów statystycznych.
  • Usługi backendu powinny odpowiedzieć nagłówkiem Connection:keep-alive, jeśli są w stanie obsługi trwałych połączeń (utrzymujących aktywność).
  • Usługi backendu powinny odpowiedzieć nagłówkiem Connection:close, jeśli nie mogą obsługi trwałych połączeń.

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

Więcej informacji