RGW: протокол и шлюз облачного хранилища¶
RGW (от англ. RADOS Gateway или RESTful Gateway) — программный компонент распределённой системы хранения данных Ceph, предоставляющий доступ к объектному хранилищу через интерфейсы, совместимые с Amazon S3 и OpenStack Swift. RGW функционирует как шлюз (gateway), который транслирует HTTP-запросы клиентов во внутренние операции кластера Ceph, обеспечивая работу с данными в модели «объектное хранилище» поверх отказоустойчивой инфраструктуры RADOS.
¶Назначение и место в архитектуре Ceph
Ceph — это программно-определяемая платформа хранения, объединяющая блочные, файловые и объектные интерфейсы в едином кластере. Основой Ceph является RADOS (Reliable Autonomic Distributed Object Store) — самовосстанавливающееся хранилище объектов, которое распределяет данные по узлам кластера с репликацией или erasure coding. RGW выступает прослойкой между внешним миром и RADOS: он принимает RESTful-запросы, аутентифицирует пользователей, проверяет права доступа и преобразует операции с логическими объектами (bucket, key) в операции с RADOS-объектами.
RGW запускается как отдельный демон (процесс) на одном или нескольких серверах кластера, обычно наравне с другими компонентами Ceph — MON (мониторы) и OSD (диски). Демон RGW не хранит данные самостоятельно, а только управляет метаданными и проксирует трафик, что позволяет горизонтально масштабировать шлюз простым добавлением новых экземпляров за балансировщиком нагрузки.
¶История развития
Проект Ceph был основан Сагой Уиллом (Sage Weil) в 2004 году и изначально развивался как исследовательская работа в Калифорнийском университете в Санта-Крузе. Первая версия RGW появилась в 2010 году как ответ на растущую популярность облачных объектных хранилищ, прежде всего Amazon S3 (запущен в 2006 году). Разработчики Ceph стремились создать открытую альтернативу проприетарным сервисам, позволяющую разворачивать совместимое с S3 хранилище на собственном оборудовании.
Первоначально RGW поддерживал только протокол S3, но позднее добавилась поддержка OpenStack Swift (используется в облачных платформах OpenStack). В 2014 году Ceph был принят в инкубатор фонда Linux Foundation, а RGW стал одним из ключевых компонентов дистрибутивов Ceph от Red Hat, SUSE и других вендоров. Начиная с версии Ceph Luminous (2017), RGW получил значительные улучшения производительности, включая новый механизм хранения метаданных и оптимизацию записи.
¶Протоколы и совместимость
Основной протокол, поддерживаемый RGW, — Amazon S3 (Simple Storage Service). Это де-факто стандарт объектного хранения, использующий RESTful API с аутентификацией на основе подписи запроса (AWS Signature Version 2 и Version 4). RGW реализует большинство операций S3: создание и удаление bucket, загрузку и скачивание объектов, управление жизненным циклом данных, настройку политик доступа (ACL, bucket policies), поддержку многокомпонентной загрузки (multipart upload) для крупных файлов.
Второй поддерживаемый интерфейс — OpenStack Swift API, который используется для интеграции с платформой OpenStack. Swift-совместимость позволяет использовать RGW в качестве бэкенда для сервиса хранения объектов в частных облаках. Оба протокола работают поверх HTTP/HTTPS, что делает RGW универсальным инструментом для широкого круга приложений — от бэкапов до веб-приложений.
¶Ключевые возможности
RGW предоставляет расширенный набор функций, характерных для современных объектных хранилищ:
- Управление доступом: поддержка пользователей, ключей доступа, ролей, политик bucket и ACL. Возможна интеграция с OpenStack Keystone для централизованной аутентификации.
- Версионирование объектов: хранение нескольких версий одного объекта с возможностью отката к предыдущим состояниям.
- Жизненный цикл данных: автоматическое перемещение объектов между классами хранения (например, со стандартного на архивный) или их удаление по расписанию.
- Мультитенантность: изоляция данных разных организаций или проектов внутри одного кластера.
- Квотирование: ограничение объёма хранилища и количества объектов для каждого пользователя или tenant.
- Шифрование: поддержка шифрования на стороне сервера (SSE) с использованием ключей, хранящихся в самом кластере или управляемых внешним KMS.
- Логирование доступа: запись всех операций с объектами для аудита и аналитики.
- Поддержка CORS: настройка кросс-доменных запросов для веб-приложений.
¶Архитектура и внутреннее устройство
RGW построен на базе веб-сервера (в современных версиях — встроенного HTTP-фронтенда на основе библиотеки Beast, ранее использовался CivetWeb). Каждый запрос обрабатывается в несколько этапов:
- Аутентификация: проверка подписи запроса или токена Keystone.
- Авторизация: проверка прав пользователя на выполнение операции с конкретным bucket или объектом.
- Обработка: преобразование REST-вызова в последовательность операций с RADOS (чтение/запись объектов, обновление метаданных).
- Ответ: формирование HTTP-ответа с кодом статуса и телом (XML или JSON).
Метаданные RGW (информация о пользователях, bucket, списках объектов) хранятся в специальных RADOS-объектах с префиксом .rgw. Данные пользователей сохраняются в отдельных пулах (pools) — логических разделах кластера, которые можно настраивать под разные классы хранения. Такая архитектура обеспечивает высокую надёжность: даже при выходе из строя узла с RGW клиенты могут продолжать работу через другие экземпляры шлюза, а данные остаются доступными благодаря репликации на уровне OSD.
¶Производительность и масштабирование
Производительность RGW зависит от аппаратного обеспечения кластера, конфигурации сети и количества параллельных запросов. В типовой конфигурации RGW способен обрабатывать тысячи запросов в секунду, а пропускная способность при последовательном чтении/записи может достигать нескольких гигабайт в секунду на один экземпляр. Ключевым фактором масштабирования является количество OSD — дисковых процессов, выполняющих фактическое хранение.
Горизонтальное масштабирование достигается запуском нескольких демонов RGW на разных серверах. Балансировщик нагрузки (например, HAProxy или Nginx) распределяет входящие запросы между ними. RGW поддерживает кластерную конфигурацию с синхронизацией метаданных через RADOS, что позволяет всем экземплярам работать с единым состоянием системы. Для геораспределённых развёртываний предусмотрен механизм multi-site replication, синхронизирующий данные между независимыми кластерами Ceph.
¶Применение
RGW широко используется в корпоративных средах и облачных платформах как альтернатива коммерческим сервисам объектного хранения. Основные сценарии применения:
- Резервное копирование: интеграция с инструментами бэкапа (например, Restic, Duplicity, Veeam) через S3-совместимый интерфейс.
- Архивное хранение: долговременное хранение редко используемых данных с низкой стоимостью.
- Веб-приложения: хранение пользовательского контента (изображений, видео, документов) с доступом через CDN или напрямую.
- Научные и исследовательские данные: хранение больших объёмов данных с возможностью параллельного доступа.
- Облачные сервисы: использование в качестве бэкенда для OpenStack Swift или частных S3-совместимых платформ.
Крупные развёртывания Ceph с RGW используются такими организациями, как CERN (Европейская организация по ядерным исследованиям), DreamHost (провайдер облачных услуг) и рядом телекоммуникационных компаний. В России RGW применяется в государственных и корпоративных системах, требующих импортонезависимых решений, например, в составе дистрибутивов от «Ред Софт» и «Аэродиск».
¶Ограничения и альтернативы
RGW уступает Amazon S3 в некоторых второстепенных функциях, таких как продвинутые аналитические сервисы (S3 Select, Athena) или встроенная интеграция с сервисами машинного обучения. Однако для большинства задач хранения и доступа к данным его функциональности достаточно. Среди ограничений отмечают сложность настройки георепликации и необходимость тщательного планирования пулов для обеспечения производительности.
Альтернативами RGW в экосистеме открытого ПО являются MinIO (лёгкое объектное хранилище, совместимое с S3), OpenStack Swift (самостоятельный сервис) и SeaweedFS. В коммерческом сегменте конкуренцию составляют Amazon S3, Google Cloud Storage и Azure Blob Storage. По сравнению с MinIO, RGW предлагает более тесную интеграцию с Ceph и поддержку Swift API, но требует развёртывания полноценного кластера Ceph, что оправдано при больших объёмах данных.