У меня есть следующая цель для завершения.
Предположим, у меня есть следующий набор
1,2,3,4,5,6
А потом 3 условия
the first number must be even
the second number must be odd
the sum of first 3 numbers must be 12
Чтобы найти правильный набор, моя цель — создать случайные наборы и проверить, соответствуют ли они условиям.
1,3,2,5,4,6 - 0 conditions
2,4,3,5,6,1 - 1 condition
2,3,4,5,6,1 - 2 conditions
4,5,3,2,6,1 - 3 conditions. All conditions met, this is our set
Это очень простой пример, будет гораздо больше данных и намного больше условий. Почему я использую этот способ, чтобы найти набор? Поскольку при наличии такого количества правил невозможно найти правильный набор, а иногда невозможно найти набор, удовлетворяющий всем условиям, поэтому у меня будет проверка, которая позволит, например, выполнить набор из более чем 80% условий.
Поэтому я хочу обработать это на нескольких серверах, пока не найду действительные наборы. Вероятно, я буду использовать инстансы Amazon s3.
Я изучал RabbitMQ и Celery, но, насколько я понял, они больше похожи на настройку очереди, а не на параллельную обработку. Кроме того, мне, вероятно, нужно написать это на PHP и node.js
Я также думал иметь главный сервер и подчиненные серверы. Подчиненные серверы начнут генерировать и проверять наборы и отправлять результат мастеру, используя программу rabbit me. Как только набор найден, мастер выключит подчиненные серверы.
Не уверен, что это правильный подход (как в профессиональном плане, так и в плане оптимизации)
Какое программное обеспечение я должен использовать и как это можно реализовать?
Спасибо!
Я также думал иметь главный сервер и подчиненные серверы. Подчиненные серверы начнут генерировать и проверять наборы и отправлять результат мастеру, используя программу rabbit me. Как только набор найден, мастер выключит подчиненные серверы.
Я думаю, что ваш подход сработает. RabbitMQ — это сообщения, передача сообщений — это инструмент для организации параллельной обработки.
Ваш Генератор задач (мастер) отправляет задачи (сообщения RabbitMQ) в рабочая очередь. Ваши процессоры (ведомые) подписаны на очередь. Они могут получать сообщения о задачах из очереди и начинать генерировать наборы. После генерации они отправляют результат обратно в главный узел. Он может выдавать последующие задачи в зависимости от того, какие результаты он получает, т.е. generate sets of higher value from now
или же enough, stop work
(те должны идти в разные command
тема на которую рабы тоже подписаны).
Других решений пока нет …