Нагруженный сервис в облаке. Как ограничить ресурсы для каждого отдельного пользователя?
Здравствуйте!
Вопрос вот в чем: я делаю сервис, в котором пользователи смогут создавать задачи, выполняющиеся в фоновом режиме. Задачи все примерно одного типа, но могут (и будут) сильно отличаться по затратам ресурсов, в зависимости от того, что захочет получить пользователь. Таким образом кто-то из пользователей может потреблять мало ресурсов, а кто-то крайне много, соответственно я вижу два решения:
1. У каждого пользователя стоит свой лимит на потребление CPU, RAM и дискового пространства. Этот вариант предпочтительнее. Ещё желательно, чтобы отдельным пользователям можно было безболезненно увеличивать лимиты.
2. Пользователь пополняет внутренний счет и оттуда списываются деньги в зависимости от потребленных ресурсов.
Всё это дело должно находиться в облаке, чтобы можно было легко масштабироваться под растущие потребности.
Собственно говоря, вот и вопрос. Есть ли какие-то стандартные практики, как управлять нагрузкой, создаваемой каждым отдельным пользователем в облаке? Что можно по этому поводу почитать, куда посмотреть?
Если это поможет, то сервис использует python, flask, celery, mysql.
nikolayvaganov, в идеале, хотелось бы вообще не беспокоиться о нагрузках. Вот человек оплатил доступ, и ему, образно говоря, автоматически выделилось, что-то вроде персонального сервера с ограниченными ресурсами и всё что он делает, делается в этом условном сервере. Когда доступ закончился, "сервер" удаляется. При этом должна быть возможность создавать сколько угодно таких условных серверов, а точнее чтобы они создавались автоматически после оплаты и удалялись тоже автоматически после окончания доступа. Не знаю, понятно ли я объяснил.
Закупаетесь хорошим железом, ставите систему виртуализации ( OpenVZ, KVM, etc ). Рисуете панель управления ( либо используете текущие ) и вперед. Например для OpenVZ - WHMCS ( биллинг ) + VDSmanager ( API ).
2. Неограниченный/большой бюджет.
Используете AWS либо другого крупного оператора.
В первом случае у Вас будет фиксированная цена за конечное железо, но расширяемость будет занимать время. Во втором случае у Вас не будет мороки с железом, но ценник на услуги возрастет в разы.
Для примера сейчас минимальная виртуалка 400Мб RAM , 1CPU , 20Gb SSD стоит в районе 100 рублей в месяц, а те же самые ресурсы ( плюс будете платить за трафик и прочее ) на AWS стоит 300-400 рублей в среднем.
Каких-то сверхдоходов и вообще доходов даже не ждите, так как рынок сильно перегрет и выходить на него нужно с какой-нибудь киллерфичей, чтобы не быть одним из миллиона хостингов.
nikolayvaganov,
Это не хостинг. Допустим это сервис, который ищет упоминания слов (или появление логотипов) в видео. Кто-то может загрузить маленькое видео пару раз в месяц, а кто-то каждый день захочет грузить по 72 часа телеэфира в HD. При этом они платят одинаковую сумму за месяц (фиксированый тариф). Вот и хотелось бы, чтобы каждый пользователь мог делать, что угодно, но в рамках выделеных ресурсов и не мешая другим. При этом, если наплыв пользователей, то не хотелось бы постоянно покупать и настраивать сервера (или продавать).