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

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

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

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

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

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

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

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

<!-- /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 можно настроить в компоненте процессора сообщений. Это свойство также имеет значение по умолчанию — 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 должен открывать новое соединение для каждого нового запроса к целевым внутренним службам. Если серверная часть использует HTTPs, Edge также будет выполнять SSL-подтверждение для каждого нового запроса, увеличивая общую задержку запросов API.

Влияние

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

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

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

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

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