Сервисы хранения объектов и блочные сервисы хранения: краткий обзор

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

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

Что такое блочное хранилище?

Блочные хранилища – относительно простой и знакомый тип. Такие сервисы предлагают традиционные блочные устройства хранения (например, жесткие диски) по сети. Облачные провайдеры часто предоставляют инструменты и продукты для оркестровки блочных устройств хранения любого размера и подключения их к вашей виртуальной машине.

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

  • Они позволяют создавать снапшоты и быстрые резервные копии всех данных.
  • Вы можете изменять размер хранилища в соответствии с растущими потребностями приложения.
  • Вы можете легко отсоединить такое устройство и переместить его на другую машину.

Такое гибкое решение подходит почти всем типам приложений.

Преимущества блочных хранилищ данных:

  1. Блочное хранилище – привычная и понятная технология. Пользователи и программы легко работают с файлами и файловыми системами.
  2. Блочные устройства легко поддерживать. Читать и изменять файлы умеет любой язык программирования.
  3. Права доступа к файлам и файловым системам можно быстро изменить, эта процедура известна всем пользователям.
  4. Блочные устройства хранения обеспечивают низкую задержку ввода-вывода, поэтому они подходят для использования базами данных.

Недостатки блочных хранилищ данных:

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

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

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

Что такое хранилище объектов?

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

Поскольку API состоит из стандартных HTTP-запросов, быстро появилось много библиотек для большинства языков программирования. Чтобы сохранить объект данных, нужно просто отправить HTTP PUT запрос в хранилище объектов. Извлечь файлы и метаданные можно с помощью обычного запроса GET. Большинство сервисов хранения объектов также могут публиковать файлы для ваших пользователей, устраняя необходимость поддерживать веб-сервер для размещения статических активов.

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

Преимущества хранилищ объектов:

  • Простой HTTP API с клиентами для всех основных операционных систем и языков программирования.
  • Вы платите только за то, что используете.
  • Встроенная поддержка публикации статических активов позволяет использовать меньше серверов.
  • Некоторые хранилища объектов предлагают встроенную интеграцию CDN, которая кэширует активы, чтобы ускорить загрузку страниц.
  • Опциональное управление версиями позволяет извлекать старые версии объектов для восстановления после случайных перезаписей данных.
  • Сервисы хранения объектов можно легко масштабировать без необходимости запуска дополнительных ресурсов или изменения архитектуры.
  • Вам не нужно поддерживать жесткие диски и RAID-массивы, так как все это обрабатывается провайдером хранилища.
  • Возможность хранить фрагменты метаданных вместе с объектами данных упростит архитектуру приложения.

Недостатки хранилищ объектов:

  • Такие хранилища не смогут обслуживать традиционную базу данных.
  • Хранилище объектов не позволяет изменять данные по фрагментам. Изменять можно только весь объект, а это влияет на производительность. Например, в файловой системе можно легко добавить одну строку в конец лога. В системе хранения объектов для этого нужно будет восстановить объект, добавить новую строку и записать весь объект обратно. Поэтому такое хранилище не подойдет приложениям, чьи данные часто меняются.
  • Операционные системы не могут монтировать хранилище объектов как обычный диск. Для этого есть несколько клиентов и адаптеров, но в целом использовать и просматривать хранилища объектов не так просто, как работать с каталогами в файловом браузере.

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

Существуют управляемые хранилища объектов, где у вас будет доступ к параметрам жестких дисков и масштабирования. Но если вы не хотите заниматься настройкой и поддержкой хранилища, всю поддержку может осуществлять провайдер. Попробуйте Minio (популярное хранилище объектов, написанное на Go), Ceph или OpenStack Swift.

Заключение

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