Популярные услуги

Azure Services Platform (продолжение)

2021-03-09СтудИзба

Лекция 7. Azure Services Platform. Часть 2

Краткая аннотация лекции:

Платформа Windows Azure – это модель Платформа как Сервис, которая предполагает запуск приложений на серверах и связанной сетевой инфраструктуре, размещенной в центрах обработки данных Microsoft и имеющей доступ в Интернет. В ходе данной лекции мы рассмотрим основные узлы и компоненты данной платформы.

Цель лекции:

Цель данной лекции – получить представление об архитектуре Windows Azure

Текст лекции:

Azure Blob Services

Для работы с Windows Azure Storage пользователь должен создать учетную запись хранилища. Выполняется это через веб-интерфейс портала Windows Azure Portal. При создании учетной записи пользователь получает 256-разрядный секретный ключ, который впоследствии используется для аутентификации запросов этого пользователя к системе хранения. В частности, с помощью этого секретного ключа создается подпись HMAC SHA256 для запроса. Эта подпись передается с каждым запросом данного пользователя для обеспечения аутентификации через проверку достоверности подписи HMAC

Благодаря Windows Azure Blob приложения получают возможность хранения в облаке больших объектов, до 50 ГБ каждый. Он поддерживает высоко масштабируемую систему больших двоичных объектов (blob), в которой наиболее часто используемые blob распределяются среди множества серверов для обслуживания необходимых объемов трафика. Более того, эта система характеризуется высокой надежностью и длительностью хранения. Данные доступны в любой момент времени из любой точки планеты и продублированы, по крайней мере, трижды для повышения надежности. Кроме того, обеспечивается строгая согласованность, что гарантирует немедленную доступность объекта при его добавлении или обновлении: все изменения, внесенные в предыдущей операции записи, немедленно видны при последующем чтении.

Рекомендуемые материалы

Рассмотрим модель данных Azure Blob. На рисунке ниже представлено пространство имен Windows Azure Blob.

· Учетная запись хранилища – Любой доступ к Windows Azure Storage осуществляется через учетную запись хранилища.

o Это самый высокий уровень пространства имен для доступа к объектам blob.

o Учетная запись может иметь множество контейнеров Blob.

Рисунок 7.1 Общее представление хранилища Blob

· Контейнер Blob – Контейнер обеспечивает группировку набора объектов blob. Область действия имени контейнера ограничена учетной записью.

o Политики совместного использования задаются на уровне контейнера. В настоящее время поддерживаются «Public READ» (Открытое чтение) и «Private» (Закрытый). Если для контейнера определена политика «Public READ», все его содержимое открыто доступно для чтения без необходимости аутентификации. Политика «Private» означает доступ с аутентификацией, т.е. только владелец соответствующей учетной записи имеет доступ к объектам blob этого контейнера.

o С контейнером могут быть ассоциированы метаданные, которые задаются в виде пар <имя, значение>. Максимальный размер метаданных контейнера – 8КБ.

o Существует возможность получения списка всех объектов blob контейнера.

· Blob – Объекты blob хранятся в контейнерах Blob Container и их область действия ограничена этими контейнерами. Каждый blob может быть размером до 50ГБ и имеет уникальное в рамках контейнера строковое имя. С blob могут быть ассоциированы метаданные, которые задаются в виде пар <имя, значение> и могут достигать размера 8КБ для blob. Метаданные blob могут быть получены и заданы отдельно от данных blob.

Для доступа к Windows Azure Blob используется приведенные выше подходы. URI конкретного blob структурирован следующим образом:

http://<учетнаязапись>.blob.core.windows.net/<контейнер>/<имяblob>

Первая часть имени хоста образована именем учетной записи хранилища, за которым следует ключевое слово «blob». Это обеспечивает направление запроса в часть Windows Azure Storage, которая обрабатывает запросы blob. За именем хоста идет имя контейнера, «/» и затем имя blob. Существуют ограничения именования учетных записей и контейнеров (подробнее об этом рассказывается в документе Windows Azure SDK). Например, имя контейнера не может включать символ «/».

Еще несколько замечаний по поводу контейнеров:

· Как говорилось выше, область действия контейнеров ограничена учетной записью, которой они принадлежат. Контейнеры хранятся распределено, что устраняет вероятность возникновения «узких мест» для трафика при работе с ними.

· Возможна задержка при воссоздании контейнера, который был недавно удален, особенно если в этом контейнере находилось большое количество объектов blob. Система должна очистить объекты blob этого контейнера, прежде чем контейнер с таким же именем сможет быть создан вновь. Пока сервер удаляет все объекты blob, попытки создания контейнера с таким же именем будут оканчиваться неудачей с формированием ошибки, указывающей на то, что контейнер находится в процессе удаления.

· Команды на удаление или создание совершенно нового контейнера быстро передаются на сервер, и приложению возвращается подтверждение об их выполнении, даже если операция удаления занимает некоторое время.

Рассмотрим интерфейс REST объектов Blob. Любой доступ к Windows Azure Blob выполняется через стандартные HTTP-команды PUT/GET/DELETE интерфейса REST.

К командам HTTP/REST, поддерживаемым для реализации операций с blob, относятся:

· PUT Blob – Вставить новый или перезаписать существующий blob с заданным именем.

· GET Blob – Получить весь blob или диапазон байтов blob, используя стандартную HTTP-операцию для возвращения диапазона GET.

· DELETE Blob – Удалить существующий blob.

Все эти операции с blobPut, Get и Delete, – могут быть выполнены с использованием следующего URL:

http://<учетнаязапись>.blob.core.windows.net/<контейнер>/<имяblob>

Один запрос PUT обеспечивает возможность загрузки в облако blob размером до 64 МБ. Для загрузки blob, размер которого превышает 64 МБ, используется технология загрузки блоками, описываемый в следующем разделе.

Полное описание всех API REST можно найти в документе Windows Azure SDK.

Один из целевых сценариев Windows Azure Blob – эффективная загрузка объектов blob, размером десятки гигабайт. Windows Azure Blob обеспечивает это следующим образом:

