Как я уже писал ранее облачная операционная система Windows Azure является одним из четырех основных компонентов облачной платформы Майкрософт Windows Azure Platform и отвечает за выполнение приложений и хранение данных на серверах в датацентрах Майкрософт, а также предоставляет средства для мониторинга и управления. Если не вдаваться в детали, то датацентр представляет собой большой склад, набитый стандартными морскими контейнерами, в которых стоят стойки с серверами. Когда вы размещаете свой сервис в облаке, то для вас создается и запускается виртуальная машина, на которую устанавливается ваше приложение. Операционная система виртуальной машины называется гостевой ОС и представляет собой оптимизированную для облака версию Windows Server 2008. В отличие от гостевой ОС, Windows Azure OS как раз управляет всей инфраструктурой датацентра, всеми серверами, виртуальными машинами, сервисами.
Сейчас доступны 4 размера виртуальных машин.
VM Size | CPU Cores | Memory | Local Storage |
Small | 1 | 1.7 GB | 250 GB |
Medium | 2 | 3.5 GB | 500 GB |
Large | 4 | 7 GB | 1000 GB |
ExtraLarge | 8 | 14 GB | 2000 GB |
Нужно отметить, что приложения, размещаемые в облаке, должны быть stateless. Это важно, т.к балансировщик нагрузки всегда динамически определяет какому экземпляру вашего сервиса отправить пришедший запрос. Кроме того, это дает Windows Azure возможность свободно управлять вашими виртуальными машинами, не заботясь о сохранности состояния. Например, для того чтобы накатить обновления на гостевую ОС, Windows Azure создаст еще одну виртуалку, накатит на нее обновления, установит ваше приложение и скажет балансировщику нагрузки отправлять теперь запросы от пользователей на нее, а старую виртуалку просто удалит. Таким образом обновление произойдет незаметно для пользователей и вообще не потребует никакого перерыва в доступности вашего приложения. Точно такой же механизм подмены виртуалок работает в случае когда вы сами выкатываете обновления своего приложения в облако.
Compute
Итак какие же приложения можно размещать в облаке? То, что Windows Azure умеет хостить .Net приложения наверняка не вызывает удивления. Это как бы обязательная программа. Поддерживаются 3.5 SP1 и 4.0 версии фреймворка. Но кроме этого Azure позволяет хостить приложения скомпилированные в native code , а также написанные на Java и PHP.
Все сервисы размещаемые в Azure состоят из одной или нескольких так называемых “ролей”. Сейчас доступны всего два вида этих ролей.
- Web Role представляет собой ASP.Net Web приложение (сайт или WCF сервис) доступное по HTTP, HTTPS.
- Worker Role является приложением, которое может решать любые задачи для вашего сервиса, доступное по HTTP, HTTPS или TCP и реализованное, например, как сервис Windows.
Число ролей, из которых состоит ваше приложение, можно изменять на ходу. При этом надо понимать что каждый экземпляр роли – это отдельная виртуалка.
Storage
Кроме хостинга приложений Windows Azure предоставляет еще сервисы для хранения данных. Обратите внимание, что Storage это не SQL Azure, а отдельный сервис, который позволяет хранить в облаке следующие типы объектов:
- Blob’ы (Binary Large OBjects) – для больших текстовых и бинарных данных
- Таблицы – для структурированных данных
- Очереди – для обеспечения надежного обмена сообщениями между сервисами.
- Drive – для приложения в облаке Drive выглядит как подключенный сетевой диск NTFS. На самом деле каждый Drive представляет собой Page Blob отформатированный как NTFS раздел.
Для обеспечения надежности хранения данных в Storage всегда хранится три копии. Сейчас они хранятся в рамках одного датацентра, но раскидываются по разным стойкам и контейнерам. В планах Майкрософт хранить их в разных датацентрах, вплоть до того, что на разных материках.
Доступ ко всем типам объектов хранилища осуществляется через стандартный HTTP REST PUT/GET/DELETE интерфейс. Для .Net приложений поставляется библиотека Windows Azure Storage Client Library, оборачивающая вызовы REST методов в удобную объектную модель.
Ниже приведен общий вид URI для доступа к объектам хранилища:
- http://<account>.blob.core.windows.net/<container>/<blob>
- http://<account>.table.core.windows.net/<Table>
- http://<account>.queue.core.windows.net/<Queue>
Хочу обратить ваше внимание на то, что Storage можно использовать сам по себе (например, для десктопных приложений), а не только для приложений размещенных в облаке.
Blob
На рисунке выше показана структура хранилища blob’ов. Аккаунт является точкой доступа к хранилищу. Каждый аккаунт может иметь несколько контейнеров. Каждый контейнер может содержать несколько blob’ов.
Существует два вида blob’ов:
- Block blob –оптимизированные для потокового доступа. Максимальный размер блока тут составляет 4MB, blob поддерживает до 50 тысяч блоков. Максимальный размер blob’а – 200GB.
- Paged – оптимизированные для произвольного доступа к страницам blob’а. Максимальный размер такого blob’а – 1TB.
Таблицы
Таблицы в Azure Storage хранят наборы сущностей. Однако в отличие от реляционных таблиц они не имеют фиксированной схемы данных. Каждая сущность (строка) в таблице представляет собой список свойств (столбцов). А каждое свойство хранит пару значений; имя свойства и значение свойства.
Общий объем данных каждой сущности не должен превышать 1MB. Типы данных, которые можно хранить в таблицах:
Property Type | Details |
Binary | An array of bytes up to 64 KB in size. |
Bool | A Boolean value. |
DateTime | A 64-bit value expressed as UTC time. The supported range of values is 1/1/1601 to 12/31/9999. |
Double | A 64-bit floating point value. |
GUID | A 128-bit globally unique identifier. |
Int | A 32-bit integer. |
Int64 | A 64-bit integer. |
String | A UTF-16-encoded value. String values may be up to 64 KB in size. |
Каждая строка в таблице должна иметь два обязательных поля:
- PartitionKey – Используется для разбиения таблицы на разделы. Система использует это поле для того, чтобы автоматически разнести записи различных разделов таблицы по разным узлам хранилища.
- RowKey – уникальный идентификатор записи внутри раздела.
Windows Azure позволяет разбивать таблицы на тысячи разделов, тем самым обеспечивая отличную масштабируемость и быстрый доступ к данным.
Очереди
Очереди используются для обмена сообщениями между приложениями (необязательно размещенными в облаке). Azure Queues это облачный аналог MSMQ.
- Нет никаких ограничений на количество сообщений в очереди (единственное ограничение – 100TB – максимальный объем доступный для аккаунта).
- Сообщения в очереди могут храниться до недели. Потом они будут автоматически удалены.
- Максимальный размер сообщения – 8KB. Данные большего размера можно сохранить в Blob или таблицу, а в сообщение поместить только ссылку.
Однако Azure Queues не являются традиционным FIFO контейнером. Сообщения остаются в очереди до тех пор пока не будут явно удалены из нее. Если сообщение будет прочитано каким-то приложением, то оно будет помечено как “невидимое”. Невидимым сообщение может оставаться от 30сек (значение по умолчанию) до 2х часов. Если за это время сообщение не будет удалено, то невидимость будет снята, и сообщение станет доступно для обработки другими приложениями. Понятно что в такой реализации ни о каком порядке обработки сообщений речи быть не может.
Цены
Коммерческая эксплуатация Windows Azure началась с 1 января 2010 года. Цены у Майкрософт получились такими:
- Compute = $0.12 / instance / hour
- Storage = $0.15 / GB stored / month
- Storage transactions = $0.01 / 10K
- Data transfers (excluding CDN) = $0.10 in / $0.15 out / GB - ($0.30 in / $0.45 out / GB in Asia)
- CDN data transfers = $0.15 GB for North America and Europe ($0.20 GB elsewhere)
- CDN transactions = $0.01 / 10K
Обратите внимание, что минимальной единицей оплаты вычислительных ресурсов является астрономический час, а не вычислительный. Это означает, что если вы запустите 100 экземпляров в 9:30 утра и остановите их в 9:45, то вам насчитают 100 экземпляров * 1 час * 0,12 центов = $12.
Исключением являются следующие моменты:
- запуск за 5 минут до наступления полного астрономического часа (11:56). В этом случае вам не насчитают час работы с 11:56 до 12:00.
- остановка в течение 5 минут после наступления полного астрономического часа (13:03). В этом случае вам не насчитают 1 час работы с 13:00 до 13:03.
Итого
На этом с теорией, я думаю, пора заканчивать. В следующей статье, я покажу как создать простой сервис для Windows Azure.
Еще один ресурс русскоязычный
ReplyDeletehttp://way2cloud.com/
Да. Это отличный ресурс. Я уже давал ссылку на него в предыдущем посте про Azure http://dimakudr.blogspot.com/2010/06/windows-azure.html
ReplyDelete