Начну с того, что вчера мне прислали приглашение на участие в тестировании Windows Azure.
И теперь я хочу поделиться своим первым опытом создания облачных приложений. Это будет простой хостинг изображений.
Тем, кто еще не знает, что такое Windows Azure, я предлагаю прочитать статью «What is the Azure Services Platform?» на английском или короткое описание в википедии на русском.
Итак, приступим.
Windows Azure CTP содержит следующие ограничения:
Так как решено было сделать хостинг изображений, то для этой задачи потребовалось создать одно хранилище данных (Storage1) и одно облако (Cloud1).
Для работы с Windows Azure в Visual Studio 2008 необходимо установить:
Например, код загрузки данных в Blob-хранилище будет выглядеть так:
После установки Windows Azure Tools в Visual Studio появятся новые типы проектов:
Создадим Worker Cloud Service. Это будет сервис, который будет работать в облаке и генерировать превью для изображений.
Шаблон кода его класса имеет вид:
Подключим к проекту Reference с классами работы с хранилищем (Microsoft.Samples.ServiceHosting.StorageClient):
Чтобы не угромождать статью, код сервиса приводить не буду, вот ссылка на него.
После написания кода сервиса, надо загрузить его в облако. Для этого подготовим пакет к «публикации»:
После этого будут созданы 2 файла (сам пакет с кодом сервиса и файл конфигурации, в котором указано количество узлов для сервиса), которые нужно загрузить в облако:
Процедура публикации состоит из двух этапов:
После публикации картина выглядит так:
Теперь у нас есть сервис, который работает в облаке, и хранилище. Осталось последнее – сделать веб-оболочку.
Тут всё более привычно, обойдемся одной aspx-страницей (Default.aspx, Default.aspx.cs), которые я разместил на хостинге от мастерхост (хотя можно было и это поручить облаку).
На странице размещена одна UpdatePanel, на которой содержится ContentTemplate с ссылками-превьюшками.
UpdatePanel обновляется каждые 5 секунд, получая все созданнные превью в хранилище на текущий момент. Ну очень простой хостинг картинок. =)
Всё готово: tinyakov.net/img.
Можно приступить к самому интересному — к тестированию!
График нагрузки на хранилище я буду время от времени обновлять.
На ваши вопросы в комментариях я постараюсь ответить.
И теперь я хочу поделиться своим первым опытом создания облачных приложений. Это будет простой хостинг изображений.
Тем, кто еще не знает, что такое Windows Azure, я предлагаю прочитать статью «What is the Azure Services Platform?» на английском или короткое описание в википедии на русском.
Итак, приступим.
Windows Azure CTP содержит следующие ограничения:
- Общее время вычислений: 2000 часов (≈ 83 дня в режиме 24/7)
- Объем хранилища: 50 Гб
- Максимальный трафик хранилища: 20 Гб/день
- Storage Account — распределенное хранилище для больших объемов структурированной и неструктурированной информации,
- Hosted Services — 64-битное вычислительное облако Azure Services Platform, которое и является хостингом для облачных приложений.
Так как решено было сделать хостинг изображений, то для этой задачи потребовалось создать одно хранилище данных (Storage1) и одно облако (Cloud1).
Для работы с Windows Azure в Visual Studio 2008 необходимо установить:
- Windows Azure SDK (7.3 MB)
- Windows Azure Tools for Microsoft Visual Studio (1.3 MB)
Например, код загрузки данных в 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 появятся новые типы проектов:
Создадим 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):
Чтобы не угромождать статью, код сервиса приводить не буду, вот ссылка на него.
После написания кода сервиса, надо загрузить его в облако. Для этого подготовим пакет к «публикации»:
После этого будут созданы 2 файла (сам пакет с кодом сервиса и файл конфигурации, в котором указано количество узлов для сервиса), которые нужно загрузить в облако:
Процедура публикации состоит из двух этапов:
После публикации картина выглядит так:
Теперь у нас есть сервис, который работает в облаке, и хранилище. Осталось последнее – сделать веб-оболочку.
Тут всё более привычно, обойдемся одной aspx-страницей (Default.aspx, Default.aspx.cs), которые я разместил на хостинге от мастерхост (хотя можно было и это поручить облаку).
На странице размещена одна UpdatePanel, на которой содержится ContentTemplate с ссылками-превьюшками.
UpdatePanel обновляется каждые 5 секунд, получая все созданнные превью в хранилище на текущий момент. Ну очень простой хостинг картинок. =)
Всё готово: tinyakov.net/img.
Можно приступить к самому интересному — к тестированию!
График нагрузки на хранилище я буду время от времени обновлять.
Спасибо за внимание! =)
Для тех, кто сам захотел прикоснуться к платформе Window Azure — зарегистрироваться на получение приглашения можно тут.На ваши вопросы в комментариях я постараюсь ответить.