HTTP соединения в WMB/IIB

В данной статье мы раскроем тему HTTP-соединений в IBM Integration Bus/WebSphere Message Broker. Рассмотрим ключевые параметры HTTP-коннектора, их назначение, рекомендации по настройке, а так же команды для изменения этих параметров. Узнаем что делать при возникновении ошибок, связанных с использованием HTTP в IIB/WMB.

Стоит сразу отметить, что мы рассматриваем тот случай, когда IIB/WMB выступает в качестве сервера, обрабатывающего HTTP-запросы клиентов.

Топология развертывания

В IIB/WMB существуют два способа размещения HTTP-листнеров:

  1. На брокере (Broker-wide listeners), используется по умолчанию;
  2. На сервере интеграции (Integration server (embedded) listeners);

В первом случае, взаимодействие клиентов с флоу по HTTP осуществляется через процесс biphttplistner, где поднимается порт, по умолчанию 7080.

iib-http-1

Такая схема используется для балансировки запросов между несколькими идентичными флоу, расположенными в разных группах исполнения (серверах интеграции). Также обеспечивается некоторая степень отказоустойчивости – если один из серверов интеграции упадет, другие будут успешно обрабатывать запросы. Однако, узким местом в такой схеме является единая точка отказа – процесс biphttplistner, который может не справиться при очень большом потоке запросов.

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

iib-http-2

Такая схема используется для разделения потока запросов между серверами и обеспечения высокой пропускной способности. Однако, она лишена возможностей масштабируемости и отказоустойчивости.

Лучшим решением является использование внешнего HTTP-сервера (IBM HTTP Server), который с использованием WebSphere Plug-in будет распределять нагрузку между несколькими серверами и узлами интеграции. Но это совсем другая тема. А пока понимание используемой топологии нужно нам для того, что бы корректно работать с настройками HTTP-коннектора. Т.е. чтобы понимать где необходимо произвести изменение – на брокере или на сервере интеграции.

Как перейти с листнера узла интеграции на встроенные HTTP-листнеры серверов интеграции было рассмотренно в статье Установка и базовая настройка IBM Integration Bus V9. Стоит отметить, что SOAP ноды используют встроенные HTTP-листнеры по умолчанию.

Непостоянные соединения

Для обслуживания сотен и тысяч клиентов, когда необходимо создавать короткие отдельные соединения с HTTP-сервером, используются непостоянные соединения (non-persistent connections или short-lived connections). Это работает так: когда клиент делает HTTP-запрос, открывается новое TCP-соединение с клиента на сервер. После того, как от HTTP-сервера будет отправлен ответ, TCP-соединение завершается. Для следующего запроса от этого же клиента открывается новое TCP-соединение.

Число возможных одновременных соединений ограничивается параметром maxThreads.

Узнать установленные значения параметров HTTP-коннектора, в том числе maxThreads, можно используя команды:

Для HTTP-коннектора на брокере/узле интеграции (broker wide listener):

mqsireportproperties broker_name -b httplistener -o HTTPConnector -a

Для HTTP-коннектора сервера интеграции (embedded listener):

mqsireportproperties broker_name -e EG_name -o HTTPConnector -a

Например:

Если выполнить команду для получения параметров HTTP-коннектора с ключом “-r” (Display all attribute values (recursive)), например так:

mqsireportproperties broker_name -e EG_name -o HTTPConnector -r

То мы получим развернутую информацию о коннекторе, в том числе URL приложений, развернутых на сервере:

Для изменения значения параметра maxThreads  используется команда:

Для HTTP-коннектора на брокере/узле интеграции (broker wide listener):

mqsichangeproperties broker_name -b httplistener -o HTTPConnector -n maxThreads -v 2000

Для HTTP-коннектора сервера интеграции (embedded listener):

mqsichangeproperties broker_name -e EG_name -o HTTPConnector -n maxThreads -v 500

Перед изменением этого параметра необходимо убедиться, что в системе достаточно ресурсов (таких как адресуемая память) для создания новых клиентских соединений. Иначе ресурсы могут закончиться быстрее чем будет достигнуто количество maxThreads.