Загружаемый Blob (например, Movie.avi) разбивается на последовательные блоки. Например, ролик размером 10ГБ может быть разбит на 2500 блоков по 4МБ, при этом первый блок будет представлять диапазон байтов данных от 1 до 4194304, второй блок – от 4194305 до 8388608 и т.д.

· Каждому блоку присваивается уникальный ID/имя. Область действия этого уникального ID ограничена именем загружаемого blob. Например, первый блок может быть назван «Block 0001», второй – «Block 0002» и т.д.

· Каждый блок размещается в облаке. Для этого используется операция PUT с указанием представленного выше URL с запросом, определяющим, что это операция размещения блока, и ID блока. Продолжая пример, при размещении первого блока будет указано имя blob «Movie.avi» и ID блока «Block 0001» .

· Когда все блоки размещены в Windows Azure Storage, передается список загруженных блоков, чтобы представить blob, с которым они ассоциированы. Выполняется это с помощью операции PUT с указанием представленного выше URL с запросом, определяющим, что это команда blocklist. После этого HTTP-заголовок включает список блоков, которые должны использоваться в этом blob. В случае успешного завершения этой операции получаем список блоков, представляющий пригодную для чтения версию blob. Теперь blob может быть считан с помощью описанной выше команды GET Blob.

На следующем рисунке представлено место блоков в концепции данных Windows Azure Blob.

Рисунок 7.2 Общее представление хранилища Blob, добавление блоков

Как описывалось ранее, доступ к объектам blob может осуществляться посредством операций PUT и GET с использованием следующего URL:

http://<учетнаязапись>.blob.core.windows.net/<контейнер>/<имяblob>

В примере, представленном на рисунке 7.2, рисунки со следующими URL могут быть размещены одной операцией PUT:

http://sally.blob.core.windows.net/pictures/IMG001.JPG

http://sally.blob.core.windows.net/pictures/IMG002.JPG

Те же URL могут использоваться для возвращения объектов blob. Одна операция PUT может обеспечить размещение в хранилище объектов blob размером до 64МБ. Для сохранения объектов blob размером больше 64МБ и вплоть до 50 ГБ необходимо сначала разместить все блоки посредством соответствующего количества операций PUT и затем, с помощью все той же операции PUT, передать список блоков, чтобы обеспечить пригодную для чтения версию blob. В примере, который иллюстрирует рис. 2, только после размещения всех блоков и подтверждения их принадлежности blob посредством списка блоков blob может быть считан с использованием следующего URL:

http://sally.blob.core.windows.net/pictures/MOV1.AVI

Операции GET всегда выполняются на уровне blob и не предполагают использования блоков.

Рассмотрим абстракции данных блоков. Каждый блок идентифицирует ID блока размером до 64 байт. Область действия ID блока ограничена именем blob, поэтому разные объекты blob могут иметь блоки с одинаковыми ID. Блоки неизменны. Каждый блок может быть размером до 4МБ, и один blob может включать блоки разного размера. Windows Azure Blob обеспечивает следующие операции уровня блока:

· PUT block – загрузить блок blob. Обратите внимание, что успешно загруженный посредством операции PUT block блок не является частью blob до тех пор, пока это не будет подтверждено списком блоков, загружаемым операцией PUT blocklist.

· PUT blocklist – подтвердить blob через предоставление списка ID блоков, его составляющих. Указанные в этой операции блоки должны быть уже успешно загружены через вызовы PUT. Порядок блоков в операции PUT blocklist обеспечит пригодную для чтения версию blob.

· GET blocklist – извлечь список блоков, переданный ранее для blob операцией PUT blocklist. В возвращаемом списке блоков указываются ID и размер каждого блока.

Во всех рассматриваемых далее примерах используется blob «MOV1.avi», располагающийся в контейнере «movies» (ролики) под учетной записью «sally» .

Ниже представлен пример REST-запроса для размещения блока размером 4МБ посредством операции PUT block. Обратите внимание, что используется HTTP-команда PUT. «?comp=block» указывает на то, что это операция PUT block. Затем задается BlockID. Параметр Content-MD5 может быть задан для защиты от ошибок передачи по сети и обеспечения целостности. В данном случае, Content-MD5 – это контрольная сумма MD5 данных блока в запросе. Контрольная сумма проверяется на сервере, в случае несовпадения возвращается ошибка. Параметр Content-Length (Длина содержимого) определяет размер содержимого блока. Также в заголовке HTTP-запроса имеется заголовок авторизации, как показано ниже.

PUT http://sally.blob.core.windows.net/movies/MOV1.avi

?comp=block &blockid=BlockId1 &timeout=60

HTTP/1.1 Content-Length: 4194304

Content-MD5: HUXZLQLMuI/KZ5KDcJPcOA==

Authorization: SharedKey sally: F5a+dUDvef+PfMb4T8Rc2jHcwfK58KecSZY+l2naIao=

x-ms-date: Mon, 27 Oct 2008 17:00:25 GMT

……… Block Data Contents ………

Ниже представлен пример REST-запроса для операции PUT blocklist. Обратите внимание, что используется HTTP-команда PUT. «?comp=blocklist» указывает на то, что это операция PUT blocklist. Список блоков задается в теле HTTP-запроса в формате XML, как показано в примере ниже. Обратите внимание, что значение поля Content-Length в заголовке запроса соответствует размеру тела запроса, а не размеру создаваемого blob. Также в заголовке HTTP-запроса имеется заголовок авторизации, как показано ниже.

PUT http://sally.blob.core.windows.net/movies/MOV1.avi

?comp=blocklist &timeout=120

HTTP/1.1 Content-Length: 161213

Authorization: SharedKey sally: QrmowAF72IsFEs0GaNCtRU143JpkflIgRTcOdKZaYxw=

x-ms-date: Mon, 27 Oct 2008 17:00:25 GMT

<?xml version=“1.0” encoding=“utf-8”?>

<BlockList>

<Block>BlockId1</Block>

