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