Сервер получает запросы 2 типов: Hit (если для него есть задача) и Miss (когда стукнулся, а заданий нет).
- Штраф запросу Hit – время, которое появившаяся задача ожидала запроса.
- Штраф запросу Miss – порядковый номер этого холостого запроса от этого клиента - 1 (1-й запрос бесплатно : )
Задания поступают случайно и непредсказуемо. Исполнители подключаются тоже случайно и непредсказуемо.
Вопрос как минимизировать штрафы.
Маловато данных.
Я бы делал задержку
случайной величиной с нелинейным распределением. Вероятнее всего малая задержка, и по экспоненте уменьшается вероятность задержек более длинных.
График
Или, половина «шляпы» нормального распределения:
Параметр, которым рулить (и рулить очень плавно) — крутизна этой экспоненты распределения.
Для этого надо оценивать эффективность за последние X секунд-минут-часов.
- Если больше штрафов за позднее появление рабочего — делать экспоненту круче – чтобы ещё вероятнее была маленькая задержка и менее вероятна длинная.
- И наоборот, если слишком много обращаются рано — размазывать экспоненту, увеличивая вероятность длинной паузы у очередного запроса.
Ещё чуть усложнить можно, давая штрафам веса в зависимости от их давности: свежие штрафы весомее чем на дальнем-позднем конце окна.