Вы просматриваете документацию Apigee Edge .
Перейдите в документацию Apigee X.info
API-прокси — это интерфейс для клиентских приложений, используемый для подключения к серверным службам. Apigee Edge предоставляет несколько способов подключения к серверным службам через API-прокси:
- TargetEndpoint для подключения к любым HTTP/HTTP-сервисам, NodeJS или Hosted Target.
- Политика ServiceCallout разрешает вызов любой внешней службы до или после вызова целевого сервера в TargetEndpoint .
- В политику JavaScript или политику JavaCallout добавляется пользовательский код для подключения к серверным службам.
Постоянные соединения
Постоянное HTTP-соединение , также называемое HTTP keep-alive или повторным использованием HTTP-соединения, — это концепция, которая позволяет одному TCP- соединению отправлять и получать несколько HTTP-запросов /ответов, вместо открытия нового соединения для каждой пары запрос/ответ.
Apigee Edge использует постоянное соединение для связи с бэкэнд-сервисами. По умолчанию соединение остается активным в течение 60 секунд. То есть, если соединение находится в пуле соединений бездействующим более 60 секунд, оно закрывается.
Период ожидания "поддержания соединения" можно настроить с помощью свойства keepalive.timeout.millis , указанного в конфигурации TargetEndpoint API-прокси. Например, период ожидания "поддержания соединения" можно установить на 30 секунд для конкретной серверной службы в TargetEndpoint.
В приведенном ниже примере параметр keepalive.timeout.millis в конфигурации TargetEndpoint установлен на 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 можно настроить в компоненте Message Processor. Значение этого свойства по умолчанию составляет 60 секунд. Любые изменения этого свойства влияют на поведение поддержания соединения между Apigee Edge и всеми бэкэнд-сервисами во всех API-прокси.
Антипаттерн
Отключение постоянных (поддерживающих) соединений путем установки свойства keepalive.timeout.millis в значение 0 в конфигурации TargetEndpoint конкретного API-прокси или установки значения HTTPTransport.keepalive.timeout.millis в значение 0 в обработчиках сообщений не рекомендуется, поскольку это повлияет на производительность.
В приведенном ниже примере конфигурация TargetEndpoint отключает постоянные (keep alive) соединения для определенной серверной службы, устанавливая параметр 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-прокси.