<Block>BlockId2</Block>

………………

</BlockList>

Ниже представлен пример REST-запроса для операции GET blob. В данном случае используется HTTP-команда GET. Этот запрос обеспечит извлечение всего содержимого заданного blob. Если для контейнера, которому принадлежит blob (в данном примере «movies» ), задана политика совместного использования «Private», для получения blob необходимо пройти аутентификацию. Если задана политика совместного использования «Public-Read», аутентификация не требуется, и заголовок аутентификации в заголовке запроса не нужен.

GET http://sally.blob.core.windows.net/movies/MOV1.avi

HTTP/1.1

Authorization: SharedKey sally: RGllHMtzKMi4y/nedSk5Vn74IU6/fRMwiPsL+uYSDjY=

X-ms-date: Mon, 27 Oct 2008 17:00:25 GMT

Как показано в примере ниже, также поддерживается операция GET для извлечения диапазона байт заданного blob.

GET http://sally.blob.core.windows.net/movies/MOV1.avi

HTTP/1.1

Range: bytes=1024000-2048000

Загрузка blob в виде списка блоков обладает следующими преимуществами:

· Возможность продолжения – для каждого блока в отдельности можно проверить успешность загрузки, в случае сбоя повторить попытку загрузки и продолжить выполнение с этого момента.

· Параллельная загрузка – загрузка блоков может выполняться параллельно, что обеспечивает сокращение времени загрузки очень больших объектов blob.

· Загрузка не по порядку – Блоки могут загружаться в произвольном порядке. Значение имеет лишь порядок блоков в списке операции PUT blocklist. Список блоков в операции PUT blocklist определяет пригодную для чтения версию blob.

Рисунок 7.3 Сценарий загрузки блоков

Используя представленный на рисунке 8.3 пример, опишем различные сценарии, возможные при использовании блоков для загрузки объектов blob:

· Загрузка блоков с одинаковыми ID блока – когда для одного blob загружаются блоки с одинаковыми ID блока, при формировании окончательно версии blob в операции PUT blocklist из всех блоков с одинаковым ID будет использоваться только загруженный самым последним. В примере выше загружаются два блока с BlockId4, и только второй из них будет использоваться в окончательном списке блоков blob.

· Загрузка блоков в произвольном порядке – блоки могут загружаться в порядке, отличном от указанного в окончательном списке блоков blob. В примере выше в окончательном списке блоки располагаются в порядке BlockId2, BlockId3 и BlockId4, но загружались они в другой последовательности. Упорядочивание данных blob (через операцию GET) в пригодную для чтения версию выполняется соответственно списку, указанному в операции PUT blocklist.

· Неиспользуемые блоки – более того, некоторые блоки могут никогда не войти в окончательный список блоков blob. Эти блоки будут удалены системой в процессе сборки мусора. В рассматриваемом примере такими блоками являются BlockId1 и первый блок с ID BlockId4. Точнее говоря, как только blob создан посредством операции PUT blocklist, все загруженные, но не вошедшие в список блоков операции PUT blocklist блоки будут удалены путем сборки мусора.

Загрузка большого blob может занимать довольно длительное время. При этом загруженные, но не использованные блоки занимают место в хранилище. Многие загруженные блоки могут никогда не войти в список PUT blocklist. В случае отсутствия активности для данного blob в течение длительного периода времени (в настоящее время этот период составляет неделю), эти неиспользованные блоки будут удалены системой в процессе сборки мусора.

Любопытным является сценарий параллельной загрузки блоков для одного blob. В этом случае заслуживают внимания два вопроса:

· ID блоков – если для загрузки блоков в один blob приложение использует множество клиентских модулей записи, во избежание конфликтов ID блоков должны быть уникальными среди всех этих модулей записи, или они должны представлять содержимое записываемого блока (таким образом, если один и тот же блок записывается несколькими клиентами, ID блока во всех клиентах будет одинаковым, поскольку он представляет одни и те же данные). Во избежание ошибок при потенциальной возможности записи одного Blob несколькими модулями записи в качестве ID блока рекомендуется использовать хеш (например, MD5-хеш) содержимого блока. Таким образом, ID блока будет представлять его содержимое.

· Приоритет имеет первая фиксация – в ситуации, когда множество клиентов выполняют загрузку блоков для одного blob параллельно, приоритет имеет первая фиксация blob посредством операции PUT blocklist (или модуль записи, вызвавший PUT blob первым). Все остальные неиспользованные блоки, загруженные другими модулями записи для blob с этим именем, будут удалены в процессе сборки мусора. Следовательно, для эффективного параллельного обновления blob необходима координация всех клиентов, ведущих запись параллельно.

Windows Azure Blob поддерживает условные PUT и GET, которые обеспечивают реализацию эффективной обработки параллелизма и клиентского кэширования.

Условный PUT может использоваться в ситуациях, когда один blob обновляется несколькими пользователями. Например, загрузка blob может выполняться на основании времени последнего изменения; это гарантирует, что версия изменяемого blob аналогична версии, которую изменяет клиент. Так может быть реализован совместный доступ с нежесткой блокировкой. Скажем, два клиента, А и В, обновляют один и тот же blob. Они параллельно выполняют чтение версии blob, вносят в нее какие-то изменения и вновь загружают в хранилище. В этом сценарии каждый из клиентов записывает время последнего изменения извлеченного из хранилища blob (пусть время последнего изменения будет Х). Когда они готовы загрузить обновленную версию blob назад в хранилище, они делают это с помощью условного PUT на основании сохраненного при извлечении blob времени последнего изменения. В операции должно быть определено, что условием выполнения PUT является «если не изменялся с момента Х». Таким образом, если blob был изменен другим клиентом в промежуток времени с момента Х, операция обновления даст сбой, и клиент получит уведомление об этом.

