Страницы

Поиск по вопросам

пятница, 27 декабря 2019 г.

Сервер очередей под задачу

#клиент_сервер #очередь #rabbitmq #backgroundworker #gearman


Пытаюсь выбрать наиболее подходящий сервер очередей для такой задачи:
Есть алгоритм, который выполняется для определенного интервала, нужно разбить этот
интервал и вынести вычисления в воркеры (количество которых желательно задавать динамически
в зависимости от размера интервала), далее дождаться выполнения всех воркеров и выполнить
действия над вернувшимися значениями.

Я почитал, что для этого в принципе подходит gearman, но хотелось бы услышать еще
и ваши мнения. Также читал про популярный rabbitMq, но не нагуглил в нем возможности
задавать несколько воркеров.

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


Ответы

Ответ 1



RabbitMQ позволит тебе подключить к одной очереди несколько consumer-ов (см. http://www.rabbitmq.com/tutorials/tutorial-two-python.html Fair Dispatch). По поводу динамических консьюмеров - тут твое приложение само должно решать когда их запускать и как их выключать. Можешь запустить кол-во консьюмеров равное кол-ву ядер на машине и потом собирать данные. А твоя задача напоминает реализацию MapReduce. Может тебе имеет смысл взглянуть на Hadoop? Если все же хочешь написать сам, то по поводу языка можно выбрать Erlang/OTP (на нем написан RabbitMQ). Работа с потоками там построена очень хорошо и объединить несколько машин в кластер, с шарингом потоков, не составит труда. Твое приложение не будет думать о том, где и что выполняется, а просто ждать завершения всех воркеров и вернет результат. Но сломать мозг придется, прежде чем написать функциональный код :)

Ответ 2



Из того, что уже советовали - RabbitMQ. Если нагрузки маленькие и вам необязательна гарантируемость доставки, бурите его. В случае с Rabbit смиритесь с тем, что сообщения могут потеряться, смиритесь с тем, что при больших нагрузках кластер начнёт отказывать, смиритесь с тем, что при разделении сети будут проблемы. Можно ещё взять Apache Kafka. Там с этим лучше, но его настраивать очень сложно, чтоб он хорошо работал. Для вашей же задачи подойдёт Hadoop или Spark. Если хоститесь на амазоне, то с их лямбдами вроде как подобное можно реализовать.

Комментариев нет:

Отправить комментарий