azure - облачные сервисы и приложения
TRANSCRIPT
Windows Azure разработка в облаке и для облакаХостинг веб-приложений и облачных сервисов
Обзор модуляХостинг веб-приложений в AzureКонфигурирование и публикация веб-приложенийМониторинг и анализ развернутых веб-приложенийОбзор облачных сервисовВеб-роли и рабочие роли. Экземпляры ролейНастройка облачных сервисовОбновление сервисов и управление их развертыванием
Хостинг веб-приложений в AzureОбзор веб-приложенийУровни (сервисные планы) веб-приложенийХостинг и публикация веб-приложений в AzureКонфигурирование веб-приложений
Обзор веб-приложений
Обзор веб-приложенийПростой, масштабируемый хостинг для веб-приложений, обладающий рядом преимуществ:
Быстрый способ развертывания веб-приложений в облакеМасштабирование без необходимости внесения изменений в приложениеИнтеграция с Visual StudioОткрытая платформа для множества разных языков программирования
Уровни веб-приложенийВеб-приложения используют ресурсы в соответствии с пятью уровнями:
Free (dev/test)Общие вычислительные ресурсыОграниченная пропускная способность и процессорное времяОграниченные возможности настройки
Shared (dev/test)Общие вычислительные ресурсыНет ограничений по пропускной способности и процессорному времениДополнительные возможности настройки
Уровни веб-приложенийВеб-приложения используют ресурсы в соответствии с пятью уровнями:
Basic (live)Зарезервированные экземпляры (VM) для нескольких веб-приложенийНеограниченное количество веб-приложений
Standard (live)Зарезервированные экземпляры (VM) для нескольких веб-приложенийНеограниченное количество веб-приложенийАвтоматическое масштабирование
Уровни веб-приложенийВеб-приложения используют ресурсы в соответствии с пятью уровнями:
Premium (enterprise)Максимальные масштабируемость и изоляцияНеограниченное количество веб-приложений
Подробнее – здесь: https://azure.microsoft.com/en-us/pricing/details/app-service/
Уровни веб-приложенийДля хостинга нескольких веб-приложений используйте план Basic или Standard
Выделенные виртуальные машины для Ваших приложенийОплата по числу экземпляров (виртуальных машин), не веб-приложений
BasicStandard
Shared
FreePremium
ДЕМОСоздание веб-приложения
Хостинг веб-приложений в Azure
Конфигурация веб-приложенийПакет приложения и его конфигурация хранятся на внешнем хранилищеApp Settings и Connection Strings перехватываются и заменяются в процессе старта Пути масштабирования приложений:
Создание веб-сайтов в IIS с использованием Web Deploy package Применение конфигурационных настроек из внешнего хранилища
Конфигурация веб-приложенийВеб-приложения и сайты в IIS:
Для планов Free и Shared веб-приложения реализуются как сайты в IISДля плана Standard резервируется отдельная виртуальная машина с IIS, где каждое веб-приложение – это отдельный сайтТакже веб-приложениями можно управлять удаленно через IIS Manager
Хостинговые планыХостинговые планы могут логически группировать веб-приложения в рамках подписки
Возможности, емкость и т.д. общие для группы в рамках экземпляра
В одной ресурсной группе могут существовать несколько хостинговых планов Несколько веб-приложений могут существовать в одном хостинговом плане
Хостинговые планы
Хостинговые планыХостинговый план создается при создании нового экземпляра веб-приложения
Можно выбрать добавление приложения к существующему плануМожно создать новый план при создании нового веб-приложения
Конфигурирование веб-приложений
AlwaysOnДоступно начиная с плана Basic/StandardИдеальный выбор для постоянной продолжительной обработки запросовРегулярно генерирует простой HTTP-запрос
Своего рода heartbeat, чтобы убедиться что приложение все еще живое и app pool не утилизированПредотвращает выгрузку веб-приложений из памяти и заставляет их пересобраться при следующем запросе
Доменные именаСтандартный домен
[http/https]://<имя-веб-приложения>.azurewebsites.net
Начиная с режима Shared Вы можете настроить приложение на использование другого доменного имени
Управление A и CNAME записями в DNS
Traffic Manager поддерживает другие доменные имена
Автомасштабирование приложенийПравила масштабирования выбираются в зависимости от паттерна* и расписанияМасштабирование может быть настроено с использованием различных метрик
Metrics
CPU
Memory
HTTP Queue
Disk Queue
Data In
Data Out
Масштабирование производительности«Размер» экземпляраДиапазоны
Количество экземпляровЗагрузка CPU
ДЕМОАвтомасштабирование веб-приложений (старый портал)
Публикациявеб-приложений
Протокол Web DeployWeb Deploy упрощает развертывание веб-приложений на IIS, предоставляя стандартный формат пакета
Пакеты можно установить вручную – через IIS Manager или PowerShellПакеты можно установить удаленно через IIS instance remote deployment service
Visual Studio и WebMatrix поддерживают развертывание веб-приложений через Web Deploy
Протокол Web Deploy
App Settings и Connection StringsApp settings и connection strings можно задать и управлять ими через портал
ДЕМОApp Settings и Connection Strings
Мониторинг веб-приложенийСтарый портал:
Мониторинг веб-приложенийНовый портал:
Хостинг облачных сервисов в AzureОбзор облачных сервисовВеб-роли и рабочие роли. Экземпляры ролейНастройка облачных сервисовОбновление сервисов и управление их развертыванием
Обзор облачных сервисов
Архитектура облачного сервисаОблачный сервис в Azure состоит из трех частей:
Одна или больше виртуальных машин с Windows Azure OS(базируется на Windows Server)XML-файл конфигурации, который описывает сервис, точки подключения и др. нюансы сервиса и ролиБинарники для каждой роли
Новая виртуальная машина создается каждый раз, когда сервис создается, перезапускается или масштабируется; на каждую машину разворачиваются бинарники
Архитектура облачного сервиса
Роли облачных сервисовWeb RoleХостинг приложений с публичными http/tcp-точками подключения (что-то, что имеет веб-интерфейс)
MVC Web SiteWCF ServiceWeb API Service
Worker RoleФоновая обработка, долготекущие или прерывающиеся задачиМожет быть несколько экземпляров, получающих данные из очереди
Роли облачных сервисов
Worker roles• Default web
endpoints
Web roles• Hosted Web
Core (IIS)
Веб-роли
Веб-ролиПреднастроенный Windows ServerПредустановленный IISОткрытый порт 80Стандартная точка подключения (80)Может содержать все, что поддерживает IISМожно настроить через startup-скрипты
Точки подключения
Публичный порт 1433
Внешняя точка
подключения
Cloud app / Hosted service
порт 1433
Точки подключения
Внутренняя точка
подключения
порт 3389
Cloud app / Hosted service
Воркер-роли
Worker RolesПреднастроенный Windows ServerБольше ничего не установленоНет стандартных точек подключенияМожет содержать все, что не требует наличия IISУстановка дополнительного ПО через скриптыЛогика содержится в классе – наследнике WorkerRole.cs
Обмен данными с воркер-рольюИзолированный модуль, который может иметь несколько экземпляровДля запросов используется внешнее хранилище
Azure Queue Storage для хранения сообщений для Worker RoleService Bus queues – тоже неплохой вариантРеляционные базы данных – еще один способ
Worker Role может быть хостом для WCF-сервиса для получения запросов
Обмен данными с воркер-ролью
Обработка запросовВоркер-роль обычно реализует простой паттерн
Приостановить поток
Проверить наличие новых сообщений в хранилище
Обработать сообщение
Пометить сообщение как обработанное
Особенности реализации ролей
Использование Service RuntimeСборка Microsoft.WindowsAzure.ServiceRuntime входит в состав Azure SDKСборка содержит пространство имен Microsoft.WindowsAzure.ServiceRuntime которое включает классы для управления ролямиКласс RoleEntryPoint (базовый для обеих видов ролей) также содержится здесь
ДЕМОСтандартная реализация RoleEntryPoint
Реализация класса RoleEntryPointКаждая роль содержит класс – наследник базового класса Класс RoleEntryPoint содержит методы управления жизненным циклом, которые могут быть переопределены в дочерних классахAzure берет первый найденный ею класс – наследник RoleEntryPoint и выполняет его методы в таком порядке
RoleEntryPoint.OnStart()Global.Application_Start()RoleEntryPoint.Run()
Реализация класса RoleEntryPointВ методе OnStart() Вы можете настроить воркер-роль перед запуском
В это время, при просмотре через портал, статус роли - BusyЕсли OnStart() возвращает false, роль немедленно останавливаетсяЕсли OnStart() возвращает true, выполняется метод Run()
Реализация класса RoleEntryPointВ методе Run() Вы можете использовать бесконечный цикл для опроса состояния внешнего хранилища и получения из него одного или нескольких необработанных сообщений
Подробнее: https://azure.microsoft.com/en-us/documentation/articles/cloud-services-role-lifecycle-dotnet/
Жизненный цикл ролиЗагрузка пакета
с сервисом в Azure
Создание виртуальных
машин
Роли запускаются
RoleEntryPoint OnStart()
RoleEntryPoint Run()
Web или worker роли запущены
[Role Recycle]RoleEntryPoint
OnStop()
[Role Recycle]Роль удаляется
из балансировщика
нагрузки
Настройка облачных сервисов
МасштабированиеДля каждой роли можно увеличить количество экземпляров (в свойствах)Для облачных сервисов могут быть созданы виртуальные машины разных размеров
МасштабированиеНе забываем об автомасштабировании!Можно и нужно настроить правила автомасштабированияМожно масштабировать и вручную – через APIs
Local StorageLocal storage внутри роли описывается в XML-файле описания сервисаLocal storage резервирует каталог в файловой системе если приложению нужно читать или модифицировать файлLocal storage может сохраняться на протяжении всего жизненного цикла экземпляра роли, но это не гарантируется!
Подробнее: https://azure.microsoft.com/en-us/documentation/articles/cloud-services-configure-local-storage-resources
/
ДиагностикаМожно собирать диагностические данные об облачном сервисе в хранилище (storage account)
Только ошибки, все данные, или своя конфигурацияДанные сохраняются в учетной записи, описанной в XML-файле конфигурации ролиЭто настраивается через портал, скрипт или в файле конфигурации
Подробнее: https://azure.microsoft.com/en-us/documentation/articles/cloud-services-dotnet-diagnostics/
Развертывание облачных сервисов
Cloud Service PackagesServiceDefinition.csdefВозможные теги
<WebRole /><Sites /><WorkerRole /><InputEndpoints /><InstanceInputEndpoints /><InternalEndpoints /><ConfigurationSettings /><Certificates /><LocalResources /><Imports /><Startup />
При изменении надо переразвернуть
Cloud Service PackagesServiceConfiguration.*.cscfg(Cloud и Local)
<Instances /><ConfigurationSettings /><Certificates />
Должны коррелировать с ServiceDefinition.csdefМогут быть изменены без переразвертывания!
Обновление «поверх» (In-Place)Для существующего сервиса можно загрузить обновленный файл конфигурации
Должна быть корреляция с файлом описания, загруженным как часть пакетаИзменение конфигурации без изменения структуры приложения
Новый пакет и файл конфигурации можно загрузить в промежуточную среду (Staging Slot)
Можно выполнить обмен виртуальными IP-адресами для переключения Staging и Production сред
Лабораторная работа: веб-приложения облачные сервисы Часть 1Упражнение 1: Создание веб-приложения в Azure Упражнение 2: Развертывание ASP.NET веб-приложения в Azure
Упражнение 3: Настройка веб-приложения в AzureЧасть 2
Упражнение 1: Создание воркер-роли (C# Class Library)Упражнение 2: Добавление ее в проект облачного сервисаУпражнение 3: Отладка воркер-роли облачного сервисаРасчётное время: 65 минут
Сценарий лабораторной работыЧасть 1
У Вас есть работающее веб-приложение для управления мероприятиями, и его уже использует несколько пользователей. Вам необходимо найти вариант хостинга Вашего приложения, который позволит гибко реагировать на возрастающее количество пользовательских запросов, и позволит в будущем легко интегрировать в Ваше приложение необходимые сервисы.
Часть 2Логика работы Вашего приложения требует возможности генерации для каждого мероприятия документов в формате Word. С целью удобства последующего масштабирования Вы решили вынести эту функциональность в воркер-роль и обращаться к ней из веб-роли.
Вопросы и ответыРекомендации
Web Deploy упрощает развертывание и делает его независящим от хостинга
ВопросыПриведите примеры сценариев масштабирования приложений по расписаниюПочему есть смысл хранить логи для нескольких веб-приложений централизовано?Какие изменения нужно сделать в существующем веб-приложении, чтобы сделать его веб-ролью облачного сервиса? Правда или ложь: параметры в файле Web.config для веб-роли не могут быть изменены после ее публикации на Azure Приведите пример веб-роли с внутренней точкой подключения?