Одно из основных преимуществ «облачных» вычислений — эластичность. Идея эластичных вычислений заключается в том, что вы можете растягивать или сокращать свою «облачную» службу, подобно резиновой ленте, в соответствии с эксплуатационной нагрузкой. Amazon, Microsoft и другие поставщики «облачных» служб попытались сделать эластичность главным коммерческим аргументом своих продуктов, обещая, что пользователь сможет без труда добавлять или удалять виртуальные серверы, хранилища данных, сетевые службы и т. д. в любое время, оплачивая только использованные ресурсы. В зависимости от ваших потребностей в «облачных» услугах, эластичные вычисления могут быть чрезвычайно мощной технологией, хотя они мало подходят для масштабирования обычной рабочей нагрузки приложений, таких как SQL Server или Exchange. Однако эластичные вычисления идеальны для приложений, в которых удается разделить работу между идентичными приложениями или службами, выполняемыми на различных машинах. Например, игровая служба Xbox Live использует «облачные» вычисления на серверной стороне, чтобы оперативно вводить в действие и отключать серверы для популярных игр, таких как Titanfall. Каждый раз, когда вы начинаете новый сеанс игры с несколькими игроками, для ее размещения создается виртуальная машина Azure, а когда все игроки покидают игру, виртуальная машина исчезает.

Azure располагает несколькими службами с эластичными характеристиками. Одна из новейших и наименее понятых функций — масштабируемые наборы виртуальных машин Azure Virtual Machine Scale Sets (далее «масштабируемые наборы»). Масштабируемый набор представляет собой идентичный пул виртуальных машин, на которых выполняется ваше приложение. С помощью инструментария Azure можно создавать и настраивать виртуальные машины, а затем создавать и удалять экземпляры, чтобы иметь столько ресурсов, сколько требуется в данный момент. Развернув масштабируемый набор, вы получаете группировку виртуальных машин, выполняющих по требованию любые задания. При этом группировка растет и сжимается в соответствии с вашими явными командами, потребностями пользователя или другими измеряемыми параметрами.

Принципы организации масштабируемых наборов

Биллу Бейкеру, в прошлом архитектору Microsoft, часто приписывают знаменитую метафору «облачного» масштабирования: «стадо против домашнего любимца». Ваши серверы могут напоминать домашнее животное, за которым вы любовно ухаживаете и называете по имени; если любимец заболел, его лечит ветеринар. Но можно относиться к серверам как к стаду: его члены взаимозаменяемы, вы не воспринимаете их как отдельных особей и не даете им имен. Если какое-то животное заболевает, его заменяют новым. Развивая эту метафору, можно рассматривать масштабируемые наборы как способ клонировать стадо любых размеров, состоящее из особей любой породы, при условии вашего согласия, что все особи будут идентичны.

Первый ключ к пониманию масштабируемых наборов — это наборы идентичных виртуальных машин. Вы можете настроить «первую особь в стаде», но остальные будут в точности как первая. Собственно масштабируемый набор определен в Azure через портал или через инструменты командной строки PowerShell и Azure, или через шаблон диспетчера ресуросов Azure Resource Manager (ARM). Это определение сообщает Azure размер экземпляра виртуальной машины, который вы намерены использовать, имя масштабируемого набора, число машин в наборе и т. д. Существует три способа настройки виртуальной машины, используемой масштабируемым набором, чтобы добавить в нее ваше приложение: создать полностью настраиваемый образ виртуальной машины и представить его в Azure; взять заранее подготовленный образ Windows или Linux и установить ваше приложение при запуске масштабируемого набора; настроить образ, включив в него контейнер, а затем загрузить контейнер приложения при запуске масштабируемого набора. У каждого из этих подходов есть свои преимущества и недостатки, но в отношении масштабируемых наборов они равноценны. Поскольку масштабируемый набор — это массив идентичных виртуальных машин, достаточно настроить экземпляр один раз, а затем масштабируемый набор обеспечит создание и удаление машин. Однако это также означает, что ваше приложение должно функционировать с минимальной настройкой машины; если вам необходимо, например, внести уникальные для машины изменения в реестр или файлы настроек, то автоматизировать эту процедуру сложно.

При запуске масштабируемого набора Azure создает несколько объектов: средства балансировки нагрузки, сетевые адреса и т. д. Вся эта инфраструктура содержится в указанной вами группе ресурсов Azure, и она является общей для всех виртуальных машин масштабируемого набора. После создания экземпляров требуемых объектов в группе ресурсов система масштабируемого набора начнет создавать экземпляры виртуальной машины до начального предела, заданного в определении масштабируемого набора. Нельзя строить предположений относительно очередности и скорости создания экземпляров виртуальной машины. Компания Microsoft не дает никаких гарантий относительно времени запуска или задержки.

В одном масштабируемом наборе может содержаться до 1000 экземпляров, но существует несколько ограничений, которые описаны в документе, опубликованном по адресу: https://docs.microsoft.com/en-us/azure/virtual-machine-scale-sets/virtual-machine-scale-sets-placement-groups. Одним словом, нужно использовать несколько групп размещения Azure, если вы хотите иметь масштабируемый набор с более чем 100 виртуальными машинами. Поэтому необходимо помнить об ограничениях, присущих средству балансировки нагрузки Azure (не работает с балансировкой нагрузки уровня 4 по группам размещения), хранилищу (необходимо использовать управляемые диски Azure) и источникам виртуальной машины (нельзя использовать настраиваемую виртуальную машину, которую вы передали, если у вас более 100 экземпляров).

После того как будет создано указанное число экземпляров виртуальной машины, масштабируемый набор считается функционирующим. В сущности, Azure может создать несколько дополнительных виртуальных машин как часть масштабируемого набора, но плата за них не взимается, поскольку они используются только для избыточности. Дальнейшее зависит от особенностей определения масштабируемого набора. Масштабирование набора может происходить автоматически, и в этом случае Azure будет добавлять и удалять виртуальные машины в зависимости от контролируемого параметра. Специалисты Microsoft называют эту функцию «автомасштабированием внутри». Если функция автомасштабирования не включена, то вы можете добавить или удалить экземпляры через портал или с помощью Azure PowerShell. Помните, что плата будет взиматься за каждый экземпляр и период его использования. Масштабируемый набор — удобный способ управлять парком виртуальных машин, но отдельные виртуальные машины оплачиваются и управляются как любые другие долгосрочные виртуальные машины, которые вы можете создавать. Конечно, нельзя забывать, что использование масштабируемого набора неизбежно связано с ростом затрат на Azure. Плата за парк из 100 или более виртуальных машин может оказаться слишком высокой.

Простое приложение масштабируемого набора

Предположим, нам нужно создать масштабируемый набор, пригодный для использования при нагрузочном тестировании локального приложения (именно для этой цели я намерен его применять). В данном случае я располагаю небольшим симулятором, с помощью которого собирался отправить данные на тестовый сервер, но я хотел организовать несколько сотен серверов, что было бы утомительной задачей при использовании большинства других подходов. Я планировал создать масштабируемый набор с помощью базового образа виртуальной машины Azure, настраиваемого с использованием расширения сценария PowerShell, предоставляемого компанией Microsoft в качестве одного из трех поддерживаемых методов настройки. Это расширение PowerShell регистрируется на виртуальной машине (компанией Microsoft; вам не обязательно это делать, хотя вы можете зарегистрировать те же расширения в своих индивидуальных виртуальных машинах). Оно выполняется после того, как виртуальная машина создана и добавлена в масштабируемый набор. У этого сценария PowerShell есть ряд ограничений; например, вы не получаете доступа к расширениям Azure Storage PowerShell, поэтому необходимо заранее планировать настройки, выполняемые с помощью расширения. Расширение, которое я хотел применить, должно скопировать приложение и его файлы данных из хранилища двоичных BLOB-объектов Azure, а затем создать некоторые настройки на виртуальной машине и установить сценарий, запускающий приложение.

Создание масштабируемого набора в портале

Как отмечалось выше, вы можете без труда создавать масштабируемые наборы в портале, по крайней мере если используете «новый» портал (portal.azure.com). Зарегистрируйтесь на портале, щелкните по значку «+», перейдите в категорию Compute («Вычисление») и выберите Virtual machine scale set («Масштабируемый набор виртуальных машин») из списка поддерживаемых рабочих приложений. Вы увидите страницу с информацией об ограничениях группы размещения. Пока вы можете игнорировать это обстоятельство, так как нам предстоит создать небольшой масштабируемый набор с малым количеством виртуальных машин. Важная часть колонки портала — нижний раздел, где находится кнопка Create («Создать»). Если нажать ее, в портале появится два новых раздела. Колонка Basics («Базовые»), показанная в правой части экрана 1, используется для задания ключевых параметров для данного масштабируемого набора.

  • Имя масштабируемого набора будет использоваться во всем портале. Регистр не имеет значения, но некоторые символы использовать нельзя.
  • Тип операционной системы не требует пояснений.
  • Поля имени пользователя и пароля содержат учетные данные, которые будут использоваться виртуальными машинами масштабируемого набора. Помните, что все виртуальные машины в масштабируемом наборе будут иметь одинаковые учетные данные. В Azure действуют правила, определяющие длину и надежность пароля, чтобы пользователи не могли выбирать легко угадываемые пароли: от 12 до 123 символов, среди которых по крайней мере один прописной, один строчный и один числовой.
  • Элемент управления Limit to a single placement group («Ограничение до единственной группы размещения») указывает, может ли масштабируемый набор увеличиваться сверх 100 виртуальных машин, разрешая Azure охватить несколько групп размещения. Оставьте значение True («Истина»), если вы не собираетесь создавать крупный масштабируемый набор и не осознаете последствий этого шага.
  • Раскрывающийся список Sub­scrip­tion («Подписка») используется для связывания масштабируемого набора с конкретными подписками Azure. Это полезно для выставления счетов и управления доступом.
  • Каждый масштабируемый набор должен находиться в группе ресурсов Azure Resource Manager. Вы можете создать новую группу ресурсов исключительно для масштабируемого набора или выбрать существующую с помощью элемента управления Resource group («Группа ресурсов»).
  • От выбранного расположения для масштабируемого набора зависит величина выставляемых счетов Azure, а также место физического размещения виртуальных машин и сетевых объектов. Вы не можете переместить масштабируемый набор в новый регион, но можете легко удалить его и при необходимости воссоздать в другом регионе.

 

Назначение основных параметров для масштабируемого набора в колонке Basics
Экран 1. Назначение основных параметров для масштабируемого набора в колонке Basics

После настройки всех элементов управления в колонке Basics вы можете нажать кнопку OK и перейти в колонку конфигурации масштабируемого набора (экран 2).

 

Определение имени домена и типа машины, который нужно использовать
Экран 2. Определение имени домена и типа машины, который нужно использовать

В колонке настроек масштабируемого набора указываются параметры масштабируемого набора: количество экземпляров, тип машины и операционная система. Вы также должны указать доступное по Интернету полное доменное имя (FQDN) для средства балансировки нагрузки масштабируемого набора, включить или выключить автомасштабирование и настроить управляемое или неуправляемое хранилище данных. Последний параметр заслуживает отдельной статьи — неуправляемые диски позволяют увидеть отдельные объекты хранилища и назначить способ выделения хранилища учетной записи хранения, чего нет в управляемых дисках. Работать с управляемыми дисками административно проще, но они не столь гибкие. Назначение большинства полей очевидно, но поле размеров экземпляра требует пояснений (оно находится в правой части экрана 2). После первого щелчка в поле Scale set virtual machine size («Размер виртуальной машины масштабируемого набора») появляется панель определения размеров с выбранным размером одного экземпляра виртуальной машины. Это размер, рекомендуемый компанией Microsoft для размещения масштабируемого набора. По моему опыту этот размер обычно D1_V2 (с одним ядром процессора, 3,5 Гбайт оперативной памяти и двумя малыми дисками данных). Щелкните по ссылке View all («Просмотреть все»), и вы увидите полный каталог размеров экземпляра виртуальной машины. Вы можете выбрать наиболее подходящий вариант с оптимальным уровнем вычислительных возможностей для вашего приложения. После того как вы выберете размер машины и нажмете кнопку Select («Выбрать»), можете нажать OK, чтобы покинуть колонку настроек. Вы увидите итоговую колонку, содержащую ваши настройки; после завершения настройки масштабируемый набор будет создан и показан в портале. Обратите внимание, что категория Virtual machine scale sets («Масштабируемые наборы виртуальных машин») не показана в списке служб по умолчанию; вы можете воспользоваться значком «+» на левой панели навигации, чтобы ввести категорию в список для более удобного доступа.

