Смена подхода к разделению ресурсов баз данных

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

Механизм, отвечающий за данные функции, называется db_governor. Это модуль, работающий с сервером баз данных, основной функцией которого является учет затрачиваемых ресурсов на запросы пользователей. Также, на основании определенных правил, он может блокировать запрос клиента, поместив его в специальный и ограниченный по ресурсам контейнер (см. предыдущую статью). Изначально все запросы работают в общем контейнере и не ограничены в ресурсах. Система только ведёт подсчет потребления ресурсов каждым пользователем. Если суммарное потребление ресурсов системы запросами пользователя превышает заданные границы за определенный интервал времени(а на текущий момент это достаточно продолжительная нагрузка в несколько процессоров), все запросы такого клиента на определённое время помещаются в отдельный контейнер с ограниченным объёмом ресурсов. Таким образом, клиент не может чрезмерно нагружать сервер баз данных единолично.

Однако у данного подхода есть недостатки, и один из самых существенных — это не согласованность между ограничениями для запросов к БД и ограничениями для всех его остальных процессов в системе. Например, может возникнуть такая ситуация: пользователь достиг ограничений на запросы к базе данных, но не вычерпал квоту на ресурсы для всех остальных своих процессов. Все его запросы к БД стали работать медленно и как результат его php процессы стали скапливаться в ОЗУ в ожидании ответа от БД. Таким образом пользователь начинает тратить свою квоту ресурсов на ожидание и накапливает кол-во процессов в системе до предела. По достижению которого система перестает создавать новые процессы. Как результат мы имеем нерабочий сайт и бессмысленную трату ресурсов сервер

К счастью, выход из этой ситуации давно уже найден, и мы считаем его достаточно стабильным для применения на наших серверах. Это режим, в котором db_governor помещает все запросы пользователя к БД в тот же виртуальный контейнер, в котором находятся и все его php запросы. Что позволяет использовать единую квоту на ресурсы для отдельно взятого пользователя. как для его запросов к бд, так и для других порождаемых им процессов. Такой подход позволяет более рационально использовать ресурсы системы, не позволяя ей работать в холостую.

Теперь мы еще на один шаг приблизили свой виртуальный хостинг к виртуальным выделенным серверам.

С наилучшими пожеланиями,
руководитель техотдела Денис Мищенко

Понравилась статья? Оставь свой голос!
1 оценка, среднее: 5,00 из 51 оценка, среднее: 5,00 из 51 оценка, среднее: 5,00 из 51 оценка, среднее: 5,00 из 51 оценка, среднее: 5,00 из 5 (1 оценок, среднее: 5,00 из 5, вы уже поставили оценку)
Загрузка...