Pull to refresh

Создание облачного приложения

Reading time3 min
Views8.5K
imageНачну с того, что вчера мне прислали приглашение на участие в тестировании Windows Azure.
И теперь я хочу поделиться своим первым опытом создания облачных приложений. Это будет простой хостинг изображений.

Тем, кто еще не знает, что такое Windows Azure, я предлагаю прочитать статью «What is the Azure Services Platform?» на английском или короткое описание в википедии на русском.

Итак, приступим.

Windows Azure CTP содержит следующие ограничения:
  • Общее время вычислений: 2000 часов (≈ 83 дня в режиме 24/7)
  • Объем хранилища: 50 Гб
  • Максимальный трафик хранилища: 20 Гб/день
У меня появилась возможность создавать 2 вида компонентов сервиса:
  • Storage Account — распределенное хранилище для больших объемов структурированной и неструктурированной информации,
  • Hosted Services — 64-битное вычислительное облако Azure Services Platform, которое и является хостингом для облачных приложений.
Вот как выглядит интерфейс создания новых компонентов:
Create_new_component.png - image uploaded to Picamatic

Так как решено было сделать хостинг изображений, то для этой задачи потребовалось создать одно хранилище данных (Storage1) и одно облако (Cloud1).

Для работы с Windows Azure в Visual Studio 2008 необходимо установить:В комплекте SDK содержится архив с уже готовыми примерами. Один из них (Thumbnails) я взял за основу. Также в SDK есть проект StorageClient, который состоит из классов, позволяющих легко работать с хранилищем. Подключим его в качестве Reference к сервису.

Например, код загрузки данных в Blob-хранилище будет выглядеть так:
// Получаем доступ к хранилищу по данным в конфигурационном файле
BlobStorage blobStorage = BlobStorage.Create(StorageAccountInfo.GetDefaultBlobStorageAccountFromConfiguration());
// Создание нового контейнера "photogallery" с публичными правами
BlobContainer blobContainer = blobStorage.GetBlobContainer("photogallery").CreateContainer(null, ContainerAccessControl.Public);
// Свойства контейнера
BlobProperties props = new BlobProperties("NameOfFileInContainer") { ContentType = upload.PostedFile.ContentType };
// Загрузка данных в контейнер
blobContainer.CreateBlob(props, new BlobContents(upload.FileContent), true);

После установки Windows Azure Tools в Visual Studio появятся новые типы проектов:
VS_New_Projects.png - image uploaded to Picamatic

Создадим Worker Cloud Service. Это будет сервис, который будет работать в облаке и генерировать превью для изображений.
Шаблон кода его класса имеет вид:
public class WorkerRole : RoleEntryPoint
  {
    public override void Start()
    {
      // This is a sample worker implementation. Replace with your logic.
      RoleManager.WriteToLog("Information", "Worker Process entry point called");

      while (true)
      {
        Thread.Sleep(10000);
        RoleManager.WriteToLog("Information", "Working");
      }
    }

    public override RoleStatus GetHealthStatus()
    {
      // This is a sample worker implementation. Replace with your logic.
      return RoleStatus.Healthy;
    }
  }
Как видно, сервис каждые 10 секунд пишет в лог, что он работает.

Подключим к проекту Reference с классами работы с хранилищем (Microsoft.Samples.ServiceHosting.StorageClient):
Add_reference.png - Picamatic - upload your images

Чтобы не угромождать статью, код сервиса приводить не буду, вот ссылка на него.

После написания кода сервиса, надо загрузить его в облако. Для этого подготовим пакет к «публикации»:
PublishToCloud.png - Picamatic - upload your images

После этого будут созданы 2 файла (сам пакет с кодом сервиса и файл конфигурации, в котором указано количество узлов для сервиса), которые нужно загрузить в облако:
Package.png - Picamatic - upload your images

Процедура публикации состоит из двух этапов:
  • Загрузка проекта в Staging для проверки
    Publish1.png - upload images with Picamatic
  • Перевод проверенного проекта в Production

После публикации картина выглядит так:
Published.png - upload images with Picamatic

Теперь у нас есть сервис, который работает в облаке, и хранилище. Осталось последнее – сделать веб-оболочку.

Тут всё более привычно, обойдемся одной aspx-страницей (Default.aspx, Default.aspx.cs), которые я разместил на хостинге от мастерхост (хотя можно было и это поручить облаку).
На странице размещена одна UpdatePanel, на которой содержится ContentTemplate с ссылками-превьюшками.
UpdatePanel обновляется каждые 5 секунд, получая все созданнные превью в хранилище на текущий момент. Ну очень простой хостинг картинок. =)

Всё готово: tinyakov.net/img.

Можно приступить к самому интересному — к тестированию!

График нагрузки на хранилище я буду время от времени обновлять.


Спасибо за внимание! =)

Для тех, кто сам захотел прикоснуться к платформе Window Azure — зарегистрироваться на получение приглашения можно тут.
На ваши вопросы в комментариях я постараюсь ответить.
Tags:
Hubs:
Total votes 87: ↑74 and ↓13+61
Comments22

Articles