Microsoft Windows Azure. Начнем с простого (или локальная разработка для «облака»). Часть 5
В предыдущих частях данного обзора мы познакомились с:
- Windows Azure Tools for Microsoft Visual Studio и Windows Azure SDK
- Составом сервиса и локальным эмулятором
- Жизненным циклом сервиса
- Сервисами “облачного” хранилища
В этой части мы продолжим наше знакомство с сервисами хранилища, предоставляемыми платформой Windows Azure. Ниже мы рассмотрим очереди и диски.
Очереди
Очереди представляют собой хранилище, используемое для передачи сообщений между приложениями (можно считать это «облачным» аналогом MSMQ, Microsoft Message Queuing). Сообщения, хранимые в очереди, ограничены объемом в 8 Кбайт (размер самой очереди не ограничен) и обычно сохраняются и извлекаются по принципу FIFO – «первым вошел, первым вышел». Обработка сообщений из очереди состоит из двух шагов – получение сообщения и его удаление после обработки. Такой подход позволяет обеспечить гарантированную доставку сообщений за счет того, что сообщение остается в очереди до его полной обработки.
Каждое сообщение имеет набор специальных свойств:
- MessageID – уникальный идентификатор сообщения в рамках очереди (GUID)
- VisibilityTimeout – время, в течение которого сообщение остается «невидимым» в очереди после его извлечения. По умолчанию – 30 сек.
- PopReceipt –используется совместно с идентификатором сообщения для удаления сообщения из очереди
- MessageTTL – задает «время жизни» сообщения. По умолчанию – 7 дней. Если по истечении этого срока сообщение не было удалено из очереди, системный сборщик мусора принудительно удалит его
На уровне программных интерфейсов REST для учетной записи хранилища существует операция получения списка всех очередей - ListQueues, а для очереди поддерживаются операции создания (CreateQueue), удаления (DeleteQueue), получения и задания метаданных (GetQueueMetadata, SetQueueMetadata) и удаления сообщений (ClearMessages). Для сообщений поддерживаются следующие операции:
- PutMessage – добавляет сообщение в очередь
- GetMessages – извлекает сообщение из очереди и делает его «невидимым» для других потребителей
- PeekMessages – извлекает сообщение из начала очереди без изменения его «видимости»
- DeleteMessage – удаляет указанное сообщение из очереди
Можно выделить следующие основные сценарии использования очереди:
- Механизм коммуникаций между экземплярами веб- и прикладной роли
- Распределение нагрузки между прикладными ролями
- Обмен сообщениями между приложениями, работающими в локальной инфраструктуре
- Гарантированная доставка и обработка сообщений
Мы завершим наше знакомство с сервисами хранилища, предоставляемыми платформой Windows Azure, обсуждением дисков.
Диски
Диски представляют собой «облачное» хранилище, доступное через стандартные программные интерфейсы Windows NTFS для неуправляемого кода и через классы пространства имен System.IO для управляемого кода. Использование дисков упрощает перенос в «облако» существующего кода, использующего NTFS, и обеспечивает надежное хранение данных даже после перезапуска экземпляра роли. Диски представляют собой страничные бинарные объекты (Page Blob), в которых смонтированы тома NTFS VHD. Объем диска может достигать 1 Тбайт, а каждый экземпляр роли может смонтировать до 16 дисков. Поддерживается локальное кэширование для операций чтения и гарантированное, практически мгновенное выполнение операций записи.
Для дисков поддерживаются следующие операции:
- Create Drive – создание нового NTFS VHD в хранилище бинарных объектов
- Mount Drive – монтирование диска и присвоение ему названия («буквы»)
- Unmount Drive – размонтирование диска и освобождение ранее присвоенного названия («буквы»)
- Get Mounted Drives – получение списка всех смонтированных дисков, бинарных объектов и присвоенных «букв»
- Snapshot Drive – создание «моментального снимка» диска
В процессе работы с диском можно выделить следующие фазы:
- Монтирование
- Запись
- Чтение
- Обновление аренды бинарного объекта (внутренняя операция)
- Размонтирование диска
Часто, операции по монтированию диска включают как часть кода, выполняющегося при запуске экземпляра приложения – в методе OnStart() , а операции по размонтированию – при его завершении – OnStop() .
Обратите внимание на тот факт, что диски не поддерживают интерфейс REST. Для программного управления монтированием диска и другими операциями следует использовать класс CloudDrive, реализованный в пространстве имен Microsoft.WindowsAzure.StorageClient. В классе CloudDrive реализованы следующие методы: Create(), Delete(), GetMountedDrives(), InitializeCache(), Mount(), Snapshot() и Unmount().
Как мы отметили выше, для работы с данными используются либо соответствующие функции Windows API, либо классы пространства имен System.IO.
Локальная эмуляция сервисов хранилища
В состав Windows Azure SDK входит эмулятор «облачного» хранилища, который может быть использован совместно с эмулятором среды Windows Azure для локальной разработки, тестирования и т.п. Для запуска эмулятора в Visual Studio следует в свойствах проекта, на вкладке Development, указать соответствующую опцию.
Эмулятор также может быть запущен как отдельное приложение – нажмите кнопку Start, выберите в списке Windows Azure SDK v1.3, затем – Storage Emulator.
После этого, в правой части панели задач появится иконка с логотипом Windows Azure – она содержит команду Show Storage Emulator UI, которую следует использовать для запуска интерфейса локального эмулятора.
После выполнения этой команды мы увидим интерфейс эмулятора, отображающий состояние наших сервисов хранилища – бинарных объектов, очередей и таблиц и содержащий команды для запуска и останова этих сервисов. Обратите внимание на то, что для каждого сервиса указывается созданный для него адрес точки входа, который следует использовать в коде для обращения к методам соответствующего сервиса.
Так как диски не поддерживают программные интерфейсы REST, доступ к ним осуществляется через меню File – команду Open Azure Drive Folder in Windows Explorer.
На этом мы завершим наш цикл, посвященный локальной разработке для «облака».
/АФ