Мы решили запустить свой игровой хостинг и уже вплотную подобрались к планированию архитектуры. Некоторые вопросы самостоятельно решить не получается — взываем к хабраразуму.
Основной вопрос пока такой: есть физический сервер с debian на борту на нем нужно держать энное количество клиентских игровых серверов (один сервер — один процесс). И каким-то образом гибко ограничивать в ресурсах каждый процесс. Гугление вывело на утилиты nice и cpu_limit, но еще более углубленное гугление выдало многочисленные проблемы с этими утилитами, да и не совсем понятно, как ими управлять (допустим, есть 5 клиентов, значит на каждый клиент мы (грубо) отдаем 20% процессорного времени и 20% от оперативки. Добавляется еще один клиент и нужно как-то без перезапуска процессов изменить эти квоты).
Была мысль сделать свой суперлегковесный дистрибутив и сделать несколько виртуальных машин на базе qemu, но тогда не совсем понятно, каким образов управлять процессом игрового сервера внутри гостевой машины — перезапуск, например. Перезапускать полностью виртуальную машину тоже не очень хочется — будет система мониторинга серверов, которая пытается перезапустить упавшие инстансы. Можно было бы внести скрипт запуска игрового сервера в автозапуск, но не совсем понятно, что с ним делать, если он упадет и, допустим, прочесть логи из клиентской машины.
Словом, сказываются некие пробелы в администрировании unix-систем, которые самостоятельно не получается заполнить. Буду рад любым идеям и предположениям, спасибо!
Погугли побольше инфы по кличевикам «Xen», «OpenVZ», «linux containers».
Параграфы с «откровенно-рекламными хвальбами» смело пропускай, а вот там где описываются ограничения и трудности читай внимательно и с пристрастием, думая при этом о своей системе.
Думаю прочитанной инфы (обращай внимание на плюсы и минусы) должно хватить для того, чтобы принять взвешанное решение о том как устроить архитектуру.
На что обращать внимание: Да, не забывай, что помимо того, что какое-то решение распрекрасно, как ты конкретно будешь администрировать полученную систему предлагаемыми средствами.
Также (если ты не хочешь заморачиваться с виртуализацией, хотя контейнеры это почти не виртуализация) погугли еще «cpu affinity»,«ionice»,«ulimit».
А вообще, если ты поподробнее опишешь задачу как ты ее представляешь в голове, возможно получишь более конкретные советы. Потому как, не бывает универсальных решений. И то что у кого-то хорошо работало легко может херово работать у тебя.
Всем спасибо за ответы, к сожалению, адекватного нашим задачам, решения получить не удалось, поэтому будет не самый желательный вариант — оставим всё без ограничений (вероятность утечек памяти, например, минимальна по словам разработчиков серверных приложений). И просто будет активный мониторинг, который будет предупреждать админов о заканчивающихся ресурсах