Как оптимизировать транзакции с большими файлами, используя службу WCF в качестве конечной точки хранилища Azure? - PullRequest
1 голос
/ 11 марта 2012

У меня есть Служба REST WCF в качестве конечной точки для хранилища Azure . Службы WCF REST обрабатывают загрузку и загрузку файлов, размер которых обычно составляет 5-10 МБ. При обработке потока (оба для загрузки и выгрузки) байты находятся в оперативной памяти виртуальной машины Azure, верно? Даже если для загрузки данные разбиты на блоки по 4 МБ, эти 4 МБ сохраняются в ОЗУ. памяти, пока загрузка не будет завершена. Для загрузки байты сохраняются до завершения загрузки. Итак, если у меня есть 1000 пользователей, одновременно загружающих файл, это означает, что виртуальная машина Azure должна иметь 4 ГБ ОЗУ только для передачи.

Есть ли способ оптимизировать это? Поправьте меня, если я ошибаюсь, когда я предполагаю, что данные хранятся в ОЗУ машины ВМ до завершения операции. Должен ли я использовать Microsoft Azure REST Service? Где этот сервис хранит данные до завершения передачи?

Ответы [ 3 ]

0 голосов
/ 13 марта 2012

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

0 голосов
/ 14 марта 2012

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

  1. настроить службу WCF на использование потокового TransferMode
  2. Обрабатывать потоки соответствующим образом в коде.т. е. открыть поток в хранилище больших двоичных объектов, а затем скопировать его из потока WCF в поток больших двоичных объектов или использовать Stream.CopyTo () .

Я пытался реализоватьэто было около 6 месяцев назад, но я не мог заставить режим WCF Streamed работать должным образом в моей ситуации.Кажется, что это сложно для работы, и может быть невозможно с конечными точками HTTP.С другой стороны, возможно, мой WCF-фу слишком слаб.Если у вас что-то получится, пожалуйста, опубликуйте это здесь, так как мне бы очень хотелось это увидеть.

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

0 голосов
/ 12 марта 2012

Вы можете использовать Windows Azure Blob Storage для обработки всех оптимизаций загрузки / выгрузки.Он имеет REST API, различные «настройки» для больших / маленьких файлов, общие ключи доступа для сохранения конфиденциальности данных, http / https и т.д.передать заголовки оптимизации) или использовать библиотеку StorageClient ... и не обрабатывать ее через собственный сервис.

...