Введение

Проект OpenStack Swift предлагает нам программную инфраструктуру для организации облачного хранилища. Данная инфраструктура реализует полную абстракцию логической организации хранения данных от их физического размещения. OpenStack Swift позволяет хранить и извлекать большое количество данных с помощью простого API (REST). Swift обеспечивает масштабирование, надежность и высокую доступность наших данных. Он идеально подойдет для хранения неструктурированных данных с тенденцией к неограниченному росту. Также преимуществом Swift является относительно небольшая стоимость реализации по сравнению с коммерческими системами хранения данных. Перейдем к рассмотрению архитектуры Swift.
Логическая организация хранения данных в OpenStack Swift.

Основные логические сущности Swift:
- Владелец (tenant)
- Учетная запись (account)
- Пользователь (users)
- Контейнер (container)
- Объект (object)
И как они связаны между собой:
В аккаунте может содержаться несколько пользователей (users). Принадлежит владельцу (владельцем может быть компания, субъект и т.п.). Владелец (tenant) может создавать дополнительных пользователей. Учетная запись содержит в себе контейнеры (container). Контейнеры в свою очередь содержат в себе объекты (object).
Контейнеры в пределах одной учетной записи должны иметь уникальные имена. Но могут иметь одинаковые имена, если они располагаются в разных учетных записях.
Объект – это атомарная единица хранения данных. Объект может представлять из себя любые разношерстные данные, будь то текстовый файл, изображение, снимок виртуальной машины и т.п. По умолчанию в Swift у объекта три репликации (с возможностью физического разделения по разным ЦОД). Для того чтобы обратиться к объекту нам необходима связка из 3 элементов: account, container и object.
Физическая организация хранения данных в OpenStack Swift.

Физическая структура реализована в виде иерархии: Region – Zone – Storage Server – Disk.
Каждый регион соответствует отдельной площадке или ЦОД. Если у нас несколько ЦОД и они географически разделены, то кластер Swift будет содержать несколько регионов.
Зона (Zone) – множество серверов региона, имеющее общий параметр доступности. В качестве этого параметра может выступать подключение серверов к одному коммутатору или ряд стоек с серверами с силовой линией от одного автомата.
Сервер хранения (Storage Server) – любой linux-сервер, участвующий в хранении данных Swift.
Диск (Disk) – диск сервера, где физически хранятся данные (рекомендуется файловая система ext4 или XFS, а также большой размер inode для метаданных).
Как извлекаются данные из хранилища Swift.
Поскольку хранилище распределенное, то встает вопрос как осуществлять поиск интересующих нас данных? Этот вопрос решается при помощи следующей сущности Swift – кольцо (Ring). Именно кольца определяют расположение данных в кластере. Для учетных записей, контейнеров и объектов используются отдельные кольца, но все они работают по одному принципу. При запросе данных из кластера кольцо возвращает его “координаты”. Технически это достигается путем обращения к структурам данных кольца, содержащих параметры:
id, zone, region, weight, ip, port, device, meta
Заключение.
Итак, вкратце мы рассмотрели принцип организации одного из компонентов OpenStack – облачное хранилище Swift и его основные сущности. В следующей статье мы расскажем развернуть инфраструктуру OpenStack на одном сервере.