Вы просматриваете документацию по Apigee Edge .
См. документацию по Apigee X.
Прокси-сервер 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
установлено значение 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.