Балансировка
MMF использует nginx
для распредления нагрузки как между своими репликами, так и между репликами
с моделями. Чтобы запросы, касающиеся конкретной задачи, всегда попадли в строго опредленную реплику,
используется модуль ngx_http_upstream_consistent_hash, который определяет целевой сервер с помощью хеша от
заданной переменной. Такой переменной является заголовок TASK-ID
Чтобы не создавать лишнюю нагрузку на центральный сервер MMF, TASK-ID
формируется на стороне клиента. Ответсвенность
за отсутсвие коллизий лежит так же на клиенте. MMF на своем клиенте использует uuid для генерации "безопасных" TASK-ID
.
TASK-ID
должны быть уникальны в рамках проекта. В случае обнаружения коллизии сервер с моделью отклоняет
запрос на создание новой задачи.
Благодаря такому подходу, сервер с моделью может самостоятельно обсулижвать асинхронные запросы: создание задачи, мониторинг лога, загрузка результатов. Нет необходимости в централизированном управлении очередью задач.