Терминальный сервер помогает решать множество задач, позволяя удаленным пользователям запускать и одновременно работать с большим количеством установленных приложений. Но чтобы такая работа была в радость, следует заранее позаботиться о выделении достаточного количества ресурсов, ведь в случае их нехватки, весь трудовой процесс может быть омрачен неприятными последствиями. Давайте разберемся почему. Поскольку сервер терминалов — это не что иное, как серверная вычислительная среда, именно здесь происходит обработка пользовательских данных и выполнение самих приложений. А значит, каждый удаленный пользователь и каждое запущенное приложение «отрезают» ровно такой «кусок пирога», который им необходим. И чтобы хватило всем, необходимо заранее узнать «аппетиты» каждого.
На что обратить внимание в первую очередь
Нюансов, достойных внимания при планировании и развертывании терминального сервера, предостаточно. В первую очередь советуем ознакомиться с простыми, но важными правилами.
Правило 1. Не равнять всех под одну гребенку.Приложение приложению рознь. В зависимости от функционала может потребляться различное количество ресурсов. Это же касается и пользователей. Кто-то запускает минимальный набор «легких» приложений, кому-то, наоборот, может потребоваться тяжеловесный софт. Учитывайте эти моменты еще на этапе планирования.
Правило 2. Не забывать о необходимости тестирования. Уделяйте внимание вопросам тестирования производительности и проверки масштабируемости. Это поможет определить количество пользователей, способных работать на сервере.
Правило 3. Видеть конечный результат. Прежде чем выполнять расчет необходимых ресурсов, следует обратить внимание на сценарий развертывания и определиться, каким должен быть конечный результат. Ведь правильно поставленная задача — наполовину сделанное дело. В зависимости от того, что вы хотите получить, будет выбран потенциал сервера. Вывод: подбор ресурсов для целевого узла необходимо выполнять на основе потребностей.
Правило 4. Учитывать требования к ресурсам. Статистика показывает, что эра «железок» в собственной серверной уходит в прошлое. С появлением технологий виртуализации и облаков многие вопросы стали решаться достаточно просто. Например, чтобы увеличить объем памяти, достаточно поиграть бегунком в окне менеджера управления ресурсами, а не бежать, как раньше, за дополнительной линейкой. Лишь одно остается неизменным — требования, предъявляемые к ресурсам. Их следует учитывать.
Какова методика расчета необходимых ресурсов?
Поскольку точный расчет ресурсов под терминальный сервер все-таки сложен, предлагаем рассмотреть методики, которые помогут это сделать.
# Пилотирование. Пожалуй, самый простой и распространенный метод, используемый на практике. В облаке разворачивается тестовая виртуальная машина, играющая роль терминального сервера. При работе сервера происходит постепенное увеличение нагрузки, при этом сохраняется обратная связь с пользователями, выполняется мониторинг используемых ресурсов и сравниваются показатели производительности за разные отрезки времени. В соответствии с полученными результатами регулируется нагрузка на систему, что в конечном счете обеспечивает необходимый уровень работы. Пилотирование является максимально простым и надежным методом, хоть и требует дополнительных временных затрат.
# Моделирование. Метод основывается на уже собранных в рамках выполняемого сценария показателях. Как и при пилотировании, выделяется тестовый сервер и с помощью специальных инструментов происходит моделирование различных уровней нагрузки. В ходе мониторинга определяются возможности сервера. Такой метод считается наиболее точным. Он позволяет определить лимитирующие факторы, воздействующие на сервер, и приемлемый уровень нагрузки.
# Экстраполяция на пользовательскую систему. Основывается на данных, полученных с системы, используемой одним пользователем. За основу берутся такие объекты производительности, как память, процессор, дисковая подсистема, сеть. В дальнейшем именно они используются для расчета мощностей в многопользовательской среде. Экстраполяция не очень востребованна, поскольку требует детального изучения системы и специфики выполняемых операций отдельно взятого пользователя. Но, несмотря ни на что, метод является действенным и находит свое применение на практике.
Примечание! Первый и второй методы являются наиболее часто используемыми, при этом пилотирование рекомендуют применять в случае небольших развертываний, а моделирование — при реализации масштабных сценариев.
Моделирование нагрузки сервера терминалов
Моделирование нагрузки терминального сервера является одним из методов, точно оценивающих потенциал системы. Напомним, что этот он максимально эффективен в контексте четко определенного сценария.
# Итак, определяем сценарий. На текущем этапе наличие сценария является ключевым фактором. Однако его четкое определение не всегда простая задача. Многое усложняется огромным разнообразием приложений и порой непростыми моделями их использования. Особенно важно уловить четкую последовательность действий пользователей, а также понять правильность применения ими данных (документов, файлов, медиаконтента и т. д.). Справиться с поставленной задачей помогают отзывы пользователей, мониторинг их активности, отслеживание показателей ключевых счетчиков и многое другое.
# Подготавливаем тестовую среду. Прежде чем запустить что-либо в продакшен, тренируются «на кошках» в тестовой среде. Для этого необходимо развернуть тестовый стенд, желательно изолировав его от основной инфраструктуры.
Важно! Изолирование тестовой среды позволит избавиться от случайного вмешательства и излишнего трафика, который может повлиять на результаты тестирования.
# Переходим к тестированию. Суть этого шага заключается в формировании нагрузки на сервер и определении жизнеспособности системы. Что имеется в виду? В первую очередь, запускаем тест производительности, чтобы определить количество пользователей, которое сервер терминалов сможет выдержать. Несмотря на то что существует немалое количество источников и исследований на тему определения показателей производительности терминального сервера, ввиду различия между средами, скоростью работы сети, используемых протоколов и многого другого, при их использовании сложно получить точные результаты. Крайне важно применять детальный анализ для определения точного линейного масштабирования использования системы. Для этого необходимо имитировать нагрузку и сбор данных о производительности системы, благодаря которым можно узнать о ее узких местах и ограничениях пропускной способности.
Важно! Производительность терминального сервера лучше оценивать не только на основе показателей производительности (использование памяти, дисковой подсистемы, процессора), но и на основе времени отклика конечного пользователя.
На этом этапе используются инструменты автоматизации, с помощью которых одновременно запускаются экземпляры приложений, имитируя тем самым работу нескольких пользователей. Здесь важно иметь представление о метриках, применяющихся для оценки жизнеспособности системы. В зависимости от их показателей определяется допустимый и комфортный уровень нагрузки.
На первом шаге, когда определен сценарий использования сервера терминалов и вы знаете, какие именно приложения будут задействованы пользователями в дальнейшем, самое время начать тестирование. Метод, который мы предлагаем, сводится к симуляции работы нескольких пользователей и одновременного запуска ими приложения/приложений.
Вместо одновременного запуска приложения реально существующими пользователями можно применять автоматизированные сценарии, моделирующие работу пользователей. Существует множество платных и бесплатных инструментов, позволяющих выполнять автоматизированные сценарии, симулирующие работу пользователей и запуск необходимых для тестирования приложений. Рассмотрим наиболее популярные.
Скрипты AutoIT
представляет собой мощный бесплатный язык для написания сценариев с упором на автоматизацию GUI. С их помощью можно выполнять различные задачи. Перечислим лишь ту малую часть, которая будет полезной в контексте тестирования сервера терминалов:
- Имитация пользовательского ввода мышью и клавиатурой в любых приложениях.
- Манипуляция окнами запущенных приложений (получение информации и управление).
- Глобальные перехватчики клавиатуры, запуск процедур по нажатию горячих клавиш.
- Построение GUI, основных элементов управления, а также пользовательских элементов управления, поставляемых как ActiveX.
- Работа с сетью (протоколы TCP и UDP, загрузка файлов).
- Мониторинг и запуск процессов; запуск процессов от имени указанной учетной записи.
- Работа с реестром.
- Работа с буфером обмена и многое другое.
Для лучшего понимания предлагаем рассмотреть скрипт, имитирующий работу пользователя, который запускает «Блокнот», печатает в нем текст, посылает окну «Блокнота» команду закрытия, а затем отказывается от закрытия, посылая нажатие Escape окну запроса о сохранении.
Run("notepad.exe"); запускаем «Блокнот»
WinWaitActive ("Безымянный — Блокнот"); ожидаем появление окна «Блокнота»
Send ("Какой-то текст."); посылаем нажатия (имитируем ввод)
WinClose ("Безымянный — Блокнот"); посылаем окну команду закрытия;
ожидаем появление окна запроса о сохранении:
WinWaitActive("Блокнот", "Текст в файле Безымянный был изменен.")
Send("{ESC}"); посылаем нажатие Escape (имитируем ввод)
Скрипты WinBatch AutoIT дает возможность автоматизации произвольных приложений, даже тех, которые не поддерживают опций командной строки или специальных программных средств автоматизации.
WinBatch
представляет собой пакетный язык и богатое средство разработки, позволяющее выполнять автоматизацию различных задач, включая симуляцию работы пользователей, запуск различных приложений и многое другое. Предлагаем рассмотреть пример кода, который симулирует удаление первой строки любого открытого файла.
# Анализ полученных результатов. Это заключительный этап, когда на основе собранных в ходе тестирования данных определяется приемлемая нагрузка системы.Здесь же может быть выявлена нехватка ресурсов, способная вызвать ухудшение производительности сервера. Согласно полученным результатам определяется, есть ли необходимость в наращивании дополнительных ресурсов, или же их достаточно для корректной работы.После того как было определено допустимое количество пользователей для работы на сервере терминалов, рекомендуется запустить тесты повторно. При этом в дополнении к тестовым пользователям можно запустить реально существующих. «Живые» пользователи смогут протестировать систему на работоспособность.
Использование Sizing Guide
И еще один метод, который может пригодиться при планировании развертывания сервера терминалов в облачной среде для типового «офисного» пользователя, работающего с документами, электронными таблицами, почтой и веб-браузером, — использование Sizing Guide (рекомендованных значений, которые мы применяем в IaaS облаке «ИТ-ГРАДа»).
Для определения vRAM для терминального сервера рекомендуется:
- 2 GB vRAM для каждой базовой инсталляции;
- 2 GB vRAM для отдельно взятого пользователя.
Для определения требований vCPU терминального сервера рекомендуется:
- 1vCPU на 10 пользователей (минимум 1vCPU по умолчанию).
Для определения требований к хранилищу рекомендуется:
- 40 GB для каждой базовой инсталляции;
- 2 GB для отдельно взятого пользователя.
Таким образом, если необходимо, чтобы терминальный сервер поддерживал до 10 пользователей, потребуется:
- 22 GB vRAM;
- 1 vCPU;
- 60 GB Storage.
В заключение подведем итоги. Как видите, существуют различные методики и инструменты, с помощью которых выполняется расчет необходимых ресурсов при развертывании сервера терминалов в облаке IaaS провайдера. Главным остается одно — правильность использования всех рассмотренных способов. От того, насколько верно выполнен расчет, зависит конечный результат.