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

16.11.2017

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

Но сначала напомним все типы облачных хранилищ: 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

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

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

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

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

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

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

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

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

Как уже было отмечено, объектные хранилища предназначены, в первую очередь, для обслуживания приложений и информационных систем. Но благодаря тому, что их 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).

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

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

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

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

Заключение

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

 

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

Зарегистрироваться