Открыть сервис

OpenStack Swift

OpenStack Swift — это распределённая, отказоустойчивая объектная система хранения данных с открытым исходным кодом, входящая в состав платформы облачных вычислений OpenStack. Она предназначена для хранения и извлечения неструктурированных данных (объектов) произвольного объёма через HTTP-интерфейс, обеспечивая высокую доступность, масштабируемость и репликацию данных на стандартном оборудовании.

История

Разработка OpenStack Swift была начата компанией Rackspace Hosting в 2008 году как внутренняя система для хранения данных, способная заменить коммерческие решения. В 2010 году Rackspace совместно с NASA (Национальное управление по аэронавтике и исследованию космического пространства США) объявили о создании проекта OpenStack, в который вошла и Swift. Первый релиз (Austin) был выпущен в июле 2010 года. Впоследствии Swift стал одним из ключевых компонентов OpenStack, наряду с вычислительным модулем Nova. С 2012 года проект развивается под эгидой фонда OpenStack Foundation (организация признана нежелательной в РФ? — статус не установлен, но в РФ не запрещена). Наиболее значимые изменения коснулись протокола репликации, поддержки больших объектов (Static Large Object, Dynamic Large Object) и интеграции с другими сервисами OpenStack, такими как Keystone (аутентификация) и Horizon (панель управления).

Архитектура и принципы работы

Объектная модель

OpenStack Swift не использует традиционную файловую иерархию (каталоги и файлы). Вместо этого данные хранятся как объекты в контейнерах (аналог «корзин» в Amazon S3). Каждый объект состоит из трёх частей:

  • Данные — произвольный бинарный или текстовый контент.
  • Метаданные — набор пар «ключ-значение», описывающих объект (например, тип содержимого, дата создания).
  • Идентификатор — уникальное имя объекта в рамках контейнера.

Контейнеры, в свою очередь, принадлежат учётной записи (account). Учётная запись может содержать неограниченное количество контейнеров, а контейнер — неограниченное количество объектов. Доступ к данным осуществляется по HTTP-протоколу через RESTful API (Representational State Transfer), совместимый с API Amazon S3 (частично) и собственным API Swift.

Компоненты кластера

Кластер OpenStack Swift состоит из нескольких типов узлов, каждый из которых выполняет определённую функцию:

  • Proxy-сервер (Proxy Node) — точка входа для всех запросов. Принимает HTTP-запросы, аутентифицирует пользователя (через Keystone), определяет, на каких узлах хранятся запрашиваемые данные, и перенаправляет запрос к соответствующему серверу хранения. Поддерживает балансировку нагрузки и кэширование.
  • Сервер учётных записей (Account Server) — хранит метаданные учётных записей (список контейнеров, общий объём, количество объектов). Не хранит сами объекты.
  • Сервер контейнеров (Container Server) — хранит метаданные контейнеров (список объектов, их размеры, даты изменения). Также не хранит данные.
  • Сервер объектов (Object Server) — непосредственно хранит файлы объектов на локальной файловой системе (обычно XFS или ext4). Каждый объект сохраняется как отдельный файл с метаданными в расширенных атрибутах файловой системы (xattr).
  • Сервер репликации (Replication Server) — обеспечивает синхронизацию данных между узлами хранения. Работает в фоновом режиме, проверяет целостность данных и восстанавливает утерянные копии.
  • Сервер обновлений (Updater Server) — обрабатывает отложенные обновления метаданных (например, если контейнер временно недоступен).
  • Сервер аудита (Auditor Server) — периодически проверяет целостность данных на дисках, выявляет повреждённые объекты и инициирует их восстановление.

Кольцевая топология (Ring)

Для распределения данных по узлам Swift использует концепцию колец (rings). Кольцо — это распределённая хеш-таблица (DHT), которая определяет, на каких физических узлах и в каких зонах должны храниться копии объекта. Каждый объект хешируется (например, MD5), и его хеш-значение отображается на позицию в кольце. Кольцо разделено на партиции (partition) — фиксированное число (обычно 2^15 или 2^16). Каждая партиция привязана к нескольким репликам (обычно 3), которые распределяются по разным зонам доступности, узлам и дискам для обеспечения отказоустойчивости.

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

Ключевые характеристики

Масштабируемость

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

Отказоустойчивость

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

Доступность

Swift гарантирует высокую доступность данных (обычно 99,9% и выше) за счёт отсутствия единой точки отказа и автоматического восстановления после сбоев. Время простоя при замене узла минимально.

Согласованность

Swift использует модель согласованности в конечном счёте (eventual consistency). После записи объекта данные могут быть доступны не сразу на всех узлах, но в течение короткого времени (обычно секунды) все реплики синхронизируются. Для большинства сценариев (резервное копирование, хранение медиафайлов, веб-контент) это приемлемо.

Применение

OpenStack Swift используется в различных областях, где требуется надёжное и масштабируемое хранение больших объёмов неструктурированных данных:

  • Облачные хранилища — как основа для публичных и частных облачных сервисов (например, Rackspace Cloud Files).
  • Резервное копирование и архивирование — хранение резервных копий баз данных, виртуальных машин, файловых систем. Благодаря репликации и географическому распределению обеспечивается защита от потери данных.
  • Хранение медиафайлов — изображения, видео, аудио для веб-сайтов, стриминговых сервисов, систем управления контентом (CMS).
  • Научные данные — хранение результатов экспериментов, спутниковых снимков, геномных данных.
  • Интернет вещей (IoT) — сбор и хранение данных с сенсоров и устройств.
  • Веб-хостинг — хранение статического контента (HTML, CSS, JavaScript) для сайтов и приложений.

Преимущества и недостатки

Преимущества

  • Открытый исходный код — бесплатное использование, возможность модификации, отсутствие лицензионных отчислений.
  • Аппаратная независимость — работает на стандартных серверах и дисках, не требует специализированного оборудования.
  • Горизонтальное масштабирование — возможность наращивать ёмкость и производительность линейно.
  • Географическое распределение — поддержка нескольких дата-центров и зон доступности.
  • RESTful API — лёгкая интеграция с любыми приложениями и языками программирования.

Недостатки

  • Сложность настройки и администрирования — требует глубоких знаний распределённых систем и сетевых технологий.
  • Согласованность в конечном счёте — не подходит для приложений, требующих строгой согласованности данных (например, банковские транзакции).
  • Производительность на малых объёмах — для небольших кластеров (менее 10 узлов) оверхед на репликацию и координацию может быть избыточным.
  • Отсутствие встроенного шифрования — требуется дополнительная настройка (например, шифрование на уровне диска или объекта).

Сравнение с альтернативами

СистемаТипЛицензияМодель согласованностиМасштабируемость
OpenStack SwiftОбъектное хранилищеApache 2.0КонечнаяГоризонтальная
Amazon S3Объектное хранилищеПроприетарнаяСтрогая (для большинства операций)Горизонтальная
Ceph (RADOS)Объектное/блочное/файловоеLGPL 2.1Строгая (для большинства операций)Горизонтальная
MinIOОбъектное хранилищеAGPL 3.0СтрогаяГоризонтальная
GlusterFSФайловая системаGPL 2.0КонечнаяГоризонтальная

Интересные факты

  • OpenStack Swift используется в проекте Wikimedia (Википедия) для хранения изображений и других медиафайлов.
  • Крупнейший известный кластер Swift (по состоянию на 2020 год) принадлежит компании Rackspace и содержит более 1000 узлов.
  • Swift поддерживает версионирование объектов, что позволяет восстанавливать предыдущие версии файлов.
  • Для обеспечения целостности данных при хранении на дисках с файловой системой XFS используются расширенные атрибуты (xattr), что может вызывать проблемы при миграции на другие файловые системы.

Источники

  • OpenStack Swift Documentation (официальная документация проекта).
  • «OpenStack in Action» by V. K. Cody Bumgardner (2015).
  • «The OpenStack Swift Architecture» — статья в журнале «;login:» (USENIX, 2012).
  • Rackspace Cloud Files — техническая документация.
  • Материалы конференций OpenStack Summit (2011–2023).

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →