Объектное хранилище для файлов в облаке

В статье «Облачное хранилище данных» мы рассказали о хранилищах разного типа. Сейчас рассмотрим более подробно объектные хранилища.

Но сначала напомним все типы облачных хранилищ: 1) блочные (диски), 2) файловые, 3) «базовые» (СУБД) и 4) объектные. Между собой они различаются степенью агрегации данных — если дисковые и файловые хранилища содержат в себе атомарные данные, то в СУБД и, тем более, в объектных хранилищах данные собраны в связанные структуры, которыми можно оперировать на более высоком, прикладном, уровне.

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

Область применения

Дисковые и файловые хранилища используются уже десятилетиями. Их технология достаточно отработана и хорошо известна. В них можно разместить любые прикладные файлы. Число этих файлов может быть очень большим, но всё-таки оно ограничено. Не всегда есть возможность использования одного файла разными пользователями и разными приложениями одновременно. Не всегда есть возможность удобного управления доступом к этим файлам. Как правило, интерпретация данных в них полностью зависит от использующих их приложений, так как никакого описания структуры данных ни в самом файле, ни в файловом хранилище нет. Зато операции с дисковыми и файловыми хранилищами самые быстрые. Правда, при условии, что эти хранилища находятся в локальной или хорошо связанной сети.

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

Для размещения неструктурированных данных хорошо подходят объектные хранилища, которые обеспечивают достаточно универсальную обработку таких данных.

Концепция объектного хранилища

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

Метаданные объекта являются синонимом термина «свойства объекта».


Схема сочетания файла с его методанными


Каждый объект может быть описан многими разнородными метаданными. Например, в них могут содержаться подробные характеристики некоего видеофрагмента или фотографии.

Идея рассматривать произвольный файл как объект возникла не вчера. Уже достаточно давно многие СУБД поддерживают такой тип данных как BLOB (Binary Large OBject). Однако хранение файлов, особенно больших, в реляционной базе данных вряд ли следует признать рациональным подходом.

Метаданные файлов в объектном хранилище могут быть проиндексированы. Это ускорит поиск нужного объекта по признакам, содержащимся в метаданных.

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

Размер одного объекта ограничен. Но если потребуется хранить файл большего объёма, его можно разделить на сегменты.

Современные объектные хранилища могут содержать в себе огромное число объектов.


Объекты в объектоном хранилище


Второй важной особенностью объектных хранилищ является то, что в подавляющем большинстве случаев они предназначены для взаимодействия с ними через интернет. И как правило, взаимодействуют с ними не люди, а приложения или информационные системы. Основой прикладного интерфейса (API) является протокол HTTP.

В отличие, например, от систем управления базами данных, объектные хранилища не предназначены для обработки данных внутри себя. Поэтому основными операциями с ними являются размещение и получение объектов.


Операции внутри объектного хранилища


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

Один из способов распределения объектов — так называемые, контейнеры, которые логично связывать с отдельным проектом или информационной подсистемой клиента.


Контейнеры


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


Пользователь-Контейнер-Объект


Для того, чтобы с объектом что-то сделать, сначала его нужно указать. Полный адрес объекта может выглядеть, например, так.

http://example.com/[cluster]/[account]/[container]/[object]

Этот адрес является основным идентификатором объекта в хранилище. Из него следует, что в рамках одного контейнера название объекта должно быть уникальным. Некоторые системы могут поддерживать версионность объектов. Увлекаться ею без особой нужды не стоит, так как она увеличивает потребление дискового пространства.

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

Объектные хранилища не предусматривают иерархии объектов и групп объектов, подобной той, которую имеют файловые системы в виде системы вложенных папок. Но название объекта может содержать в себе разные символы, в том числе «/», что позволяет имитировать иерархический путь к объекту. Например, так:

dicotyledones/asteraceae/chamomilla.jpg

В этом случае полный адрес объекта будет выглядеть так.

http://example.com/[cluster]/[account]/[container]/
dicotyledones/asteraceae/chamomilla.jpg

Большинство объектных хранилищ является распределёнными. Части хранилища, разнесённые аппаратно или даже географически, называются зонами. Надёжное хранение объектов среди прочего обеспечивается тем, что каждый его экземпляр реплицируется в другие зоны.

Поддерживается групповой доступ к контейнерам и объектам с учётом прав пользователей.

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

Особенности объектного хранилища

  • Архитектурно неограниченный объём хранения (петабайты)
  • Высокая доступность данных
  • Высочайшая надёжность хранения данных
  • Высокопроизводительный интерфейс без узких мест
  • Возможность многомерного масштабирования платформы: и вертикального, и горизонтального
  • Имеются прямые URL-ссылки на объекты, находящиеся в хранилище
  • Объектам можно задать время «жизни», по истечению которого они будут удалены

Интерфейс объектного хранилища

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

  • S3 API, используемый облачным провайдером Amazon (здесь S3 означает Simple Storage Service);
  • Object Storage API (Swift API), предложенный некоммерческой организацией OpenStack, разрабатывающей технологии облачных услуг;
  • CDMI (Cloud Data Management Interface), продвигаемый отраслевой ассоциацией Storage Networking Industry Association (SNIA).

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

Пример запросов-команд

Как уже было отмечено, объектные хранилища предназначены, в первую очередь, для обслуживания приложений и информационных систем. Но благодаря тому, что их API основан на протоколе HTTP, к ним можно обратиться и «вручную», например, из браузера или с помощью утилит, типа cURL.

Пример отправки файла в объектное хранилище из браузера:

<form action  = "[url_storage/account/container/object]"
      method  = "post"
      enctype = "multipart/form-data">
      <input type="hidden" name="redirect"  value="[url_result]">
      <input type="hidden" name="signature" value="[hmac]">
      <input type="file"   name="file_name">
      <input type="submit">
</form>

Строго говоря, совсем вручную отправить такой запрос не удастся, так как для получения значения HMAC потребуется аутентификация и авторизация в хранилище, но общий принцип в этом примере показан.

Далее с помощью дополнительных запросов-команд к отправленному файлу можно добавить нужные метаданные.

Например, так:

curl -i [url_storage/account/container/object] -X POST 
-H "X-Auth-Token: [token]" -H "X-Object-Meta-ValueA: [value-a]"

Для просмотра содержимого объектного хранилища можно использовать специализированные клиентские приложения. Некоторые хранилища обеспечивают пользовательский веб-интерфейс к контейнерам и объектам, возможность их просмотра посредством веб-браузера. Но в подавляющем большинстве случаев основным интерфейсом хранилища является прикладной (API).

Для чего подходят объектные хранилища

Применить объектные хранилища можно в самых разнообразных и широких областях:

  • корпоративные архивы различных документов (текстовых, фото-, видео-, аудио-);
  • коммерческие фотобанки;
  • резервные копии различных данных; многие современные инструменты резервного копирования изначально умеют взаимодействовать с объектными хранилищами по типовым интерфейсам, достаточно лишь указать сетевой адрес хранилища;
  • видеофайлы охранных систем видеонаблюдения; они могут сопровождаться дополнительными данными; можно настроить автоматическое удаление устаревших файлов;
  • протоколы (log-данные) систем управления доступом (СКУД) в здания, помещения или на территорию;
  • исходные, рабочие или архивные видеоматериалы телеканалов и студий;
  • статический контент веб-сайтов, например, видеопорталов типа YouTube или Netflix;
  • экспериментальные данные;
  • конструкторские документы и модели;

В качестве конкретных примеров интеграции приложений и систем с объектными хранилищами можно назвать: системы резервного копирования: Acronis Backup, Veeam Backup and Replication, Veritas/Symantec NetBackup, Commvault Backup and Recovery, NetApp AltaVault; корпоративные информационные системы (ERP): SAP, 1С, …; системы управления содержанием сайтов (CMS): 1С-Битрикс, Wordpress; …

Объектные хранилища используют:

  • Netflix, Spotify, Lionsgate, PBS, Sony, ABP, Scribd, Periscope.TV, Comcast (распространение медиаконтента);
  • Airbnb (маркетплейс);
  • Newsweek, Thomson Reuters, Hearst Corporation (издательства и информационные агентства:)
  • 6 Waves, Sanoma, IGG, Ubisoft, Zynga, Nexon (игровые порталы);
  • Canon (проектирование и разработка);
  • BMW (система технического мониторинга);
  • Duolingo, Echo360 (образование);
  • Mapbox, Swisstopo (геоинформационные системы);
  • Mojo Networks (управление сетевой инфраструктурой);
  • Airtime, Yelp (социальные сети);
  • Zillow (недвижимость);
  • 3M Health Information Systems, DNAnexus, Philips, Siemens (здравоохранение);
  • IMDB (базы данных);
  • CERN (экспериментальные данные).

Заключение

Объектные хранилища обладают следующими преимуществами:

  • унифицированная обработка неструктурированных данных;
  • надёжное продолжительное хранение;
  • доступ к данных из любой точки интернета;
  • неограниченное число объектов;
  • обработка очень больших файлов произвольного содержания.


P. S. Ещё немного полезных материалов: