В настоящее время все более популярной становится виртуализация серверной инфраструктуры предприятий. Во многих случаях это позволяет сократить издержки на поддержку оборудования, повысить удобство администрирования и увеличить аптайм сервисов.
Тем не менее, в некоторых случаях, виртуализация может негативно повлиять на производительность сервисов, особенно сильно это может проявиться при виртуализации высоконагруженных сервисов (в частности СУБД).
Упомяну несколько достаточно известных характеристик виртуализации, неких «прописных истин», которые необходимо держать в памяти, планируя виртуальную инфраструктуру.
Преимущества виртуализации:
● значительно ускоряет процессы развертывания новых серверов, резервного копирования, восстановления и перенесения на другой узел (например, в случае кластера виртуализации);
● позволяет более гибко распределять вычислительные ресурсы сервера;
● позволяет сократить расходы на поддержку аппаратного обеспечения за счет сокращения физических серверов;
● позволяет сократить расходы на лицензирование программного обеспечения: во многих случаях вендоры предоставляют льготные условия лицензирования ПО, развертываемого на виртуальных серверах.
Недостатки виртуализации:
● переводя серверы в виртуальное пространство, всегда приходится жертвовать производительностью: гипервизор всегда будет тратить определенное количество аппаратных ресурсов для выполнения различного рода служебных задач (например, для распределения ресурсов процессора(ов) между виртуальными машинами).
● При применении виртуализации понижается общая надежность системы: при выходе из строя физического сервера виртуализации произойдет отказ одновременно всех виртуальных машин, расположенных на нем (этот недостаток нивелируется построением отказоустойчивого кластера виртуализации, но в этом случае повышаются расходы на аппаратное обеспечение, что может в конечном итоге свести на «нет» преимущество №3).
● При расположении нескольких ресурсоемких виртуальных машин на сервере виртуализации создается ситуация, когда виртуальные машины конкурируют за вычислительные ресурсы (например, за процессорное время или за время доступа к физическому диску, в случае расположения образов виртуальных машин на одном разделе).
Существует некое негласное правило виртуализации: «если средняя нагрузка на сервер составляет более 50% — виртуализация бессмысленна и вредна», фигурирующее в обсуждениях, посвященных виртуализации СУБД. Данное правило весьма спорно и необъективно, но дыма без огня не бывает. Проясним ситуацию.
Виртуализация сервера – достаточно простое действие с первого взгляда, но когда виртуализации подвергается сервис, для которого критична, например, каждая лишняя миллисекунда задержки доступа к хранилищу данных, - необходима тонкая и очень тщательная настройка приоритетов использования аппаратных ресурсов виртуальной машиной. Особенно это важно в том случае, если на сервере виртуализации расположено несколько виртуальных машин, требующих в разные моменты своей работы большого количества ресурсов (процессорного времени, времени записи/чтения на хранилище и т.д.).
Рассмотрим пример. Если на сервере виртуализации расположена только одна виртуальная машина, то она относительно гарантированно получит те ресурсы, которые ей были выделены гипервизором. Иной случай: на каком-либо сервере виртуализации расположено 10 виртуальных машин. В том случае, если эти виртуальные машины в какой-либо момент одновременно потребуют процессорное время, то общее процессорное время сервера виртуализации будет поделено между виртуальными машинами согласно приоритетам, установленным в настройках гипервизора. В этом случае, некорректная настройка приоритетов может вызвать значительное снижение производительности виртуальных машин. Так же, в том случае, когда несколько виртуальных машин расположены на одном хранилище физического сервера, ресурсоемкий запрос на чтение/запись одной виртуальной машины может серьезно снизить производительность работы с хранилищем «соседних» виртуальных машин. Ситуация с хранилищами осложняется так же тем, что до сих пор нет ни одного адекватного метода управления нагрузкой виртуальной машины на хранилище.
Кроме того, работа с образом виртуальной машины, расположенным на каком-либо хранилище сервера виртуализации, происходит через драйвер ввода/вывода, что в любом случае снижает производительность дисковой системы изнутри виртуальной машины (относительно производительности прямой работы с разделом, из ОС сервера виртуализации). Это достаточно просто замерить, например, при помощи утилиты Microsoft SQLIO (http://www.microsoft.com/en-us/download/details.aspx?id=20163). Это узкое место можно обойти, указав в настройках виртуальной машины использование именно физического раздела, но в этом случае снижается мобильность виртуальной машины: увеличиваются трудозатраты на создание такой виртуальной машины, увеличивается трудоемкость ее перенесения на другой хост виртуализации.
Из всего вышеизложенного можно сделать выводы:
● виртуализация прекрасно подходит для быстрого развертывания тестовых сред;
● виртуализация – хороший вариант для серверов, обеспечивающих работу приложений, не создающих постоянных высоких нагрузок на аппаратные ресурсы;
● управление виртуальными машинами – не настолько тривиально, насколько это представляется на первый взгляд. Управление приоритетами использования аппаратных ресурсов – сложная и многофакторная задача, промашки в выполнении которой могут существенно снизить производительность сервисов, предоставляемых виртуальными машинами;
● тонкая профилизация виртуальной машины, предназначенной для реализации высоконагруженного сервиса – возможна, но в конечном итоге может свести на нет преимущества виртуализации;
● размещение высоконагруженного сервиса на физическом сервере может дать большую гарантию высокого уровня производительности, чем размещение такого сервиса на виртуальной машине.
Как же все вышеизложенное может быть применено при проектировании серверной инфраструктуры DIRECTUM? На основе опыта использования виртуализации для внутренних нужд компании DIRECTUM и оценок использования виртуальных машин для продуктивных баз клиентов, мы предлагаем следующий вариант размещения сервисов DIRECTUM:
● сервисные службы (сервер сеансов DIRECTUM, служба Workflow), служба ввода и преобразования DIRECTUM, сервер веб-доступа к DIRECTUM, сервисы iDDD – на виртуальных машинах;
● служба файловых хранилищ DIRECTUM – либо на виртуальной машине с прямым подключением к физическому разделу диска, либо на физическом сервере;
● сервер СУБД Microsoft SQL Server – на физическом сервере, при необходимости повышения отказоустойчивости – на кластере физических серверов. При этом, лучшая практика – размещать файлы БД на отдельных жестких дисках (отличных от диска с ОС), объединенных в массив RAID-10;
● серверы СУБД для разработки и тестирования – на виртуальных машинах.
Описанные рекомендации – не аксиомы, конкретное решение по инфраструктуре всегда зависит от множества условий.
Жду конструктивного обсуждения темы виртуализации применительно к DIRECTUM на нашем форуме.
Тему форума предлагаю создать вам, если у вас есть какой-либо вопрос, который вы предлагаете обсудить.
Виртуальный образ системы DIRECTUM - штука нелёгкая, будет "весить" порядка 6-7 Гб. Готовы такое скачивать при выходе каждого нового билда?
При необходимости оценки новой версии - добро пожаловать на демо-стенд системы DIRECTUM cloud.directum.ru (это, кстати, тоже виртуальная машина). Запросить инструкцию по подключению и реквизиты можно, обратившись в службу поддержки DIRECTUM.
Владимир, благодарю за познавательную статью. Хотелось бы видеть больше конкретики - среды виртуализации, которые вы могли бы рекомендовать к использованию, примеры построения виртуальной среды и т.д.
Также очень интересна тема повышения отказоустойчивости инфраструктуры Directum: СУБД, служб.
Алексей, про отказоустойчивость - обязательно будет материал, возможно, даже не один.
Привет всем! у меня уже почти год Directum крутиться на виртуалке полёт нормальный!!
Игорь, сообщество будет благодарно Вам, если Вы поделитесь информацией о Вашей виртуальной инфраструктуре в форуме: http://club.directum.ru/forum/topic2549-directum-%D0%B8-%D0%B2%D0%B8%D1%80%D1%82%D1%83%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F.aspx?lastpage=1#post18516
По большей части согласен с автором статьи, однако у меня на предприятии на 5 серверах крутятся виртуальные машины (от 1 до 8), удобства администрирования большого не вижу. Для виртуализации используются разные среды, а свести все воедино теперь большая проблема. В качестве теста - это да! Беспорно виртуализация отличное место для тестирования в 80% случаев.
Авторизуйтесь, чтобы написать комментарий