Условный GET может использоваться для эффективной обработки вопросов соответствия содержимого кэшей. Например, клиент имеет локальный кэш объектов blob, в котором кэшируются чаще всего извлекаемые из хранилища blob. Для каждого кэшированного blob записывается время его последнего изменения. Когда клиентский кэш принимает решение обновить объекты blob из хранилища, он может использовать условный GET на основании времени изменения (с условием «если изменен с момента Х»). Таким образом, из хранилища будут загружаться только те объекты blob, которые были изменены в период времени, прошедший с момента Х, и отличаются от своей кэшированной копии.

Система Blob обеспечивает интерфейс для перечисления объектов blob контейнера. Поддерживается иерархический перечень объектов blob контейнера и механизм продолжения, что позволяет выполнять перечисление большого количества объектов blob.

Интерфейс ListBlobs поддерживает параметры «prefix» (префикс) и «delimiter» (разделитель), которые обеспечивают возможность построения иерархического перечня объектов blob. Например, пусть в учетной записи «sally» имеется контейнер «movies» объектов blob с такими именами:

Action/Rocky1.wmv

Action/Rocky2.wmv

Action/Rocky3.wmv

Action/Rocky4.wmv

Action/Rocky5.wmv

Drama/Crime/GodFather1.wmv

Drama/Crime/GodFather2.wmv

Drama/Memento.wmv

Horror/TheBlob.wmv

Как видите, «/» используется в качестве разделителя для создания подобной каталогу иерархии имен blob. Чтобы получить список всех «папок», задаем в запросе ListBlobs «delimiter=/» . И вот как будет выглядеть запрос и часть ответа:

Запрос:

GET http://sally.blob.windows.net/movies?comp=list&delimiter=/

Ответ:

<BlobPrefix>Action</BlobPrefix>

<BlobPrefix>Drama</BlobPrefix>

<BlobPrefix>Horror</BlobPrefix>

Обратите внимание, тег «BlobPrefix» указывает на то, что соответствующая запись является префиксом имени blob, а не полным именем blob. Также следует заметить, что один и тот же префикс возвращается в результате только один раз.

Следующим этапом можно сочетать префикс и разделитель для получения списка содержимого «подпапки». Например, задавая «prefix=Drama/» и «delimiter=/», получаем список всех подпапок и файлов каталога «Drama»:

Запрос:

GET http://sally.blob.windows.net/movies?comp=list &prefix=Drama/ &delimiter=/

Ответ:

<BlobPrefix>Drama/Crime</BlobPrefix>

<Blob>Drama/Memento.wmv</Blob>

Обратите внимание, что «Drama/Memento.wmv» – это полное имя blob, следовательно, оно так и обозначено.

Интерфейс ListBlobs обеспечивает возможность задавать «maxresults» , т.е. максимальное число результатов, которое должно быть возвращено в этом вызове. Более того, система определяет верхний предел для максимального числа результатов, которые могут быть возвращены одним вызовом (более подробную информацию об этом можно найти в документации по SDK). По достижении меньшего из этих двух предельных значений вызов возвращается с соответствующим количеством результатов и непрозрачным «NextMarker» (маркер следующего). Наличие этого маркера свидетельствует о том, что данный запрос не обеспечил возвращения всех возможных результатов. «NextMarker» может использоваться для продолжения составления списка для следующей страницы результатов.

В предыдущем примере предположим, что требуется составить список всех объектов blob каталога «Action» , возвращая каждый раз максимум по 3 результата. В этом случае первый набор результатов был бы таким:

Запрос:

GET http://sally.blob.windows.net/movies?comp=list &prefix=Action &maxresults=3

Ответ:

<Blob>Action/Rocky1.wmv</Blob>

<Blob>Action/Rocky2.wmv</Blob>

<Blob>Action/Rocky3.wmv</Blob>

<NextMarker> OpaqueMarker1</NextMarker>

С первым набором объектов blob возвращается и непрозрачный маркер, который может быть передан во второй вызов ListBlobs. Тогда этот вызов обеспечит возвращение следующих результатов:

Запрос:

GET http://sally.blob.windows.net/movies?comp=list &prefix=Action &maxresults=3

&marker=OpaqueMarker1

Ответ:

<Blob>Action/Rocky4.wmv</Blob>

<Blob>Action/Rocky5.wmv</Blob>

<NextMarker></NextMarker>

Как показано выше, возвращены оставшиеся объекты blob каталога; «NextMarker» пуст, это свидетельствует о том, что получены все результаты.

Azure Queue Services

Windows Azure Queue предоставляет надежный механизм доставки сообщений. Она предлагает простой алгоритм диспетчеризации асинхронных заданий, который обеспечивает возможность подключения к разным компонентам приложения в облаке. Очереди Windows Azure Queue характеризуются высокой надежностью, постоянством и производительностью. Текущая реализация гарантирует, по крайней мере, однократную обработку сообщения. Более того, Windows Azure Queue имеет REST-интерфейс, таким образом, приложения могут создаваться на любом языке программирования и выполнять доступ к очереди через веб в любое время из любой точки Интернета.

Рассмотрим создание приложений в облаке с использованием Azure Queue. Windows Azure Queue позволяет разделить разные части приложения в облаке, что делает возможным использование разных технологий для создания этих приложений, и их масштабирование соответственно нуждам трафика.

Рисунок 7.4 Построение приложений для облака с использованием Azure Queue

Приведенный выше рисунок иллюстрирует простой и распространенный сценарий для приложений в облаке. Имеется ряд веб ролей, на которых размещается интерфейсная логика обработки веб-запросов. Также существует ряд рабочих ролей, реализующих бизнес-логику приложения. Веб роли обмениваются информацией с рабочими ролями посредством наборов запросов. Устойчивое состояние приложения может сохраняться в хранилищах Windows Azure Blob и Windows Azure Table.

Рассмотрим в качестве примера приложение онлайн сервиса видеохостинга. Пользователи могут загружать видео в это приложение; после этого приложение может автоматически преобразовывать и сохранять этот видеофайл в различных форматах мультимедиа; кроме того, приложение автоматически индексирует данные описания видео для упрощения поиска (например, по ключевым словам описания, именам актеров, режиссеров, названию и т.д.).

