Архитектура решения
ЗАКРОМА.Хранение
ЗАКРОМА.Хранение представляет собой гибридное объектное хранилище, совместимое с S3 API. Решение построено на микросервисной архитектуре для возможности масштабирования и высокой отказоустойчивости.
Отличительными особенностями решения является поддержка различных ресурсов хранения (сервера с дисками, другие S3, СХД, ленты, файловые системы) и возможность мгновенного расширения за счёт любого доступного ресурса хранения. Эта возможность обеспечивается за счет разделения управляющего слоя и слоя хранения. Благодаря такому подходу, решение поддерживает возможность создать неограниченное число классов хранения и объединить различные ресурсы хранения под одной крышей.
Компоненты приложения
- Gateway - сервис проверки входящего http(s) запроса, валидация, аутентификация через keycloak/LDAP, авторизация и перенаправление запроса в целевой сервис.
- Core - сервис хранения информации о структуре хранилища. Кэширует и обновляет управляющую информацию в БД.
- Worker – сервис работы с объектами. Обеспечивает работу с шардом БД.
- Composer – сервис управления, агрегирует информацию от Core и Worker, распределяет нагрузку по нескольким шардам БД.
- Admin UI – фронт-энд административной web-консоли для управления приложением. Взаимодействует с остальными сервисами через Gateway.
- Zakroma Data Strorage (ZDS) – Слой хранения поверх дисков с применением Erasure coding. Может быть развёрнут на серверах приложения или отдельно.
- PostgreSQL – хранение информации о структуре хранилища, объектах и метаданных объектов, политиках хранения, политиках доступа, настройках, подключенных хранилищах. При росте количества объектов база данных шардируется средствами приложения и информация перераспределяется между шардами.
- Kafka (опционально) - менеджер очередей сообщений. Используется для записи аудит лога, механизма вебхуков и работы в мультикластерном режиме. Kafka позволяет включить этот функционал без потери производительности, обеспечивая асинхронное взаимодействие.
- Keycloak (опционально) – сервис получения списка пользователей, групп, интеграция с AD/SSO, аутентификация.
Установка и обновление
Установка, масштабирование и обновление происходит за счет автоматизации:
- в варианте бинарных пакетов - с помощью Ansible-ролей.
- в контейнерном варианте - с помощью Helm-chart.
Документация по установкеСм. раздел DevOps
API
Хранилище обладает следующими интерфейсами: · S3 API – основное API в соответствии с AWS S3. · REST API – управляющее API. Используется в Admin UI и для автоматизации. · CLI – командный интерфейс. Более полная поддержка операций через собственное консольное приложение zcli.
Управление доступом
В ЗАКРОМА используется сервис Keycloak, который позволяет настроить интеграцию с корпоративной службой каталогов AD/SSO. Это позволяет использовать для администрирования пользователей и группы пользователей из корпоративной системы управления пользователями.
В системе различается управление доступом по видам: · Администраторы приложения. Для администраторов приложения можно создать и указать роли, ограничивающие доступ на операции в консоли администрирования. Это позволяет выделить ограниченных в правах администраторов, например, выделить роль «Сотрудник по ИБ» и разрешить ему доступ только к журналу операций. На уровне рабочих областей (тенантов) и бакетов можно назначить локальных администраторов для этих объектов. · Пользователи S3. Для использования S3 API у пользователя должен быть действующий access/secret token, а также права доступа на операции, указанные в Политике доступа для соответствующей рабочей области (тенанта) или бакета.
Управление политиками доступа обеспечивает гораздо более широкие возможности для настройки прав доступа, чем устаревшие списки доступа ACL.
Мониторинг
Встроенный мониторинг позволяет проанализировать работу фоновых процессов в хранилище. Для мониторинга нагрузки на хранилище в разрезе операций, тенантов и бакетов и другие метрики можно использовать стек Prometheus/Grafana. Для Grafana поставляются преднастроенные дашборды.
Мультикластерный режим работы
Ниже на схеме представлена концептуальная архитектурная схема работы решения, развёрнутого в двух датацентрах:
Каждый кластер обменивается событиями и объектами по реплицируемым рабочим областям (тенантам) или реплицируемым бакетам.
Каждый из кластеров может иметь собственные, отличающиеся политики хранения.
Стек технологий
- Golang (основной код приложения)
- Angular (admin-UI)
- Nginx (admin-UI, балансировка)
- PostgreSQL (хранение метаданных и политик, версия 16+)
- kafka (опционально, нужна для асинхронных процессов)
- keycloak (опционально)