Microsoft Azure изнутри

Microsoft Azure Web Sites: хостинг как сервис

Бруно Теркали
Рикардо Виллалобос

Исходный код можно скачать по ссылке.

Bruno Terkaly and Ricardo VillalobosMicrosoft Azure Web Sites (WAWS) — очень привлекательная функциональность облачной платформы Microsoft. Это сервис, который создан поверх инфраструктуры Platform as a Service (PaaS) в Microsoft Azure и который упрощает задачи развертывания, управления и масштабирования, связанные с размещенными облачными приложениями. Если вы сочли, что WAWS — очередное чрезмерно восхваляемое решение хостинга, подумайте еще разок. Чем он отличается, так это уровнем масштабируемости и доступности, поддерживаемым множеством информационных центров по всему миру и механизмами восстановления после сбоев (failover mechanisms), унаследованными от компонентов PaaS. Более того, платформа Microsoft Azure предлагает множество дополнительных средств и возможностей помимо WAWS, что позволяет разработчикам расширять свои приложения по мере роста нагрузки и, в том числе, поддерживать большие объемы данных, идентификацию, мобильные сервисы и т. д.

Модели развертывания в информационном центре

Таксономия на рис. 1 иллюстрирует различные модели, связанные с развертыванием веб-приложения в общедоступном информационном центре. Количество уровней, делегируемых платформе или поставщику, позволяет различать Infrastructure as a Service (IaaS), PaaS и Software as a Service (SaaS).

Taxonomy for Cloud Deployment Models

Рис. 1. Таксономия моделей развертывания в облаке

Infrastructure (as a Service) Инфраструктура (как сервис)
Applications Приложения
Data Данные
Runtime Исполняющая среда
Middleware Промежуточное ПО
OS ОС
Virtualization Виртуализация
Servers Серверы
Storage Хранилище
Networking Сетевые средства
Platform (as a Service) Платформа (как сервис)
Software (as a Service) Программное обеспечение (как сервис)
You Manage Под вашим управлением
Vendor Manages Под управлением поставщика

Чем больше уровней вы делегируете поставщику, тем легче развертывать решение, хотя, в целом, уровень управления настройками делегированных уровней уменьшается. Microsoft Azure предлагает модели развертывания как IaaS, так и PaaS, которые в сочетании с другими сервисами позволяют компаниям создавать очень сложные и высокомасштабируемые облачные архитектуры. Исходя из этого, где же размещается WAWS?

Почему вам понравится Microsoft Azure Web Sites

Как мы упоминали, WAWS построен поверх инфраструктуры Microsoft Azure PaaS, а это значит, что вам придется заботиться только о поддержке приложения и уровней данных в стеке развертывания. Большая разница в сравнении с традиционной моделью PaaS, предлагаемой Microsoft Azure, заключается в том, что некоторые из задач развертывания и конфигурирования значительно упрощаются. Это возможно благодаря процессу подготовки нижележащего WAWS, который основан на комбинации рабочих ролей без состояний, хранилища Binary Large Objects (BLOB) и реляционных баз данных.

Архитектура поддержки WAWS показана на рис. 2. Это элегантный и надежный подход к предоставлению мультитенантной среды для хостинга веб-приложений. Работает он весьма просто.

  1. Клиент выдает запрос на размещение http://foo.azurewebsites.net.
  2. Запрос проходит через Microsoft Azure Network Load Balancer и попадает в соответствующее развертывание.
  3. Модуль Application Request Routing (ARR) получает информацию от базы данных исполняющей среды о foo.com, определяет, какие веб-серверы должны использоваться (или уже используются) для хостинга данного веб-сайта, а затем пересылает запрос соответствующему веб-серверу.
  4. Запрос обрабатывается веб-сервером; при этом контроллер хранилища помогает ему обратиться к нужному экземпляру SQL Server в том случае, если данные требуется считать или записать.
  5. После обработки запроса клиенту посылается ответ.

Microsoft Azure Web Sites Under the Hood

Рис. 2. «За кулисами» Microsoft Azure Web Sites

Microsoft Azure Network Load Balancer Microsoft Azure Network Load Balancer
IIS APP (Sites Load Balancer) IIS APP (Sites Load Balancer)
Runtime Database База данных исполняющей среды
API Front End Клиентская часть API
Deployment Servers Серверы развертывания
Web Server Веб-сервер
W3WP.exe IIS Application Pool Process Процесс пула приложений W3WP.exe (IIS)
Metering Мониторинг
Dynamic Web Activation Service Dynamic Web Activation Service
Storage Controller Контроллер хранилища
Web Sites Database База данных веб-сайтов
Cloud Drive Облачное хранилище
PaaS Worker Role Рабочая роль PaaS
Microsoft Azure SQL Database Microsoft Azure SQL Database
Microsoft Azure Storage Microsoft Azure Storage

Внутри каждого веб-сервера размещаются несколько процессов W3WP.exe (или сайтов), отслеживаемых специальным процессом, который ведет мониторинг ресурсов, ошибок и обеспечивает протоколирование. Кроме того, Dynamic Web Activation Service отвечает за активацию и деактивацию сайта, введение квот и развертывание файлов приложения. Завершают картину два дополнительных компонента: на серверах развертывания размещаются механизмы FTP и Web Deploy, а клиентская часть API предоставляет интерфейс для целей автоматизации.

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

Подумать об использовании WAWS стоит по нескольким важным причинам. Одна из них заключается в том, что этот сервис обеспечивает отличную поддержку разметки и скриптов на клиентской стороне, включая возможность соединения с базами данных SQL Server и MySQL. Это означает, что вам не придется заботиться о реализации серверной части веб-сервисов и серверной логики. Другая веская причина — способность WAWS к автоматическому масштабированию поддержки веб-пользователей как в моменты пиковой нагрузки, так и в периоды затишья.

Поскольку вы платите только за то, что используете, вы можете обеспечить отзывчивую среду своим пользователям при любой нагрузке и в то же время свести расходы к минимуму. Сервис WAWS также поддерживает методологии непрерывной разработки, что позволяет осуществлять развертывание напрямую из репозитариев исходного кода, применяя Git на клиенте, GitHub, CodePlex, Bitbucket или Team Foundation Server (TFS). Можно мгновенно загружать новый код или обеспечить постоянную интеграцию с онлайновым репозитарием. Благодаря модели подготовки сервис WAWS предлагает встроенную поддержку WordPress, Joomla!, Drupal, DotNetNuke, Umbraco и др. Эти шаблоны разбиты на категории в галерее WAWS и включают блоги, управление контентом, электронную коммерцию, форумы и вики-сайты.

Ограничения

Как и в любой другой технологии, упрощающей решение какой-либо проблемы, в WAWS тоже пришлось ввести свои ограничения. Например, WAWS не поддерживает промежуточную среду для тестирования или изоляцию сетей для создания моста между облачными приложениями и корпоративными сетями (в том числе Microsoft Azure Connect и Microsoft Azure Virtual Networks). Однако пользователи могут задействовать сервис Service Bus Relay для связи с корпоративными ресурсами. Кроме того, нельзя выполнять средство доступа к удаленному рабочему столу в вычислительных экземплярах (compute instances) или запускать стартовую задачу при развертывании. Но даже при таких ограничениях WAWS является отличным решением для разработки и развертывания веб-приложений, не требующих высокого уровня адаптации.

Практикум

Теперь пройдем простой учебный материал. Вы, как и мы, начнете понимать, что вам не нужно изучать что-то совершенно новое об облаке. Вы можете сосредоточиться на создании веб-приложения и на его данных — так же, как вы всегда это делали. Детали перемещения в облако абстрагируются сервисом, избавляя вас от любых проблем при развертывании. Вы можете даже писать классический ASP-код образца 1996 года и запускать его в WAWS.

Мы исследуем базовые элементы сервиса WAWS, создав простое, но практичное приложение на основе ASP.NET MVC 4 и использовав SQL Server в качестве серверной части. Это приложение будет поддерживать CRUD-операции (Create, Read, Update and Delete) и вряд ли потребует написания какого-либо кода. Пройдя подготовку WAWS и создание приложения ASP.NET MVC 4, мы развернем его с помощью Web Deploy из Visual Studio 2012. Единственное, на что придется потратиться, — это SQL Database; выполнение приложения ASP.NET MVC 4 в рамках WAWS бесплатно. Вы можете бесплатно запускать до десяти сайтов без даты окончания обслуживания.

Запустите Visual Studio и создайте проект MVC

Для начала откройте Visual Studio 2012 как администратор и щелкните File | New | Project. Выберите Web from the Installed Templates, а затем ASP.NET MVC 4 Web Application. Назовите проект MVCAzure.Website и щелкните OK (рис. 3). Далее вам понадобится выбрать Project Template. В данном случае укажите Internet Application. В качестве View Engine будет использоваться Razor.

Creating a New ASP.NET MVC 4 Web Application Project

Рис. 3. Создание нового проекта веб-приложения ASP.NET MVC 4

Code First

Подход Code First означает, что создаваемые вами в Visual Studio классы будут определять нижележащие таблицы в SQL Server. В приложении ASP.NET MVC 4 это подразумевает, что мы добавим некоторые модули классов в папку Models в Visual Studio Solution Explorer, как показано на рис. 4. Свойства, определенные в модулях классов, станут структурами таблицы SQL Database. Это весьма продуктивный подход, так как вам не приходится заботиться о сопоставлении своих объектов C#/Visual Basic с реляционными структурами данных. Для упрощения этого объектно-реляционного сопоставления мы задействуем Entity Framework. Эта инфраструктура является средством объектно-реляционного сопоставления (object-relational mapper), которая значительно облегчает взаимодействие с реляционной базой данных. Она позволяет выполнять CRUD-операции над объектами без сложных SQL-выражений.

Adding a Class to the Models Folder

Рис. 4. Добавление класса в папку Models

Начнем с выбора папки Models в Solution Explorer. Из меню Project выберите Add Class. Присвойте классу имя Person. Вставьте следующие свойства в этот класс (данные свойства станут полями таблицы Person в SQL Server):

public class Person
{
  public int PersonID { get; set; }
  public string FirstName { get; set; }
  public string LastName { get; set; }
}

Приложениям ASP.NET MVC 4 нужен класс контроллера, который выступает в роли моста между представлением и моделью. Представление можно рассматривать как UI, а модель — как данные. После добавления контроллера Visual Studio автоматически генерирует необходимые классы представления.

Однако, прежде чем добавлять класс контроллера, нужно собрать решение, чтобы добавить в проект соответствующую информацию о типах, которая понадобится на последующих этапах. Выберите из меню Build команду Build Solution. В Solution Explorer щелкните правой кнопкой мыши папку Controllers и выберите Add | Controller. Появится диалог Add Controller (рис. 5), и вам нужно будет задать параметры Scaffolding со следующими значениями.

  1. В раскрывающемся списке Template укажите «MVC Controller with read/write actions and views, using Entity Framework».
  2. В раскрывающемся списке Model class выберите класс Person.
  3. В списке Data context class выберите <New data context...>. В появившемся диалоговом окне присвойте имя PersonContext и щелкните OK.
  4. В раскрывающемся списке Views убедитесь, что выбран Razor.
  5. Щелкните Add, чтобы завершить процедуру.

Adding an MVC Controller Class

Рис. 5. Добавление класса контроллера MVC

Добавление контроллера в проект приводит к генерации всего необходимого веб-каркаса (Web scaffolding), чтобы можно было выполнять CRUD-операции с базой данной SQL Server; этот процесс добавляет несколько файлов, перечисленных в табл. 1. Если вы откроете класс PersonController, то сможете увидеть все методы, поддерживающие операции Create, Edit, Delete и List.

Табл. 1. Добавленные файлы

Папка Controller PersonController.cs
Папка Models

Person.cs

PersonContext.cs

Папка Views/Person

Create.cshtml

Delete.cshtml

Details.cshtml

Edit.cshtml

Index.cshtml

 

Следующий шаг: развертывание

Как упоминалось ранее, вы можете развертывать Web Sites, используя инфраструктуры непрерывной доставки (continuous delivery frameworks), такие как Git или TFS, либо простые средства вроде FTP или Web Deploy. В этой статье мы задействуем Web Deploy из Visual Studio, а информацию по остальным методологиям развертывания вы найдете в Microsoft Azure Training Kit (bit.ly/Wb0EKZ).

Первый шаг — регистрация в Microsoft Azure Management Portal. Для этого подпишитесь на бесплатный период пробного использования (90 дней) по ссылке bit.ly/azuretestdrive. Получив учетную запись, войдите под этой записью по следующему URL: manage.windowsazure.com. Затем щелкните ссылку Web Sites на левой стороне окна браузера. Далее выберите NEW | COMPUTE | WEB SITE | QUICK CREATE и введите нужный URL, как показано на рис. 6. Мы использовали «msdnmagazine», т. е. наш сайт будет находиться по адресу http://msdnmagazine.azurewebsites.net. Вы также должны выбрать регион.

Quick Provisioning of a Microsoft Azure Web Site Deployment

Рис. 6. Быстрая подготовка веб-сайта к развертыванию в Microsoft Azure

К этому моменту ваш сайт почти готов для развертывания контента. Процесс подготовки (provisioning process) осуществляется чрезвычайно быстро. Как только состояние меняется на «running», вы можете щелкнуть имя веб-сайта и приступить к управлению им. Кроме того на портале имеется информационная панель, показывающая время использования процессора (CPU time), запросы (Requests), объем исходящих данных (Data Out) и входящих (Data In), а также ошибки HTTP-сервера (HTTP Server Errors).

Ключевой этап в развертывании приложения — получение файла с профилем публикации, который содержит параметры, используемые Visual Studio при выполнении развертывания. В зависимости от браузера вам будет так или иначе предоставлена возможность скачать этот файл. Вы должны сохранить его копию на локальном компьютере, чтобы впоследствии его можно было использовать из Visual Studio.

Конфигурирование сервера базы данных

Перед запуском своего приложения ASP.NET MVC 4 вы должны сконфигурировать базу данных, как показано на рис. 7. Вспомните: этот проект использует парадигму Code First из Entity Framework, а значит, вам нет нужды заботиться обо всех командах управления данными, которые обычно требуются для создания и инициализации реляционных структур данных. Эту часть работы берет на себя Entity Framework.

Adding a Server to Host SQL Database

Рис. 7. Добавление сервера для хостинга базы данных SQL

Щелкнув ADD, вы увидите приглашение ввести логин и пароль, а также указать регион, где вы хотите разместить развернутую Microsoft Azure SQL Database. Настоятельно рекомендуется выбирать тот же информационный центр, где работает ваш WAWS, чтобы свести к минимуму задержки и избежать лишних расходов на передачу данных по сетям. В нашем случае логин — DBAdministrator. Это может оказаться важным впоследствии, если вам потребуется удаленный вход или если вы захотите сформировать строку подключения. Кроме того, заметьте, что имя сервера было подготовлено за вас (в нашем случае это ccek4yihqf). Щелкните имя сервера, чтобы получить более подробные сведения с портала (табл. 2).

Табл. 2. Подробные сведения о сервере

Имя сервера ccek4yihqf
Состояние сервера Started
Логин администратора DBAdministrator
URL https://ccek4yihqf.database.windows.net

Важная роль здесь — защитить информацию сервера базы данных, разрешив входящие соединения только с определенных IP-адресов. Щелкните Configure в верхней части экрана. Вы увидите свой текущий IP-адрес, который потом можно использовать для создания правила и прямого подключения к серверу с этого IP-адреса.

Запуск Web Deploy из Visual Studio

