На нашем сервисе пользователи могут добавлять различные задачи, которые выполняются, как только слот становится доступным.
Все задачи хранятся в таблице mysql.Таблица выглядит так:
user_id | task | status | created_at | started_at
int | string | pending,active | datetime | datetime
В настоящее время мы используем стратегию fifo, но поскольку количество задач увеличивается, и мы не хотим добавлять ограничение на количество задач, которые может добавить пользователь, мы хотимдобавить честную политику слотов к ней.Обычно задача выполняется от 30 до 75 минут до ее завершения.Это также может быть меньше или больше.
Я создал набор образцов данных:
Пример данных:
158 total tasks
144 pending tasks
14 running tasks
15 tasks can run at the same time
# of pending tasks for each user
user 1 => 28 tasks
user 2 => 76 tasks
user 3 => 5 tasks
user 4 => 22 tasks
user 5 => 3 tasks
# of active tasks for each user
user 1 => 5 tasks
user 2 => 0 tasks
user 3 => 2 tasks
user 4 => 4 tasks
user 5 => 3 tasks
Мой подход заключается в
-первом: разделите количество ожидающих задач для каждогопользователя по количеству ожидающих выполнения задач (pending_tasks_of_user_x / pending_tasks).
-секунда: затем разделите активные задачи на количество задач, которые могут выполняться одновременно (active_tasks_of_user_x / concurrent_tasks).
Нотеперь я не знаю, как поступить.Если мой подход совершенно неверен, я открыт для него.
Для доступа к базе данных я использую php.
РЕДАКТИРОВАТЬ:
Как честно, я определяю, чтоПользователь не должен ждать, пока все другие задачи других пользователей не будут выполнены.Например, у пользователя 2 есть 76 задач, а у пользователя 1 - 28 задач.Теперь пользователь 5 добавляет 3 задачи.Я не хочу, чтобы пользователь 5 ждал, пока все задачи пользователя 1 и 2 должны быть выполнены в первую очередь, прежде чем задачи пользователя 5 будут выполнены.Более того, как пользователь 2 может запускать 8 задач одновременно, пользователь 1 4 и пользователь 5 могут запускать 2 или что-то подобноеЕсли доступно больше пользователей, чем одновременных задач, оно должно соответственно уменьшиться, а некоторым придется подождать.