Такое приложение может использовать описанную ранее архитектуру. Веб-роли реализуют уровень представления и обрабатывают веб-запросы пользователей. Пользователи могут загружать видео через веб-интерфейсы. Видео-файлы могут храниться как большие двоичные объекты в хранилище Azure Blob. Приложение может также обслуживать ряд таблиц для учета имеющихся видеофайлов и хранения индексов, используемых для поиска. Рабочие роли выполняют преобразование входящих видеофайлов в разные форматы и сохранение их в хранилище Azure Blob. Рабочие роли также отвечают за обновление таблиц этого приложения в Azure Table. При получении запроса пользователя (например, запроса на загрузку видео) веб-роли создают рабочий элемент и помещают его в очередь запросов. Рабочие роли извлекают эти рабочие элементы из очереди и обрабатывают соответствующим образом. В случае успешной обработки рабочая роль должна удалить рабочий элемент из очереди во избежание повторной его обработки другой рабочей ролью.

Благодаря применению Windows Azure Queue такая архитектура обладает рядом преимуществ:

1. Масштабируемость – Приложение может легче масштабироваться соответственно нуждам трафика. Вот преимущества, связанные с масштабированием: Во-первых, длина очереди напрямую отражает насколько хорошо рабочие роли справляются с общей рабочей нагрузкой. Увеличение очереди свидетельствует о том, что рабочие роли не могут обрабатывать данные с необходимой скоростью. В этом случае приложению может потребоваться увеличить количество рабочих ролей, чтобы обеспечить более быструю обработку. Если длина очереди неизменно остается близкой к нулю, это означает, что серверная часть приложения обладает большими вычислительными мощностями, чем требуется. В этом случае приложение может сократить количество рабочих ролей для обеспечения рационального расходования ресурсов. Отслеживая размеры очереди и настраивая количество внутренних узлов, приложения могут эффективно масштабироваться соответственно объемам трафика. Во-вторых, применение очередей позволяет разделить части приложения и выполнять их масштабирование независимо друг от друга, что намного упрощает эту задачу. В данном примере веб-роли и рабочие роли отделены друг от друга и обмениваются информацией через очереди. Это позволяет настраивать количество веб-ролей и рабочих ролей независимо друг от друга без влияния на логику приложения. Таким образом, приложение может свободно масштабировать критически важные компоненты, добавляя для них больше ресурсов/компьютеров. В-третьих, применение очередей обеспечивает гибкость для эффективного использования ресурсов в приложении, что повышает эффективность масштабирования. То есть для рабочих элементов с разными приоритетами и/или разных размеров могут использоваться разные очереди, которые будут обрабатываться разными пулами рабочих ролей. В этом случае приложение может распределять соответствующие ресурсы (например, с точки зрения количества серверов) для каждого пула, таким образом, обеспечивая эффективное использование доступных ресурсов при разных характеристиках трафика. Например, рабочие элементы, имеющие критически важное значение для всей задачи, могут быть помещены в отдельную очередь. Это обеспечит их обработку независимо от всех остальных задач. Кроме того, отдельная очередь может использоваться для рабочих элементов, обработка которых требует привлечения большого количества ресурсов (например, преобразование видео). Для каждой из этих очередей могут использоваться разные пулы рабочих ролей. Приложение может настраивать размер каждого из пулов независимо, соответственно поступающему трафику.

2. Разделение ролей - Использование очередей позволяет разделить разные части приложения, что обеспечивает существенную гибкость и расширяемость с точки зрения построения приложения. Сообщения в очереди могут быть в стандартном или расширяемом формате, таком как XML, что обеспечивает независимость компонентов на обоих концах очереди друг от друга, поскольку они могут понимать сообщения в очереди. Разные части системы могут быть реализованы с использованием разных технологий и языков программирования. Например, компонент на стороне очереди может быть написан на .NET Framework, а другой компонент – на Python. Более того, изменения, происходящие внутри компонента, не имеют никакого влияния на остальную систему. Например, компонент может быть изменен с применением совершенно другой технологии или языка программирования, при этом система будет продолжать работать точно так же, и для этого не придется изменять другие компоненты, поскольку использование очередей обеспечивает разделение компонентов. Кроме того, использование очередей делает возможным сосуществование в системе разных реализаций одного и того же компонента, т.е. приложение может свободно переходить к новым технологиям. В рассматриваемом выше примере можно постепенно уходить от компонентов, созданных с применением устаревших технологий, и заменять их новыми реализациями. Старая и новая реализации могут выполняться одновременно на разных серверах и обрабатывать рабочие элементы одной очереди. При этом другие компоненты приложения никак не будут затронуты.

3. Всплески трафика - Очереди обеспечивают буферизацию, что компенсирует всплески трафика и сокращает влияние, оказываемое сбоями отдельных компонентов. В рассматриваемом ранее примере возможны случаи поступления большого числа запросов в короткий промежуток времени. Рабочие роли не могут быстро обработать все запросы. В этом случае запросы не отклоняются, а буферизуются в очередь, и рабочие роли получают возможность обрабатывать их в собственном нормальном темпе, постепенно возвращаясь к обычному режиму работы. Это позволяет приложению обрабатывать неравномерный трафик без снижения надежности. Более того, использование очередей также снижает влияние, оказываемое сбоями отдельных компонентов. В рассматриваемом выше примере в случае сбоя нескольких рабочих ролей очередь обеспечит буферизацию всех рабочих элементов, поступивших во время простоя рабочих ролей, таким образом, эти элементы не будут утрачены. Когда рабочие роли вернуться в работу, они смогут продолжить обработку рабочих элементов из очереди и, в конце концов, вернуться к нормальному режиму обработки данных по мере их поступления. Такие сбои не оказывают никакого влияния на другие компоненты. Обратите внимание, что рабочие элементы, обрабатываемые рабочими ролями на момент их сбоя, также не будут утеряны, поскольку возвратятся в очередь по истечении времени ожидания видимости (VisibilityTimeout), что обеспечивает сохранность данных при сбоях компонентов. Таким образом, приложение может переживать сбои без потери надежности.

Итак, благодаря модели очереди приложения застрахованы от потери данных и снижения надежности даже в условиях систематических сбоев компонентов приложения. Для обеспечения корректной работы этой модели разработчик приложения должен обеспечить идемпотентность обработки рабочих элементов очереди рабочими ролями. Благодаря этому, прежде чем рабочий элемент будет полностью обработан и удален из очереди, допускаются его многократные частичные обработки, прерывающиеся в результате сбоев.

Windows Azure Queue имеет следующую модель данных.

· Учетная запись хранилища – Любой доступ к Windows Azure Storage осуществляется через учетную запись хранилища.

o Это самый высокий уровень пространства имен для доступа к очередям и их сообщениям. Для использования Windows Azure Storage пользователь должен создать учетную запись хранилища. Выполняется это через веб-интерфейс портала Windows Azure Portal. При создании учетной записи пользователь получает 256-разрядный секретный ключ, который впоследствии используется для аутентификации запросов этого пользователя к системе хранения. В частности, с помощью этого секретного ключа создается подпись HMAC SHA256 для запроса.

Эта подпись передается с каждым запросом данного пользователя для обеспечения аутентификации через проверку достоверности подписи HMAC.

o Учетная запись может иметь множество очередей.

· Очередь – Очередь содержит множество сообщений. Область действия имени очереди ограничена учетной записью.

1. Количество сообщений в очереди не ограничено.

2. Сообщение хранится максимум неделю. Система удаляет сообщения, поступившие более недели назад, в процессе сборки мусора.

3. С очередями могут быть ассоциированы метаданные. Метаданные представляются в форме пар <имя, значение>, их размер может составлять максимум 8KБ на очередь.

· Сообщения – Сообщения хранятся в очередях. Каждое сообщение может быть размером не более 8КБ. Для хранения данных большего размера используются хранилища Azure Blob или Azure Table, а в сообщении указывается имя большого двоичного объекта/сущности. Обратите внимание, что когда сообщение помещается в хранилище, его данные могут быть двоичными. Но при извлечении сообщений из хранилища ответ формируется в формате XML, и данные сообщения возвращаются base64-кодированными. Сообщения могут возвращаться из очереди в любом порядке, и сообщение может быть возвращено несколько раз. Рассмотрим некоторые параметры, используемые Azure Queue Service:

1. MessageID: Значение GUID, которое идентифицирует сообщение в очереди.

2. VisibilityTimeout: Целое значение, определяющее время ожидания видимости сообщения в секундах. Максимальное значение – 2 часа. Значение по умолчанию – 30 секунд.

3. PopReceipt: Строка, возвращаемая для каждого извлеченного сообщения. Эта строка, вместе с MessageID, необходима для удаления сообщения из очереди (Queue). Данный параметр следует рассматривать как непрозрачный, поскольку в будущем его формат и содержимое могут быть изменены.

4. MessageTTL: Определяет срок жизни (time-to-live, TTL) сообщения в секундах. Максимально допустимый срок жизни – 7 дней. Если этот параметр опущен, срок жизни по умолчанию – 7 дней. Если в течение срока жизни сообщение не будет удалено из очереди, оно будет удалено системой хранения в процессе сборки мусора.

URI конкретной очереди структурировано следующим образом:

http://<учетнаязапись>.queue.core.windows.net/<ИмяОчереди>

Первая часть имени хоста образована именем учетной записи хранилища, за которым следует ключевое слово «queue» . Это обеспечивает направление запроса в часть Windows Azure Storage, которая обрабатывает запросы очереди. За именем хоста идет имя очереди. Существуют ограничения именования учетных записей и очередей (подробнее об этом рассказывается в документе Windows Azure SDK). Например, имя очереди не может включать символ «/».

Любой доступ к Windows Azure Queue выполняется через HTTP-интерфейс REST. Поддерживаются как HTTP, так и HTTPS протоколы.

К командам HTTP/REST на уровне учетной записи относятся:

· List Queues – Представить список всех очередей данной учетной записи.

К командам HTTP/REST на уровне очереди относятся:

· Create Queue – Создать очередь под данной учетной записью.

· Delete Queue – Удалить указанную очередь и ее содержимое без возможности восстановления.

· Set Queue Metadata – Задать/обновить определяемые пользователем метаданные очереди. Метаданные ассоциированы с очередью в виде пар имя/значение. Эта команда обеспечит перезапись всех существующих метаданных новыми.

· Get Queue Metadata – Извлечь определяемые пользователем метаданные очереди, а также примерное число сообщений в заданной очереди.

Операции уровня очереди могут выполняться с использованием следующего URL:

http://<учетнаязапись>.queue.core.windows.net/<ИмяОчереди>

К командам HTTP/REST, поддерживаемым для реализации операций на уровне сообщения, относятся:

· PutMessage (QueueName, Message, MessageTTL) – Добавить новое сообщение в конец очереди. MessageTTL определяет строк жизни данного сообщения. Сообщение может храниться в текстовом или двоичном формате, но возвращается base64-кодированным.

· GetMessages (QueueName, NumOfMessages N, VisibilityTimeout T) – Извлечь N сообщений из начала очереди и сделать их невидимыми в течение заданного VisibilityTimeout промежутка времени T. Эта операция возвратит ID сообщения, возвращенного вместе с PopReceipt. Сообщения могут возвращаться из очереди в любом порядке, и сообщение может быть возвращено несколько раз.

· DeleteMessage(QueueName, MessageID, PopReceipt) – Удалить сообщение, ассоциированное с данным PopReceipt, возвращенным ранее вызовом GetMessage. Обратите внимание, что если сообщение не будет удалено, оно повторно появится в очереди по истечении VisibilityTimeout.

· PeekMessage(QueueName, NumOfMessages N) – Извлечь N сообщений из начала очереди, не делая сообщения невидимыми. Эта операция возвратит ID сообщения для каждого возвращенного сообщения.

· ClearQueue – Удалить все сообщения из заданной очереди. Заметьте, что вызывающая сторона должна повторять эту операцию до тех пор, пока получает сообщения об успешном ее выполнении, это обеспечит удаление всех сообщений очереди.

Операции уровня сообщения могут быть выполнены с использованием следующего URL:

http://<учетнаязапись>.queue.core.windows.net/<ИмяОчереди>/messages

Полное описание API REST можно найти в документе Windows Azure SDK.

Пример

На следующем рисунке представлен пример, иллюстрирующий семантику Windows Azure Queue.

Рисунок 7.5 Пример использования очереди

В этом примере поставщики (P1 и P2) и потребители (C1 и C2) обмениваются информацией через представленную выше очередь. Поставщики формируют рабочие элементы и помещают их в виде сообщений в очередь. Потребители изымают сообщения/рабочие элементы из очереди и обрабатывают их. Может существовать множество поставщиков и множество потребителей. Рассмотрим последовательность действий:

1. C1 извлекает сообщение из очереди. Эта операция возвращает сообщение 1 и делает его невидимым в очереди на 30 секунд (принимаем в данном примере, что используется VisibilityTimeout по умолчанию, что составляет 30 секунд).

2. Затем появляется C2 и извлекает из очереди другое сообщение. Поскольку сообщение 1 по-прежнему невидимое, эта операция не увидит сообщения 1 и возвратит C2 сообщение 2.

3. По завершении обработки сообщения 2 C2 вызывает Delete, чтобы удалить сообщение 2 из очереди.

4. Теперь представим, что C1 дает сбой в ходе обработки сообщения 1, таким образом, C1 не удаляет это сообщение из очереди.

5. По истечении времени VisibilityTimeout для сообщения 1, оно опять появляется в очереди.

6. После того, как сообщение 1 повторно появилось в очереди, оно может быть извлечено последующим вызовом от C2. Тогда C2 полностью обработает сообщение 1 и удалит его из очереди.

Как показано в этом примере, семантика API очереди гарантирует каждому сообщению в очереди шанс быть обработанным полностью, по крайней мере, один раз. То есть, если возникает сбой потребителя в период после извлечения им сообщения из очереди и до его удаления, сообщение опять появится в очереди по истечении времени VisibilityTimeout. Это обеспечивает возможность этому сообщению быть обработанным полностью другим потребителем.

Рассмотрим REST-запросы, используемые Windows Azure Queue.

Ниже показан пример REST-запроса для операции постановки в очередь. Заметьте, что используется HTTP-команда PUT. Задается необязательная опция «messagettl» , определяющая срок жизни сообщения в секундах. Максимальный срок жизни – 7 дней. Если этот параметр опущен, значение по умолчанию – 7 дней. По истечении срока жизни сообщение будет удалено системой в процессе сборки мусора. Параметр Content-MD5 может быть задан для защиты от ошибок передачи по сети и обеспечения целостности. В данном случае, Content-MD5 – это контрольная сумма MD5 данных сообщения в запросе. Параметр Content-Length (Длина содержимого) определяет размер содержимого сообщения. Также в заголовке HTTP-запроса имеется заголовок авторизации. Обратите внимание, что данные сообщения располагаются в теле HTTP-запроса. Сообщение может храниться в текстовом или двоичном формате, но при извлечении оно возвращается base64-кодированным.

PUT http://sally.queue.core.windows.net/myqueue/messages

? messagettl=3600

HTTP/1.1 Content-Length: 3900

Content-MD5: HUXZLQLMuI/KZ5KDcJPcOA==

Authorization: SharedKey sally: F5a+dUDvef+PfMb4T8Rc2jHcwfK58KecSZY+l2naIao=

x-ms-date: Mon, 27 Oct 2008 17:00:25 GMT

Message Data Contents ………

Ниже показан пример REST-запроса для операции извлечения из очереди. Заметьте, что используется HTTP-команда GET. Заданы два необязательных параметра. «numofmessages» определяет, сколько сообщений должно быть изъято из очереди; максимальное число – 32. По умолчанию извлекается одно сообщение. В примере ниже будет извлекаться по 2 сообщения. Параметр «visibilitytimeout» определяет время ожидания видимости; сообщение будет оставаться невидимым в очереди, в течение этого промежутка времени, в секундах, и вновь появится в очереди, если не будет удалено до завершения периода ожидания видимости. Максимальное значение этого времени ожидания – 2 часа, и значение по умолчанию – 30 секунд. В примере ниже время ожидания видимости задано равным 60 секундам. Также в заголовке HTTP-запроса имеется элемент авторизации. Обратите внимание, что ответ поступает в XML-формате, и данные сообщения в ответе будут base64-кодированными (в примере ниже располагаются между тегами <MessageText> </MessageText>).

GET http://sally.queue.core.windows.net/myqueue/messages

?numofmessages=2 &visibilitytimeout=60

HTTP/1.1

Authorization: SharedKey sally: QrmowAF72IsFEs0GaNCtRU143JpkflIgRTcOdKZaYxw=

x-ms-date: Thu, 13 Nov 2008 21:37:56 GMT

Ответ на этот вызов будет аналогичен получаемому в следующем примере:

HTTP/1.1 200 OK

Transfer-Encoding: chunked

Content-Type: application/xml

Server: Queue Service Version 1.0 Microsoft-HTTPAPI/2.0

x-ms-request-id: 22fd6f9b-d638-4c30-b686-519af9c3d33d

Date: Thu, 13 Nov 2008 21:37:56 GMT

<?xml version="1.0" encoding="utf-8"?>

<QueueMessagesList>

<QueueMessage>

<MessageId>6012a834-f3cf-410f-bddd-dc29ee36de2a</MessageId>

<InsertionTime>Thu, 13 Nov 2008 21:38:26 GMT</InsertionTime>

<ExpirationTime>Thu, 20 Nov 2008 21:36:40 GMT</ExpirationTime>

<PopReceipt>AAEAAAD/////AQAAAAAAAAAMAgAAAFxOZXBob3MuUXVldWUuU2VydmljZS5R dWV1ZU1hbmFnZXIuWEFDLCBWZXJzaW9uPTYuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGlj S2VG9rZW49bnVsbAUBAAAAVU1pY3Jvc29mdC5DaXMuU2VydmljZXMuTmVwaG9zLlF1ZXVlLlNlcnZp Y2UuUXVldWVNYW5hZ2VyLlhBQy5SZWFsUXVldWVNYW5hZ2VyK1JYVpcHQCAAAAFjxNc2dJZD5rX19 CYWNraW5nRmllbGQgPFZpc2liaWxpdHlTdGFydD5rX19CYWNraW5nRmllbGQDAAtTeXN0ZW0uR3V pZA0CAAAABP3///8LU3lzdGVtLkd1aWQLAAAAAl9hAl9iAl9jAl9kAl9lAl9mAl9nAl9oAl9pAl9qAl9rAAA AAAAAAAAAAAAIBwcCAgICAgICAjSoEmDP8w9Bvd3cKe423ipfNapL7xPLSAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAA=</PopReceipt>

<TimeNextVisible>Thu, 13 Nov 2008 21:38:26 GMT</TimeNextVisible>

<MessageText>......</MessageText>

</QueueMessage>

<QueueMessage>

<MessageId>2ab3f8e5-b0f1-4641-be26-83514a4ef0a3</MessageId>

<InsertionTime>Thu, 13 Nov 2008 21:38:26 GMT</InsertionTime>

<ExpirationTime>Thu, 20 Nov 2008 21:36:40 GMT</ExpirationTime>

<PopReceipt>AAEAAAD/////AQAAAAAAAAAMAgAAAFxOZXBob3MuUXVldWUuU2VydmljZS5R dWV1ZU1hbmFnZXIuWEFDLCBWZXJzaW9uPTYuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGl jS2VG9rZW49bnVsbAUBAAAAVU1pY3Jvc29mdC5DaXMuU2VydmljZXMuTmVwaG9zLlF1ZXVlLlNlcnZ pY2UuUXVldWVNYW5hZ2VyLlhBQy5SZWFsUXVldWVNYW5hZ2VyK1JYVpcHQCAAAAFjxNc2dJZD5rX1 9CYWNraW5nRmllbGQgPFZpc2liaWxpdHlTdGFydD5rX19CYWNraW5nRmllbGQDAAtTeXN0ZW0uR3 VpZA0CAAAABP3///8LU3lzdGVtLkd1aWQLAAAAAl9hAl9iAl9jAl9kAl9lAl9mAl9nAl9oAl9pAl9qAl9rAA AAAAAAAAAAAAAIBwcCAgICAgICAuX4syrxsEFGviaDUUpO8KNfNapL7xPLSAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAA=</PopReceipt>

<TimeNextVisible>Thu, 13 Nov 2008 21:38:26 GMT</TimeNextVisible>

<MessageText>.....</MessageText>

</QueueMessage>

</QueueMessagesList>

Ниже представлен пример REST-запроса для операции удаления сообщения. В этом случае используется HTTP-команда DELETE. Параметр «popreceipt» определяет сообщение, которое должно быть удалено. «popreceipt» получается в результате предыдущей операции извлечения из очереди, как показано в примере ранее.

DELETE /sally/myqueue/messages/6012a834-f3cf-410f-bddd-dc29ee36de2a?popreceipt=AAEAAAD%2f%2f%2f%2f%2fAQAAAAAAAAAMAgAAAFxOZXBob3MuUXVldWUuU2VydmljZS5RdWV1ZU1hbmFnZXIuWEFDLCBW ZXJzaW9uPTYuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljSV5VG9rZW49bnVsbAUBAAAAVU1pY3 Jvc29mdC5DaXMuU2VydmljZXMuTmVwaG9zLlF1ZXVlLlNlcnZpY2UuUXVldWVNYW5hZ2VyLlhBQy5SZWF UXVldWVNYW5hZ2VyKJlY2VpcHQCAAAAFjxNc2dJZD5rX19CYWNraW5nRmllbGQgPFZpc2liaWxpdHlTdGF ydD5rX19CYWNraW5nRmllbGQDAAtTeXN0ZW0uR3VpZA0CAAAABP3%2f%2f%2f8LU3lzdGVtLkd1aWQLAAAAAl9hAl9iAl9jAl9kAl9lAl9mAl9nAl9oAl9pAl9qAl9rAAAAAAAAAAAAAAAIBwc CAgICAgICAjSoEmDP8w9Bvd3cKe423ipfNapL7xPSAsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA%3d&timeout=30

HTTP/1.1

Content-Type: binary/octet-stream

x-ms-date: Thu, 13 Nov 2008 21:37:56 GMT

Authorization: SharedKey sally:M/N65zg/5hjEuUS1YGCbVDHfGnI7aCAudkuTHpCDvZY=


Рекомендация для Вас - 11. Лесосеменные прививочные плантации.

Краткие итоги:

  • В данной лекции мы ознакомились с двумя абсракциями данных Windows Azure: Windows Azure Blob – абстракция данных, которая обеспечивает хранилище больших элементов данных.
  • Windows Azure Queue – абстракция данных, которая обеспечивает диспетчеризацию асинхронных

Ключевые термины:

Windows Azure Blob – абстракция данных, которая обеспечивает хранилище больших элементов данных.

Windows Azure Queue – абстракция данных, которая обеспечивает диспетчеризацию асинхронных заданий для реализации обмена данными между сервисами

Литература:

  1. Виктор Шатохин www.way2cloud.com
  2. http://microsoft.com/faculty
Свежие статьи
Популярно сейчас
Почему делать на заказ в разы дороже, чем купить готовую учебную работу на СтудИзбе? Наши учебные работы продаются каждый год, тогда как большинство заказов выполняются с нуля. Найдите подходящий учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
5173
Авторов
на СтудИзбе
437
Средний доход
с одного платного файла
Обучение Подробнее