2013-12-18 3 views
3

Я смотрел на сокеты ZMQ PUSH/PULL, и хотя мне очень нравится простота (особенно по сравнению с пользовательской фрагментацией/ack, которую я реализую прямо сейчас в системе через сокеты UDP), я бы хотел для пользовательской балансировки нагрузки вместо наивного кругового вращения (я считаю), который используют сокеты ZMQ PUSH/PULL.Розетки ZMQ с пользовательской балансировкой нагрузки

Я новичок в ZQM и не знаю, как я могу реализовать его, используя гнезда ZMQ, и если это вообще возможно. То, что я бы идеально хотел, - это порция гнезда PUSH (или другого типа сокета) определяет (на основе сообщений и т. Д.), Какой машине отправить сообщение.

Так что мои вопросы:

  1. Возможно ли это?
  2. Если да, то какой шаблон ZMQ будет работать лучше всего для него?
  3. Как использовать эти сокеты?

ответ

3

Если вы хотите иметь настраиваемую маршрутизацию, вы должны использовать сокеты ROUTER, а затем использовать маршрутизацию на основе IDENTITY. Существует example in the Guide, иллюстрирующий, как построить простую маршрутизацию LRU с помощью ROUTER-сокета (т. Е. Ведет себя так же, как PUSH). Вам просто нужно написать свою собственную логику для определения того, какой рабочий IDENTITY получает каждое сообщение.

+0

Итак, скажем, у меня есть один «мастер», отправляющий работу на несколько рабочих узлов ... У меня бы были как ROUTER, так и «клиентские» REQ-сокеты (ы) на одном и том же узле справа? И балансир нагрузки просто подобрал бы соответствующий рабочий узел? – mtahmed

+0

@mtahmed Нет, сервер ROUTER, рабочие (клиенты) REQ или предпочтительно async DEALERs, и они находятся на отдельных узлах, а не на одном узле. – raffian

+1

Вы можете иметь их везде, где вам больше всего подходит, zmq все равно. Если ваши рабочие находятся на нескольких узлах, тогда балансировщик нагрузки не может находиться на том же узле, что и все ваши рабочие. – minrk

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