Доступ к масштабируемому набору

Прежде чем вы сможете что-то сделать с масштабируемым набором, необходимо получить к нему доступ. Когда вы создаете виртуальную машину в Azure, существует несколько способов доступа. Для масштабируемых наборов варианты следующие:

  • Назначить каждой отдельной виртуальной машине в масштабируемом наборе собственный общедоступный IP-адрес. Это более дорогостоящий и сложный вариант, чем приемлемо для большинства приложений.
  • Использовать средство балансировки нагрузки с NAT, и в этом случае удобно настроить каждый экземпляр масштабируемого набора для использования отдельного порта TCP. Это вариант по умолчанию для нового масштабируемого набора, начиная с TCP-порта 50000. Если в масштабируемом наборе 10 виртуальных машин, то у вас будет один общедоступный IP-адрес (для средства балансировки нагрузки) и соединение с портом 50000 для первого экземпляра, портом 50001 для второго и т. д.
  • Настроить одну машину с общедоступным IP-адресом, затем подключиться к ней через RDP или SSH и использовать ее в качестве стартовой площадки для подключения к виртуальным машинам масштабируемого набора по их общедоступным IP-адресам.
  • Для входящего трафика можно просто создать шлюз Azure Application Gateway или экземпляр средства балансировки нагрузки и использовать его для распределения входящего тра­фика.

Microsoft дала исчерпывающее описание всех этих вариантов в документации, и вы можете найти необходимую информацию для любого типа подключения.

Настройка виртуальной машины с использованием шаблонов, расширений и PowerShell

Итак, вы создали масштабируемый набор. Однако он не очень полезен, так как на данном этапе это лишь коллекция одинаковых, ненастроенных экземпляров виртуальной машины. Далее требуется применить один из вариантов настройки, упомянутых выше: настроить приложение в контейнере, а затем загрузить его в виртуальные машины масштабируемого набора; установить его непосредственно на виртуальных машинах масштабируемого набора после создания масштабируемого набора или установить и настроить его как часть процесса создания с помощью шаблона. Я предпочитаю подход с использованием шаблона, так как он наиболее гибкий. Однако для его применения требуется больше всего времени. Если вы уже освоили такие технологии контейнеризации, как Docker, и ваше приложение хорошо поддается контейнеризации, то этот способ может оказаться оптимальным для начала работы.

Шаблон масштабируемого набора — не более чем файл формата JSON, в котором указаны настройки набора: число экземпляров, пароль администратора и т. д. Если воспользоваться описанным выше графическим интерфейсом, то на странице подтверждения отображается небольшая ссылка, с помощью которой можно загрузить файл шаблона для применения настроек, заданных в графическом интерфейсе. У использования шаблонов есть несколько преимуществ, в частности возможность хранить шаблоны в системе проверки исходных файлов, такой как Git. Однако важный аргумент в пользу применения шаблонов заключается в простоте настройки после установки, потому что вы можете воспользоваться расширением шаблона, выполняемым на виртуальной машине после создания экземпляра виртуальной машины. Во второй части статьи будет показано, как использовать шаблоны и настройки, чтобы определить масштабируемый набор с помощью PowerShell, создать его экземпляр, настроить образ виртуальной машины, загрузив и установив программное обеспечение, и запустить и остановить масштабируемый набор, когда требуется выполнить работу.

Масштабируемость — одна из основных причин популярности «облачных» вычислений, и возможность быстро масштабировать определенную рабочую нагрузку по требованию полезна в различных ситуациях. Компания Microsoft представила простой графический интерфейс для создания масштабируемых наборов в портале Azure, и вы можете с его помощью быстро подготовить масштабируемый набор для тестирования приложений и обработки рабочих нагрузок.