2013-07-03 3 views
1

долгого время слушателя, первый раз вызывающему на Stackoverflow :)ActiveMQ сети брокеров приводит к высокой латентности сообщения отправкой

У меня есть брокера ActiveMQ с производителем и потребителем. Продюсер подключается к брокеру activeMQ. Существует потребитель, который привязан к одному и тому же брокеру. Когда я отправляю сообщения с этой настройкой P -> B -> C, время ожидания мало и нет, а сообщения отправляются со скоростью 8 мс на сообщение.

Теперь я добавляю еще одного брокера для создания сети брокеров и отправки сообщений, используя следующую конфигурацию: P -> B1 -> B2 -> C занимает до 80 мс на сообщение.

Дополнительная информация:

P и B1 находятся в одном центре обработки данных, DC1.

B2 и C находятся в одном центре обработки данных, DC2.

DC1 и DC2 - это два разных центра обработки данных на одном и том же побережье с задержкой пинга около 20-30 мс.

Я использую конфигурацию по умолчанию, поставляемую с tar-файлом activemq. Единственная конфигурация, которую я добавил, - это подключение брокеров к созданию сети брокеров.

На B1 я добавил следующую конфигурацию, чтобы activemq.xml

<networkConnectors> 
</networkConnectors> 

На В2 я добавил следующую конфигурацию, чтобы activemq.xml

<networkConnectors> 
      <networkConnector name="B2" uri="static://(tcp://b1.prod.xxx.com:61616)" duplex="true"/> 
</networkConnectors> 

Это полнодуплексное соединение и В2 находится позади брандмауэр работает так, как рекламируется.

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

Что я делаю что-то неправильно?

редактировать:

Я вижу, что отправка сообщения от В1 до В2 принимает> 240ms за сообщение. Вот некоторая релевантная информация в activemq.log

2013-07-10 23: 05: 00,186 | TRACE | Инициализация задачи запуска 932 - Транспортное соединение с: vm: // broker1 # 0 | org.apache.activemq.thread.PooledTaskRunner: 128 | ActiveMQ BrokerService [broker1] Task-3

2013-07-10 23: 05: 00,187 | DEBUG | (broker1 -> broker2) ActiveMQBytesMessage {...} ActiveMQBytesMessage {...}, потребитель: ID: broker1-50755-1373522507018-2: 1: 1: 2, целевая тема: //LogMessageTopic.Server.xxx.com , brokerPath: [ID: broker1-50755-1373522507018-0: 1], сообщение: ActiveMQBytesMessage {...} ActiveMQBytesMessage {bytesOut = null, dataOut = null, dataIn = null} | org.apache.activemq.network.DemandForwardingBridgeSupport: 974 | ActiveMQ BrokerService [broker1] Task-3

2013-07-10 23: 05: 00,438 | TRACE | Инициализация задачи запуска 933 - Транспортное соединение с: vm: // broker1 # 0 | org.apache.activemq.thread.PooledTaskRunner: 128 | ActiveMQ BrokerService [broker1] Task-3

2013-07-10 23: 05: 00,439 | DEBUG | (broker1 -> broker2) ActiveMQBytesMessage {...} ActiveMQBytesMessage {...}, потребитель: ID: broker1-50755-1373522507018-2: 1: 1: 2, целевая тема: //LogMessageTopic.Server.xxx.com , brokerPath: [ID: broker1-50755-1373522507018-0: 1], сообщение: ActiveMQBytesMessage {...} ActiveMQBytesMessage {bytesOut = null, dataOut = null, dataIn = null} | org.apache.activemq.network.DemandForwardingBridgeSupport: 974 | ActiveMQ BrokerService [broker1] Task-3

2013-07-10 23: 05: 00,708 | TRACE | Инициализация задачи запуска 934 - Транспортное соединение с: vm: // broker1 # 0 | org.apache.activemq.thread.PooledTaskRunner: 128 | ActiveMQ BrokerService [broker1] Task-3

2013-07-10 23: 05: 00,709 | DEBUG | (broker1 -> broker2) ActiveMQBytesMessage {...} ActiveMQBytesMessage {...}, потребитель: ID: broker1-50755-1373522507018-2: 1: 1: 2, целевая тема: //LogMessageTopic.Server.xxx.com , brokerPath: [ID: broker1-50755-1373522507018-0: 1], сообщение: ActiveMQBytesMessage {...} ActiveMQBytesMessage {bytesOut = null, dataOut = null, dataIn = null} | org.apache.activemq.network.DemandForwardingBridgeSupport: 974 | ActiveMQ BrokerService [broker1] Task-3

2013-07-10 23: 05: 00,962 | TRACE | Инициализация задачи запуска 935 - Транспортное соединение с: vm: // broker1 # 0 | org.apache.activemq.thread.PooledTaskRunner: 128 | ActiveMQ BrokerService [broker1] Task-3

Похоже, что брокер для передачи данных через посредник занимает много времени.

Я пробовал настройку persistent = false и удалял с помощью KahaDB без каких-либо успехов.

+0

У меня есть несколько вопросов для разъяснения: 1) Когда вы говорите «отправлено со скоростью 8 мс на сообщение», вы имеете в виду, что у вас есть латентность 8 мс на сообщение или что вы отправляете сообщение каждые 8 ​​мс? 2) Предполагая, что вы имеете в виду латентность 8 мс (поскольку вы говорите о 10-кратном увеличении латентности позже). Как это возможно, когда есть латентность 20-30 мс между B1 и C? Просьба уточнить. – SirRichie

+0

SirRichie, 1) Это правильно. Задержка между P и B1 составляет 8 мс. 2) Задержка составляет 20-30 мс между B1 и B2 в DC1 и DC2. – geekay

+0

Я не очень хорошо читаю файлы журналов. Из того, что я могу определить, вы используете vm: // в качестве транспортного протокола?Вы обязательно должны переключиться на tcp: //; также попробуйте отправить TextMessage для целей тестирования, а не ByteMessage; и вопрос: как вы измеряете задержку? – SirRichie

ответ

1

Что вы видите, это эффект от хранения и пересылки в брокерской сети. Когда вы отправляете сообщение от P, это:

  • сохранено в B1 и подтверждено P как отправлено.
  • B1 затем переводит его в B2, который хранит его и подтверждает B1; B1 удаляет сообщение из своего локального хранилища.
  • B2 затем пересылает сообщение на C. Когда C потребляет его, он подтверждает сообщение B2, которое B2 удаляет из своего локального хранилища.

Сеть посредников сообщений не прозрачна так же, как и обычные сети. Механизм приема и диспетчеризации брокера эффективно разделяется друг от друга хранилищем сообщений, которое находится либо на диске, либо в памяти. Каждый брокер - это остановка на пути между производителем и потребителем. Поэтому в этом отношении я не удивлен, увидев более высокую задержку. Мне нравится аналогия, что это похоже на линию людей, проезжающих ведро с водой.

Для получения более подробного объяснения см. Understanding ActiveMQ Broker Networks.

Смежные вопросы