Исходя из ответов, которые вы упомянули в комментариях, я предлагаю вам перейти на архитектуру на основе MQ (очередь сообщений).В этом ответе я предлагаю следующее:
- Получать входные данные от пользователей и помещать их в распределенную очередь сообщений.Это означает, что вы должны настроить очередь сообщений (например, ActiveMQ или RabbitMQ ) на нескольких серверах.Эта технология MQ помогает реплицировать входные запросы для проблем отказоустойчивости.Он также предоставляет полную сквозную асинхронную систему.
- После подготовки этого слоя MQ вы можете настроить уровни своих вычислительных серверов.Это означает, что некоторые вычислительные серверы (~ 20 серверов в вашем случае) будут читать запросы из очереди сообщений и запускать задание на основе запроса.Поскольку этот MQ распределен, вы можете быть уверены, что на ваших вычислительных серверах может произойти хороший уровень распределения нагрузки.Кроме того, каждый сервер способен выполнять столько заданий, сколько вы хотите (~ 500 в вашем случае) на основе запросов, которые он читает из MQ.
- Что касается сбоев, вычислительные серверы могут выскочить из MQ только в том случае, если задание завершено.Если происходит сбой одного сервера, задание все еще находится в MQ, и другой сервер может работать на нем.Если задание где-то сохраняет состояние или что-то обновляет, вам следует управлять его дублированием.
Хорошая особенность этого подхода в том, что он очень продаваемый.Это означает, что если в будущем вам придется обрабатывать больше заданий, добавив вычислительный сервер и подключив его к MQ, вы сможете обрабатывать больше запросов на серверах без каких-либо изменений в системе.Кроме того, некоторые полезные функции в MQ, такие как организация очередей на основе приоритетов, помогают определять приоритеты запросов и обрабатывать их в зависимости от типа задания.
ps Ваш Q не предоставляет никаких сведений о типе и параметрах системы.Это черновик решения, который я могу предложить.Если вы предоставите более подробную информацию, возможно, сообщество может помочь вам больше.