Проектирование архитектуры и взаимодействие ролей с Azure в приложении с привязкой к файлам - PullRequest
1 голос
/ 20 марта 2011

Я подумываю переместить мое веб-приложение в Windows Azure для целей масштабируемости, но мне интересно, как лучше разделить мое приложение.

Я ожидаю, что мой сценарий типичен и выглядит следующим образом: мое приложение позволяет пользователям загружать файлынеобработанные данные, это обрабатывается и создается отчет.Затем пользователь может просмотреть свои необработанные данные и просмотреть свой отчет.

Пока что я думаю о веб-роли и рабочей роли.Однако я понимаю, что виртуальный жесткий диск можно подключить к одному экземпляру с правами чтения / записи, поэтому моей веб-роли и рабочей роли действительно необходим доступ к общему хранилищу файлов.Поэтому, возможно, мне нужна веб-роль и две отдельные рабочие роли, одна рабочая роль для обработки, а другая для чтения и записи в хранилище файлов.Является ли это хорошим подходом?

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

Ответы [ 2 ]

2 голосов
/ 20 марта 2011

Добавление к прекрасному ответу Стюарта: BLOB-объекты могут хранить что угодно, с размерами до 200 ГБ. Если вам нужно / вы хотите сохранить долговечную структуру каталогов, вы можете смонтировать VHD всего за несколько строк кода. Это том NTFS, с которым ваше приложение может взаимодействовать, как и любой другой диск.

В вашем случае VHD не подходит, потому что ваше веб-приложение должно было бы подключить VHD и быть единственным автором. И если у вас есть более одного экземпляра веб-роли (что было бы, если бы вы хотели SLA и хотели бы масштабировать), у вас мог быть только один писатель. В этом случае отдельные капли подходят НАМНОГО лучше.

Как сказал Стюарт, это очень нормальная и распространенная модель. И снова, имея всего несколько строк кода, вы можете вызвать хранилище sdk, чтобы скопировать файл из хранилища BLOB-объектов на локальный диск вашего экземпляра. Затем вы можете обработать файл, используя обычные операции ввода-вывода. Когда ваш отчет завершен, еще несколько строк кода позволяют скопировать отчет в новый большой двоичный объект (скорее всего, в хорошо известном контейнере, в котором веб-роль знает, что искать).

Вы можете сделать еще один шаг и вставить в таблицу Azure строки, разделенные клиентом, с ключом строки, идентифицирующим отдельный загруженный файл, и 3-м полем, представляющим URI для завершенного отчета. Это упрощает отображение веб-приложения клиентом завершенных отчетов.

1 голос
/ 20 марта 2011

Хранилище BLOB-объектов - это самое простое место для хранения файлов, к которым затем может получить доступ множество ролей и экземпляров ролей, причем ни один из них не требует специального доступа.

Кажется, что предложена нормальная схема:

  • позволяет загружать необработанные файлы с использованием экземпляров веб-роли
  • эти экземпляры веб-ролей возвращают HTTP-вызов без обработки - они сохраняют необработанные файлы в хранилище BLOB-объектов и добавляют в очередь сообщение «выполнить эту работу».
  • экземпляры рабочих ролей забирают сообщение из очереди, читают сырой блоб, выполняют работу, сохраняют результат отчета, затем удаляют сообщение из очереди
  • все веб-роли могут получить доступ к отчету, когда пользователь запрашивает его

Это «предложенный нормальный шаблон», и вы можете увидеть, что он реализован в таких вещах, как приложения для загрузки фотографий / создания миниатюр с самого первого Azure PDC - он также используется в этом учебном курсе - выполните до вторая страница.

Конечно, на практике вам может понадобиться использовать этот шаблон в зависимости от размера и типа данных, которые вы обрабатываете.

...