Сначала исключите недоступные и заполненные workers, затем сравните нагрузку и атомарно зарезервируйте слот. Раздельные чтение счётчика и увеличение создают гонку.
Как выбрать worker по числу выполняемых задач
Сначала исключите недоступные и заполненные workers, затем сравните нагрузку и атомарно зарезервируйте слот. Раздельные чтение счётчика и увеличение создают гонку.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Есть workers с флагом healthy, лимитом capacity и счётчиком inflight. Требуется выбирать доступного worker с наименьшей нагрузкой. Как избежать одновременного переполнения выбранного узла?
Ответ
Сначала исключите недоступные и заполненные workers, затем сравните нагрузку и атомарно зарезервируйте слот. Раздельные чтение счётчика и увеличение создают гонку.
При равном числе задач можно использовать round-robin или случайный выбор. Если мощности различаются, сравнивайте inflight/capacity, а не только абсолютное число. После завершения или отказа резерв возвращается ровно один раз. Когда доступных узлов нет, нужна определённая политика очереди или отказа, а не бесконечный поиск.