Типичный шаблон для создания такой службы хранения основан на центральном брокере запросов, который взаимодействует с другими службами и выделенными базами данных:
- брокер хранения обрабатывает запросы REST от пользователей S3API (но не только от пользователей, мы увидим это позже),
- этот брокер использует другие службы для запуска:
- используются, например, контейнерные или вычислительные облачные службыброкером для обработки узлов или контейнеров службы хранения
- некоторая служба базы данных (обычно гибкая база данных nosql) используется для поддержки баз данных службы хранения,
- служба идентификации, которая позволяет посредникупроверять запросы.
- этот брокер поддерживает несколько баз данных:
- база данных хранилища объектов, которая поддерживает объекты долгосрочного хранения для пользователей,
- anучетная база данных с конкретными сведениями о владельцах и правах доступа к объектам, хранящимся в хранилище объектов,
- база данных политики хранения, которая поддерживает уровни обслуживания, функции и поведение в зависимости от пользователей и типов объектов.
Брокер предлагает услуги пользователям, а также некоторымдругие службы:
- служба вычислений может использовать службу хранилища объектов для поддержания своей конфигурации и состояния: служба вычислений отправляет запросы REST службе хранилища,
- служба панели мониторинга может использоватьслужба хранения объектов для поддержки коллекций данных,
- и т. д.
Дальнейшее рассмотрение некоторых реализаций служб хранения с открытым исходным кодом, таких как модуль OpenStack Swift, может помочь вам найти общие шаблоны проектирования.которые используются для реализации такого сервиса на основе других микросервисов.Например, вы можете посмотреть раздел 1.2.2 этого руководства: https://access.redhat.com/documentation/en-us/red_hat_openstack_platform/10/pdf/architecture_guide/Red_Hat_OpenStack_Platform-10-Architecture_Guide-en-US.pdf
S3 очень похож на Swift, поскольку между соответствующими API есть несколько шлюзов.
Вот схемас таким рисунком: