ASP.NET MVC 4 в действии

ASP.NET MVC 4 в действии

Джеффри Палермо

Хостинг на платформе Windows Asure

Если бы вы уже в течение какого-то времени профессионально работали в сфере программного обеспечения, вы бы уже создавали среды производственного сервера. Возможно, вы были бы единственным, кто устанавливал бы физические серверы в каркасах data-центров. Но индустрия хостинга программного обеспечения сейчас находится на пороге революционного перехода к облачному вычислению. Вокруг популярных online-служб совсем немного ажиотажа, но облачная революция все еще нам предстоит. Это еще не случилось. Объявлено лишь о том, что облачное вычисление – это, в действительности, смесь служб хостинга и виртуализированных хостинг-провайдеров.

Azure в действии

Крис Хэй и Брайан Принц написали книгу об Azure под названием "Azure в действии" (http://www.manning.com/hay/). Ниже приведен короткий отрывок из первой главы:

"Представьте себе мир, в котором ваши приложения больше не были бы ограничены аппаратным обеспечением, и вы могли бы использовать любые необходимые вам вычислительные возможности, как только они бы вам понадобились. Что еще более важно, представьте себе мир, в котором вы бы платили только за те вычислительные возможности, которые вы бы использовали.

Теперь, когда ваше воображение бешено запускается, представьте, что вам не нужно заботиться об управлении инфраструктурой аппаратного обеспечения, и вы можете сосредоточиться на разрабатываемом вами программном обеспечении. В этом мире вы можете перейти от управления серверами к управлению приложениями…

… Облако – это группа серверов, на которых размещены ваши приложения и которые управляют ими, или предложение используемых служб (вымышленная веб-служба).

Главным различием между облачным и необлачным запросами является отделение инфраструктуры – в облаке, и вам не нужно заботиться о физическом аппаратном обеспечении, на котором размещена ваша служба. Еще одно отличие – большинство открытых облачных решений преподносятся в виде дозированной службы, что означает, что вы платите за используемые вами ресурсы (время вычисления, дисковое пространство, пропускная способность и т.д.), в тот момент, когда используете их."

Microsoft объявила о Windows Azure на Professional Developers’ Conference (крупнейшей конференции для разработчиков) в 2009 году. Ее целью было преобразование вычислительной способности в утилиту. Она выходит за пределы модели ценообразования – также охватывает сферу разработки и развертывания, которая рассматривается в этом разделе.

До настоящего времени в этой главе мы обсуждали развертывание на серверы, которые мы всецело контролировали. Даже если некоторые серверы могут быть виртуализированы на провайдерах хостинга, они все еще остаются серверами, которые нам необходимо настраивать. Если каркас data-центра рухнет, то рухнет и наш сервер. Для того чтобы получить его резервную копию, нам необходимо перенастраивать новый сервер, пока мы или провайдер хостинга не сохраним изображение сервера. Далее нам остается только надеяться на то, что резервное изображение достаточно достоверно. Этот виртуализированный образец хостинга не является утилитой. Azure – это перспектива utility computing (utility computing – пакет вычислительных ресурсов таких, как машинное вычисление, хранилище и службы).

Примечание.

Существует еще одна потенциальная операционная система для облака. Она носит название "OpenStack" и является совместной разработкой Rackspace и NASA. Для разработки в OpenStack еще не пришло время, и в настоящее время она поддерживает только виртуальные Linux серверы, а поддержка Windows находится на стадии разработки. Несмотря на то, что эта облачная операционная система с открытым исходным кодом еще не готова к использованию, многие влиятельные компании уже закупают ее. Более подробно об этой операционной системе вы можете прочитать на сайте: http://www.openstack.org/.

Данный раздел ознакомит вас с развертыванием вашего тестового приложения на Windows Azure. Вы увидите, как развертывать приложения на IIS 7/7.5 и IIS 6. Сейчас вы увидите, как развернуть ваше приложение на Windows Azure. Заметьте, что термины Windows Azure и Azure используются взаимозаменяемо.

Что такое Windows Azure и как мне его получить?

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

  • Мы должны установить серверную операционную систему и поддерживать в актуальном состоянии график обновлений
  • Мы должны выбрать, настроить и поддерживать в рабочем состоянии настройки сети, системы балансировки нагрузки и DNS
  • Мы должны проектировать, распределять и наращивать емкость запоминающего устройства
  • Мы должны создавать пользовательский проект развертывания для каждого приложения на основании потребностей конфигурации сервера; иногда мы должны включать в расписание перерыв в работе окон с целью развертывания новых версий
  • Мы должны с течением времени увеличивать вычислительную мощность путем реструктуризации среды
  • Мы должны проектировать и тестировать сценарии аварийного восстановления

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

Microsoft позиционирует Azure как свою операционную систему для облака. Для управления жизненным циклом развертывания приложения она обеспечивает сосредоточенность на самом приложении. После первоначальной разработки нового приложения, Azure предоставляет возможность развертывания приложения при помощи кнопки для online-сред, которое заботится об инициализации, обновлении и отказоустойчивости. Что касается Azure, то мы платим за то, что используем, по аналогии с электричеством в доме. Это – утилита. Вы платите только, когда пользуетесь ей. В рамках Azure Microsoft побуждает нас прекратить волноваться о функциональных возможностях и инфраструктуре.

Поскольку мы уже занялись Azure, давайте затратим некоторое время на настройку вашего бесплатного Azure аккаунта на сайте http://www.microsoft.com/windowsazure/free-trial/. Если вы являетесь подписчиком MSDN, то вы, возможно, уже имеете доступ к Azure. После того как ваш аккаунт готов к работе, ознакомьтесь с содержимым сайта http://dev.windowsazure.com для получения справочной информации о разработке.

Теперь давайте настроим Visual Studio для Azure. Для того чтобы развертывать приложения на Azure, вам необходимо установить Software Development Kit (SDK) на вашу локальную машину. Visual Studio 2010 SP1 намного упрощает этот процесс. Самый быстрый способ установки необходимых инструментов – попытаться добавить Azure проект, как это продемонстрировано на рисунке 21-9.

Рисунок 21-9: Для развертывания на Azure необходимы некоторые инструменты Visual Studio для ASP.NET MVC

Поскольку у нас не установлен Azure SDK, имеющий также название "Windows Azure Tools", мы видим только прототип шаблона проекта, который направляет нас напрямую к инсталлятору. Еще один легкий способ приобретения Azure SDK – загрузка его с сайта windowsazure.com, как это показано на рисунке 21-10.

Рисунок 21-10: Azure SDK устанавливается с помощью Web Platform Installer

После того, как вы загрузили Azure SDK, запуск Web Platform Installer будет выглядеть так, как это показано на рисунке 21-11. На рисунках с 21-11 до 21-14 продемонстрированы скриншоты тех шагов, которые вы проходите во время установки инструментальных средств.

Рисунок 21-11: С Web Platform Installer установка Windows Azure Tools становится проще
Рисунок 21-12: Для обязательных компонентов требуется 20 Mb свободного места на диске
Рисунок 21-13: Загрузка и установка Windows Azure Tools займет, возможно, от 2 до 5 минут
Рисунок 21-14: Различные компоненты, установленные для локального Azure тестирования

После установки инструментов Windows Azure Tools мы можем начать использовать их для того, чтобы настроить наше приложение для развертывания. Перезагрузите Visual Studio и продолжите работу, выполняя следующие шаги.

Настройка приложения для развертывания с помощью Azure

Для того чтобы настроить наше приложение для жизни в Windows Azure, нам необходимо добавить Azure проект в наше Visual Studio решение. Несмотря на то, что можно настроить и упаковать приложения для развертывания без изменения источника, использование этого типа проекта Visual Studio является довольно удобным и простым. Если вам нужно настроить ваше приложение без изменения Visual Studio решения или любой из директорий источника, то вы можете сделать это, используя средства командной строки в SDK. Это прогрессивный вопрос, который не рассматривается здесь. Обратитесь к книге "Azure в действии" Криса Хэя и Брайана Принца за тем, чтобы узнать более подробную информацию об этой методике.

Рисунок 21-15 демонстрирует нам, где найти Azure проект для добавления в наше решение.

Рисунок 21-15: Добавьте в решение новый Windows Azure проект рядом с вашим существующим ASP.NET MVC проектом

При добавлении этого проекта в существующее решение позаботьтесь о том, чтобы не нажать кнопку OK в окне, продемонстрированном на рисунке 21-16. Если вы это сделаете, то вы случайно создадите новое веб-приложение. Нажмите Cancel, а затем мы настроим еще некоторые вещи.

Рисунок 21-16: Отмените это окно. При нажатии на кнопку OK создается новое веб-приложение

Теперь, когда у нас есть Azure проект, мы настроим его так, чтобы он знал, как упаковывать наше веб-приложение. На рисунке 21-17 вы можете видеть, что этот проект очень отличается от ASP.NET MVC проекта или от проекта любого другого типа. Он существует только для того, чтобы вмещать в себе настройки для упаковки и развертывания других приложений в решении.

Рисунок 21-17: Нажмите правой кнопкой мыши на Roles, чтобы связать веб-приложение с настройками Azure развертывания

Для того чтобы настроить Azure проект таким образом, чтобы он знал о веб-приложении, в Solution Explorer нажмите правой кнопкой мыши на папке Roles и выберите пункт Add > Web Role Project. После выбора вашего приложения (в данном случае HostingSample) ваш экран будет выглядеть так, как это показано на рисунке 21-18.

Рисунок 21-18: Демонстрирует веб-приложение, сконфигурированное как веб-роль в Azure проекте

Запись HostingSample внутри элемента Roles является особенной. Она содержит скриншот свойств для того, чтобы помочь настроить два продемонстрированных конфигурационных файла. Нажмите Alt-Enter или просто нажмите правую кнопку мыши для вызова экрана, продемонстрированного на рисунке 21-19.

Рисунок 21-19: В свойствах мы можем выбрать наши опции Azure

Мы изменим Instance Count на 4 и установим в качестве VM Size значение Small. В рамках четырех небольших экземпляров мы будем иметь 4 виртуализированных сервера, каждый из которых имеет 1.6 GHz CPU, 1.75 GB RAM и 165 GB места на жестком диске, и запускается в облаке следом за балансировщиком нагрузки.

В таблице 21-1 продемонстрированы все спецификации экземпляров во время публикации. Visual Studio помечает их "VM size", а Windows Azure помечает их "compute instance size". Оба термина обозначают одно и то же.

Таблица 21-1: Размеры вычислительных экземпляров во время записи
Размер вычислительного экземпляра CPU Память Хранилище экземпляров Производительность операций ввода-вывода Стоимость в час
Extra Small 1.0 GHz 768 MB 20 GB Low $ 0.02
Small 1.6 GHz 1.75 GB 165 GB Moderate $ 0.12
Medium 2 x 1.6 GHz 3.5 GB 340 GB High $ 0.24
Large 4 x 1.6 GHz 7 GB 850 GB High $ 0.48
Extra Large 8 x 1.6 GHz 14 GB 1,890 GB High $ 0.96

Следующий шаг познакомит вас с примером разработки в Windows Azure. Одной из проблем, связанной с Azure, является локальная разработка в том случае, когда мы знаем, что наше приложение будет запускаться в конфигурации веб-фермы из четырех серверов.

Для того чтобы приступить к запуску и отладке, воспользуйтесь Ctrl-F5, чтобы запустить Azure проект. Visual Studio запустит development fabric (устройство разработки), которое эмулирует составные веб-серверы, связанные вместе при помощи балансировщика загрузки. Термин development fabric обозначает Windows Azure Emulator, в который входят 2 эмулятора, поставляемые с Azure SDK. При установке инструментов Windows Azure Tools вы установили эти эмуляторы:

  • Compute emulator (эмулятор вычисления) – эмулирует виртуальные серверы, которые запускают веб-приложения и worker-задания
  • Storage emulator (эмулятор хранения) – эмулирует провайдеров хранилища, которые могут использоваться

Несмотря на то, что новая система сворачивает появляющуюся иконку, вы можете выбрать Show Compute Emulator UI и увидеть консольное окно четырех запущенных экземпляров, как это продемонстрировано на рисунке 21-20. На рисунке 21-21 продемонстрирован текст, который записывается в консольное окно экземпляра 0.

Рисунок 21-20: Windows Azure Emulator дает нам возможность протестировать наше приложение в среде со сбалансированной нагрузкой
Рисунок 21-21: Экземпляры Azure обеспечивают заглушки для выполнения кода этих трех событий

При настройке проекта для развертывания на Azure вы будете выполнять запуск и отладку локально в Windows Azure Emulator вместо локального сервера веб-разработки или IIS Express. Это позволяет вам выполнять отладку в среде, которая очень близка к data-центру Azure.

Когда мы настраивали наше тестовое приложение как веб-роль и создавали 4 маленьких экземпляра, инструментальные средства Azure настраивали следующие файлы:

  • ServiceConfiguration.cscfg – содержит значения для настроек, заданные в файле определения и настройки индивидуальных ролей
  • ServiceDefinition.csdef – определяет роли и настройки для хостинговой службы

Для базовой разработки не нужна настройка этих файлов, потому что инструментарий добавляет для вас правильные настройки, но как только вы все чаще и чаще начнете развертывать на Azure, вам захочется ознакомиться со схемой этих файлов. Что касается веб-приложений, вы можете принять решение о том, чтобы хранить простые значения такие, как адрес SMTP сервера, либо в файле web.config, либо в файле ServiceConfiguration.cscfg.

Файл web.config используется только для веб-ролей, поэтому если вам нужна настройка, доступная также и для worker-ролей таких, как пакетные задания, вам необходимо переместить настройку вверх на один уровень в файл ServiceConfiguration.cscfg. Кроме того, вы можете обновить файл ServiceConfiguration.cscfg без повторного развертывания вашего приложения. Обновление этого файла приведет к перезагрузке приложения, но для этого не требуется полное повторное развертывание. В рамках Azure изменение любого файла, развернутого в экземпляр, такого, как файл web.config, требует повторного развертывания для того, чтобы впихнуть новый файл в экземпляры.

На данном этапе мы имеем приложение, которое запускается локально в Windows Azure Emulator. На рисунке 21-20 вы можете увидеть 4 экземпляра, но я тестировал приложение с 20 запущенными локально экземплярами (см. рисунки 21-22) до тех пор, пока моя рабочая станция Intel Core i7, 8 GB RAM не начала замедляться. Вы можете видеть, что у четырех экземпляров есть проблемы нехватки вычислительных ресурсов.

Рисунок 21-22: Вы можете запустить в Windows Azure Emulator много экземпляров, но вам необходим для этого мощный компьютер

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

Упаковка и развертывание вашего приложения

На данный момент ваше приложение работает локально с помощью Azure Compute Emulator. Что касается Azure 1.6, то для образов серверов в data-центрах не установлена ASP.NET MVC 4. Для них установлена ASP.NET MVC 3. Это означает, что в них отсутствуют некоторые другие используемые нами сборки. Чтобы наше приложение работало правильно, нам необходимо убедиться в том, что вместе с нашим приложением развернуты необходимые сборки.

Для настройки нашего приложения таким образом, чтобы оно развертывалось с необходимыми сборками, выберите Project > Add Deployable Dependencies из меню Visual Studio, как это продемонстрировано на рисунке 21-23.

Рисунок 21-23: Добавление разворачиваемых зависимостей необходимо для того, чтобы развертывать сборки MVC 4 на образы Azure сервера

Нам необходимо выбрать вариант ASP.NET MVC, как это показано на рисунке 21-24, для включения MVC сборок в наш пакет развертывания. Не сбивайтесь с толку тем, что во второй вариант входит Razor – ASP.NET MVC также включает в себя Razor. Второй вариант подходит для ASP.NET Web Pages сайта, который создан с помощью Web Matrix, простейшего инструмента веб-разработки, также от компании Microsoft.

Рисунок 21-24: Выбор первого варианта включает сборки ASP.NET MVC 4 в наш Azure пакет развертывания

Последний шаг перед тем, как мы сможем выполнить развертывание на Windows Azure, – создание пакета развертывания. В Visual Studio выберите Build > Publish AzureHosting, как это показано на рисунке 21-25. Вы увидите диалоговое окно, продемонстрированное на рисунке 21-26.

Рисунок 21-25: Package – это действие, которое создает пакет развертывания
Рисунок 21-26: Выберите конфигурацию службы и сборки

Скриншот на рисунке 21-26 дает вам возможность выполнить развертывание напрямую из Visual Studio или создать пакет, который вы можете передать специалистам по разработке среды. Мы создадим только пакет службы. После завершения шага публикации вы увидите, как откроется окно Windows Explorer с путем, соответствующим вашему каталогу Publish, подобно тому, как это показано на рисунке 21-27.

Рисунок 21-27: Шаг публикации создал файл AzureHosting.cspkg

Затем перейдите на сайт https://windows.azure.com, войдите в систему и используйте Management Portal для создания новой размещенной службы. При создании новой размещенной службы вам потребуется выбрать имя, тестовый URL и путь к файлу пакета, который мы только что создали. На рисунке 21-28 продемонстрирован скриншот экрана, заполненного для этого тестового приложения. Заметьте, что этот URL настроен как http://mvcinaction.cloudapp.net. Cloudapp.net – имя домена, который Microsoft использует для того, чтобы предоставить Azure разработчикам быстрый доступ к развернутым приложениям.

Рисунок 21-28: Выберите только что созданный вами файл пакета в качестве местоположения пакета

После нажатия кнопки OK на рисунке 21-28 вы увидите разнообразные сообщения, которые будут появляться на экране, пока Windows Azure выполняет развертывание вашей размещенной службы. Ниже перечислены некоторые сообщения, которые обычно отображаются во время этого процесса:

  • Preparing to upload, please wait (Подготовка к загрузке, пожалуйста, подождите)
  • 0-99% complete (0-99% выполнено)
  • Finalizing upload... (Завершение загрузки)
  • Initializing... (Инициализация)
  • Transitioning... (Трансформация)

Если что-то пошло не так, то вы увидите также и другие сообщения. Полный перечень возможных статусных сообщений можно посмотреть на сайте http://msdn.microsoft.com/en-us/library/hh127564.aspx. Вам следует ожидать того, что вам нужно будет подождать около 5 минут до того, как вы увидите экран, представленный на рисунке 21-29.

Рисунок 21-29: Management Portal демонстрирует текущий статус вашей среды

Если кажется, что ваш процесс развертывания никогда не закончится, то вы, скорее всего, пропустили тот шаг, где вы должны добавить разворачиваемые зависимости. Этот шаг должен быть выполнен для того, чтобы ваше приложение обладало необходимыми сборками для запуска ASP.NET MVC.

Как только развертывание приобретет статус Ready, как это продемонстрировано на рисунке 21-29, перейдите к выбранному вами имени хостинга, в данном примере – http://mvcinaction.cloudapp.net. Вы увидите, что приложение ведет себя так, будто выполняется локально. На рисунке 21-30 продемонстрировано приложение, запущенное в веб-браузере.

Рисунок 21-30: Наше приложение теперь запускается в облаке

Организация доступа к вашему приложению, запущенному в Windows Azure

При любой удаче ваше приложение будет безупречно запускаться в Windows Azure при первой же попытке. Мы не рассмотрели то, как развертывать и использовать базы данных с помощью этой хостинговой модели, и не использовали никакие возможности хранилища Windows Azure. Эта информация будет чрезвычайно полезна для вас, но она выходит за рамки ASP.NET MVC.

Примечание.

Мы использовали механизм разворачиваемых зависимостей для развертывания дополнительных сборок, необходимых для образов Azure сервера. Azure также поддерживает возможность, называемую задачи запуска (startup task). При желании вы можете настроить ваш файл ServiceDefinition.csdef таким образом, чтобы в него входил файл пакета, запускаемый каждый раз, когда ваше приложение запускается на образе сервера. Стив Маркс опубликовал руководство "ASP.NET MVC 3 в Windows Azure", описывающее, как устанавливать ASP.NET MVC 3 из командной строки во время Azure развертывания: http://blog.smarx.com/posts/asp-net-mvc-in-windows-azure. Процесс схож с процессом использования ASP.NET MVC 4 или любой другой необходимой инсталляции.

Windows Azure предоставляет совершенно новую модель развертывания для ваших ASP.NET MVC веб-приложений. При первом выполнении шагов это может показаться сложным, но при второй и третьей попытке развертывания на Azure вы увидите, что модель довольно проста. Количество провайдеров облачного хостинга увеличивается с каждым днем, и кажется, что эта модель хостинга будет следующей главной моделью на протяжении следующей декады. Если вы запускаете или перемещаете online-систему, то вы должны рассмотреть ее хостинг в облаке.

или RSS канал: Что новенького на smarly.net