Подробная архитектура инфрастуктуры сервиса \- аналога Dropbox
Условие задачи
Некоторая компания разрабатывает альтернативу DropBox. Приложение предназначено для пользователей по всему миру (Европа, США, Азия и др.). Приложение состоит из нескольких микросервисов, каждый из которых отвечает за конкретную функциональность (например: микросервис оплаты, микросервис работы с пользователями, микросервис работы с файлами и др.). Приложение использует базу данных PostgreSQL, хранилище файлов (S3-compatible) и очередь сообщений для коммуникации между микросервисами. Проект разрабатывался только локально и на данный момент не развернут ни в каком окружении. Разработчики передали вам репозиторий проекта, в котором:
- 10 директорий, каждая содержит исходный код отдельного микросервиса и Dockerfile для его сборки.
- docker-compose.yml файл в корне репозитория, используемый разработчиками для запуска проекта в локальном окружении (10 микросервисов, PostgreSQL, очередь сообщений и S3-compatible хранилище).
Основные нефункциональные требования от бизнеса:
- Высокая доступность (High Availability):
- Требуемый SLA — не ниже 99.99%.
- Толерантность к нагрузке:
- Система должна выдерживать постоянную высокую нагрузку (high load tolerance).
- Система должна выдерживать высокую пиковую нагрузку (peak load tolerance).
- Минимальная задержка (Latency):
- Минимальная задержка должна обеспечиваться как внутри одного региона, так и при работе пользователей из разных регионов.
- Безопасность и конфиденциальность данных пользователей:
- Данные должны быть защищены от несанкционированного доступа.
- Минимизация расходов на инфраструктуру:
- Решение должно быть экономически эффективным, избегать избыточных расходов.
- Failover и Disaster Recovery:
- При отказе целого датацентра или региона пользователи не должны заметить потерю функциональности или данных.
Вы - руководитель DevOps команды и от вас требуется:
- Дизайн Production-инфраструктуры:
- Предложите подробную архитектуру инфраструктуры для production-окружения с учетом всех перечисленных нефункциональных требований.
- Явно укажите используемые облачные сервисы, инструменты и подходы.
- Дизайн Staging-инфраструктуры:
- Предложите дизайн staging-окружения, максимально приближенного к production, но значительно более экономичного по стоимости.
- Опишите, что именно и почему вы упростите или исключите из staging-окружения для снижения расходов.
- Управление инфраструктурой:
- Предложите подход который будете использовать для управления и развёртывания инфраструктуры.
- Обратная связь:
- Опишите инструменты и подходы, которые будете использовать для того, чтобы разработчики и бизнес могли "видеть" как приложение работает в том или ином окружении, чтобы можно было принять меры по улучшению работы приложения, если это потребуется.
- Произвидительность приложения:
- Опишите подходы и критерии оценки производительности приложения, которые помогут оптимально использовать ресурсы серверов.
- Предложите подходы к минимизации задержки при работе с файлами.