Теперь мы готовы закончить этот проект, развернув его и одновременно создав базу данных на только что подготовленном сервере. Вернитесь в Visual Studio и выберите View | Solution Explorer. Щелкните правой кнопкой мыши MVCAzure.WebSite и выберите Publish. Появится диалоговое окно Publish Web. Процесс основан на применении мастера, и первый шаг — загрузка файла с профилем публикации в Visual Studio, что кардинально упрощает процесс развертывания. Вы пройдете несколько шагов, указывая детали профиля публикации для приложения ASP.NET MVC 4 и сообщая информацию о том, как вы предпочли бы развернуть свое приложение в информационном центре Microsoft, в том числе задав URL и месторасположение вашего сервера Microsoft Azure SQL Database.

Вы можете указать сервер Microsoft Azure SQL Database, который будет использоваться вашим приложением ASP.NET MVC 4, щелкнув сначала Settings на левой стороне диалогового окна, а затем многоточие рядом с PersonContext, как показано на рис. 8.

Configuring the Database Connection

Рис. 8. Настройка соединения с базой данных

Теперь вам понадобится информация, которую вы получили с портала, когда создавали сервер базы данных. В нашем случае сервер — tcp:siqxqgihiy.database.windows.net, как показано на рис. 9. Заметьте, что мы включили «tcp» перед именем сервера. Вам также потребуется ввести имя администратора (мы ранее указали DBAdministrator) и пароль.

Connecting to the Server and Creating the Database

Рис. 9. Подключение к серверу и создание базы данных

После щелчка OK на указанном сервере физически создается база данных SQL. Вам будет предложено подтвердить этот этап. Создав базу данных, можно выбрать Publish из диалогового окна Publish Web Application. Чтобы видеть, что именно происходит в процессе развертывания, можно открыть окно View | Output в Visual Studio.

Теперь приложение полностью закончено, и вы найдете нашу версию по ссылке msdnmagazine.azurewebsites.net/Person. Заметьте, что нам вообще не пришлось писать какой-либо код: потребовалось всего несколько минут на то, чтобы создать нечто практичное и целостное.

Что дальше после развертывания?

После развертывания приложения легко выполнять такие задачи, как мониторинг, масштабирование или обновление веб-сайта. Один из подходов — работа с порталом Microsoft Azure, который предоставляет информационную панель, простую в использовании и доступную со многих устройств. Microsoft Azure SDK, начиная с версии 1.8, также позволяет автоматизировать некоторые из этих задач, в том числе управление строками подключения и параметрами приложения, изменение количества экземпляров или загрузку самого последнего журнала, за счет применения командлетов Windows PowerShell или прямых вызовов REST API.

Заключение

WAWS дает возможность почти мгновенно развертывать веб-приложения, при этом от вас требуются минимальные познания в сфере облачных технологий (а иногда они вообще не нужны). По мере роста потребностей вы можете подключать другие аспекты облачных технологий Microsoft Azure, например кеширование, Service Bus, хранилища и другие сервисы. Благодаря поддержке PaaS-компонентов Microsoft Azure трудно найти более простой способ хостинга масштабируемых, высокодоступных веб-приложений в облаке. Эти средства в сочетании с готовыми инфраструктурами вроде WordPress, Drupal, DotNetNuke и Umbraco позволяют разработчикам сосредоточить все внимание на создании веб-приложений с богатой функциональностью и репозитариев данных, делегируя инфраструктурные задачи платформе Microsoft Azure.


Бруно Теркали (Bruno Terkaly) — разработчик-идеолог в Microsoft. Его глубокие знания обусловлены долголетним опытом работы в различных областях, написанием кода с использованием множества платформ, языков, инфраструктур, SDK, библиотек и API. Основное внимание в своей работе он уделяет написанию кода, ведению блога и проведению презентаций по созданию облачных приложений, в частности на платформе Microsoft Azure.

Рикардо Виллалобос (Ricardo Villalobos) — квалифицированный архитектор ПО более чем с 15-летним опытом проектирования и создания приложений для компаний в сфере управления цепочками поставок. Обладатель различных технических сертификатов, а также степени магистра в управлении бизнесом от Университета Далласа, работает в качестве архитектора облака в инкубационной группе Microsoft Azure CSV для Microsoft.

Выражаем благодарность за рецензирование статьи эксперту Ниру Машковски (Nir Mashkowski).