Антипаттерн: отключить постоянные (многократно используемые) соединения HTTP.

Вы просматриваете документацию по Apigee Edge .
См. документацию по Apigee X.

Прокси-сервер API — это интерфейс для клиентских приложений, используемый для подключения к серверным службам. Apigee Edge предоставляет несколько способов подключения к серверным службам через прокси-сервер API:

Постоянные соединения

Постоянное соединение HTTP , также называемое HTTP keep-alive или повторным использованием HTTP-соединения, — это концепция, которая позволяет одному TCP- соединению отправлять и получать несколько HTTP-запросов /ответов вместо открытия нового соединения для каждой пары запрос/ответ.

Apigee Edge использует постоянное соединение для связи с серверными службами. Соединение остается активным в течение 60 секунд по умолчанию. То есть, если соединение простаивает в пуле соединений более 60 секунд, то соединение закрывается.

Период ожидания проверки активности настраивается с помощью свойства с именем keepalive.timeout.millis , указанного в конфигурации TargetEndpoint прокси-сервера API. Например, период времени поддержания активности может быть установлен на 30 секунд для конкретной серверной службы в TargetEndpoint.

В приведенном ниже примере для keepalive.timeout.millis установлено значение 30 секунд в конфигурации TargetEndpoint:

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

В приведенном выше примере keepalive.timeout.millis управляет поведением поддержания активности для конкретной серверной службы в прокси-сервере API. Существует также свойство, которое управляет поведением поддержания активности для всех серверных служб во всех прокси. HTTPTransport.keepalive.timeout.millis настраивается в компоненте Message Processor. Это свойство также имеет значение по умолчанию, равное 60 секундам. Внесение любых изменений в это свойство влияет на поведение поддержания соединения между Apigee Edge и всеми серверными службами во всех прокси-серверах API.

Антипаттерн

Не рекомендуется отключать постоянные (поддерживающие) соединения путем установки для свойства keepalive.timeout.millis значения 0 в конфигурации TargetEndpoint определенного прокси-сервера API или установки для HTTPTransport.keepalive.timeout.millis значения 0 в обработчиках сообщений, поскольку это повлияет на производительность. .

В приведенном ниже примере конфигурация TargetEndpoint отключает постоянные (поддерживающие активность) соединения для определенной серверной службы, устанавливая для keepalive.timeout.millis значение 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>

Если поддерживающие соединения отключены для одной или нескольких серверных служб, Edge должен открывать новое соединение для каждого нового запроса к целевым внутренним службам. Если серверная часть использует HTTP, Edge также будет выполнять рукопожатие SSL для каждого нового запроса, увеличивая общую задержку запросов API.

Влияние

  • Увеличивает общее время отклика на запросы API, поскольку Apigee Edge должен открывать новое соединение и выполнять подтверждение SSL для каждого нового запроса.
  • Соединения могут быть исчерпаны в условиях высокого трафика, так как для возврата соединений в систему требуется некоторое время.

Лучшая практика

  • Бэкэнд-сервисы должны учитывать и обрабатывать постоянное соединение HTTP в соответствии со стандартами HTTP 1.1.
  • Бэкенд-сервисы должны отвечать заголовком Connection:keep-alive если они могут обрабатывать постоянные (поддерживающие активность) соединения.
  • Бэкенд-сервисы должны отвечать заголовком Connection:close если они не могут обрабатывать постоянные подключения.

Реализация этого шаблона гарантирует, что Apigee Edge сможет автоматически обрабатывать постоянное или непостоянное соединение с серверными службами, не требуя изменений в прокси-сервере API.

дальнейшее чтение