По умолчанию значение параметра maxThreads равно 200. Но это не означает, что 201 клиент при попытке соединения сразу получит ошибку “Connection Refused”. Существует внутренняя очередь коннектов, куда помещаются запросы на создание соединений если все maxThreads заняты. Глубина очереди определяется параметром acceptCount. По умолчанию значение acceptCount равно 100. Если будет превышено число maxThreads + acceptCount, то клиент при попытке соединения получит ошибку “Connection Refused”. Для большинства случаев достаточно установленного по умолчанию значения. Однако, если Вы хотите изменить значение acceptCount, это можно сделать следующими командами:

Для HTTP-коннектора на брокере/узле интеграции (broker wide listener):

mqsichangeproperties broker_name -b httplistener -o HTTPConnector -n acceptCount -v 200

Для HTTP-коннектора сервера интеграции (embedded listener):

mqsichangeproperties broker_name -e EG_name -o HTTPConnector -n acceptCount -v 200

При увеличении maxThreads рекомендуется увеличить размер JVM для процессов biphttplistener и/или сервера интеграции для того, что бы JVM могла выделить больше потоков для входящих соединений.

По умолчанию, максимальный размер JVM для biphttplistener составляет 192 MB, для сервера интеграции 256 MB.

Для того, что бы изменить максимальный размер JVM используются команды:

Для HTTP-коннектора на брокере/узле интеграции (broker wide listener):

mqsiservice broker_name -r MaxJVMHeapSize=536870912

Для сервера интеграции:

mqsichangeproperties broker_name -e EG_name -o ComIbmJVMManager -n jvmMaxHeapSize -v 536870912

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

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

Если клиент использует HTTP 1.1 и в заголовке запроса не указывает Connection: close постоянные соединения используются по умолчанию.

Существует свойство maxKeepAliveRequests, определяющее максимальное количество запросов, которое может быть сделано по одному коннекту. По умолчанию это значение равно 100. Следующий запрос клиента создаст новый сокет по которому снова будет возможно отправить 100 запросов.

Команда для изменения параметра maxKeepAliveRequests:

Для HTTP-коннектора на брокере/узле интеграции (broker wide listener):

mqsichangeproperties broker_name -b httplistener -o HTTPConnector -n maxKeepAliveRequests -v 200

Для HTTP-коннектора сервера интеграции (embedded listener):

mqsichangeproperties broker_name -e EG_name -o HTTPConnector -n maxKeepAliveRequests -v 200

Мы рассмотрели основные параметры HTTP-коннектора IIB/WMB. О других параметрах можно узнать здесь.

Ошибки связанные с HTTP соединениями

Иногда, в системном логе IIB/WMB можно увидеть следующие сообщения:

У этой проблемы есть два варианта решения:

1. В сервере интеграции/брокере не хватает потоков для обработки http-соединений.

Можно проверить сколько установлено соединений к серверу интеграции/брокеру в данный момент с помощью команды:

netstat -anp | grep 7800 | grep ESTABLISHED | wc -l

Где 7800 – порт сервера интеграции/брокера.

Это число не должно превышать значения maxThreads, определенного для сервера интеграции/брокера.

2. На флоу не хватает инстансов для обработки запросов.

Следует обратить внимание на настройку additional Instances флоу, обрабатывающих http запросы, которые задеплоены в сервере интеграции, указанном в сообщении:

IBM Integration Bus v9003 (MYIIB.APP_EG_7800)

Для параметра additional Instances значение по умолчанию 0, это значит, что обработка ведется в один поток. При интенсивной нагрузке на веб-сервис этого недостаточно и следует увеличить количество дополнительных экземпляров потока.

VN:F [1.9.22_1171]
Rating: 4.8/5 (4 votes cast)
Метки: , , , ,
Опубликовано в WebSphere Message Broker, Тюнинг
2 комментария на “HTTP соединения в WMB/IIB
  1. Сергей:

    Спасибо. Много не знал.

    VA:F [1.9.22_1171]
    Rating: 0 (from 0 votes)
  2. sandeep:

    Please share doc in english.

    VA:F [1.9.22_1171]
    Rating: 0 (from 0 votes)

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">

Выбор языка: