OpenStack Swift

Swift (OpenStack Object Storage) — это полностью распределенное «безграничное» хранилище, которое характеризуется отказоустойчивостью и высокой надежностью. Созданный аналогично Amazon S3, Swift почти полностью основан на разработках компании Rackspace.

Четыре основных компонента Swift:

  • Proxy Server (прокси-сервер): объединяет все компоненты системы вместе.
  • Object Server (объектный сервер): ответственен за хранение данных.
  • Container Server (контейнерный сервер): в его функции входит отдача списка объектов.
  • Account Server (сервер аккаунтинга): отдает листинги контейнеров для конкретного аккаунта.

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

Proxy Server

Прокси-сервер поддерживает внешний ReST-ful API, реализованный в рамках протокола HTTP. Поэтому запрос доступа к объектам внутри хранилища выглядит наглядно и просто:

GET http://swift.host.com/v1/account/container/object

Здесь account — это пользовательский аккаунт, container — пространство имен, используемое для классификации данных, а object — непосредственно данные (или файл).

«Кольца» (rings) используются прокси-сервером для поиска реального положения данных в кластере. Это своего рода база данных, в которой описывается расположение данных. При каждой записи новых данных в хранилище, их удалении или выходе узлов из строя она модифицируется. Для аккаунтов, контейнеров и объектов предусмотрены отдельные кольца.

Object Server

Наиболее важный компонент Swift-кластера – это объектные серверы. Их основная функция – хранение и отдача данных. Любые объекты хранилища в конечном счете оказываются на жестких дисках этих серверов, которые записывают данные в обычные файлы, сопровождая их метаданными, записываемыми в расширенные атрибуты файлов (xattr). Надежность хранения данных достигается за счет дублирования сразу на несколько серверов, так что если один из них выйдет из строя, система сможет восстановить данные с другого сервера и вновь продублировать их. Система создает три копии каждого объекта по умолчанию, так что в качестве железной составляющей кластера можно использовать машины, даже не снабженные RAID-контроллерами.

Прозрачная масштабируемость – вот один из основных плюсов системы. Чтобы расширить хранилище, необходимо всего лишь подключить новый узел к кластеру, а всю остальную работу по его синхронизации с хранилищем возьмет на себя Swift. Лучше всего этот кластер подходит для хранения таких данных, как образы виртуальных машин (собственно, для этого он и был создан), банки фотографий, электронные письма, бэкапы и тому подобное.