Проверка пользователей в очереди: алгоритм управления приоритетом?

Допустим, у меня есть большой набор пользователей в очереди, и я периодически опрашиваю каждого пользователя по ограниченному по скорости API. После того, как все пользователи будут опрошены, процесс перезапускается. Ограничение скорости применяется таким образом, что я не могу проверить всех пользователей в течение разумного периода времени (› 1 день, чтобы проверить всех).

Каждый раз, когда я проверяю пользователя, я могу проверить, когда он был в последний раз активен. Если пользователь был активен в последнее время (скажем, последние несколько дней), то он должен иметь приоритет над пользователями, которые вообще не были активны (› год). Однако вероятность запроса неактивного пользователя все же должна быть больше 0. Существуют ли какие-либо существующие исследования/методы эффективного управления этой очередью?

В настоящее время я думаю, что это простая очередь приоритетов, и начальное значение пользователя должно быть временем, когда они были в последний раз активны. Каждый раз, когда запрашивается пользователь, его позиция в очереди заменяется датой его последней активности + некоторое случайное число, сгенерированное из распределения, чтобы в конечном итоге можно было проверить всех пользователей.


person Kevin Pei    schedule 25.09.2020    source источник


Ответы (1)


После некоторого размышления я решил использовать байесовскую модель, чтобы вывести время каждого пользователя между событиями. Я предполагаю, что объем активности каждого пользователя в течение периода времени следует распределению Пуассона. Отсюда следует, что время между каждым событием подчиняется экспоненциальному распределению. Для параметра скорости я предположил, что он имеет гамма-распределение. Следовательно, апостериорное распределение является ломаксным распределением. Для каждого пользователя, которого я добавляю в очередь, я выбираю апостериорную выборку в качестве их нового приоритета #. Когда у пользователя есть недавняя активность, я обновляю его пользовательские гиперпараметры, а затем передискретизирую новое значение приоритета. Это позволяет мне гибко настраивать приоритет каждого пользователя на основе данных, а также устанавливать приоритеты для новых пользователей, о которых у меня нет никакой информации.

person Kevin Pei    schedule 28.09.2020