Как правило, использование очереди (например, RabbitMQ) для загрузки «заданий», а затем получение работниками извлечения заданий из очереди для обработки - это наиболее масштабируемый шаблон, для запуска и работы которого не требуется слишком много работы..
Как только это будет на месте, вы можете раскрутить всех нужных вам работников, распределить их по всем машинам, которые у вас есть / нужны.
После того, как будет создана общая архитектура «передачи сообщений»,Следующим шагом всегда будет выяснить, что вызывает медленный процесс.Не все проблемы могут быть решены простым выделением большего количества потоков в блоке или нескольких блоков в кластере (однако многие могут).
Например, если задания связаны с ЦП, нет смысла запускать больше потоков в одном блоке, чем у вас есть ядра для их запуска (-1 ядро, которое используется для управления потоками).
Однако, если операции связаны с диском или сетью, такие задания могут быть встроены асинхронно внутренне в задание, которое позволяет другим потокам запускаться, пока первый ожидает поступления диска или сети.вернемся к тому, о чем просили.
В конечном счете, архитектура передачи сообщений является наиболее важной частью, и после этого речь идет об оптимизации рабочих мест и эффективном использовании ваших ресурсов, что требует глубоких знаний о предметной области.
Если вы проходите большую часть оптимизации работы, вы можете начать изучать методы межпроцессного кэширования, используя быстрые кешируемые значения ключа, такие как Redis, так что вы не будете повторно вычислять данные, которые вам нужны снова и снова..