Разработка мобильных приложений. Разработка с нуля, дизайн интерфейса, тестирование, веб-решение. Устройства для масштабирования: смартфоны. Я хочу создать mvp с расширенные функции. ПОЭТОМУ нужно составит тз из заявки. на MVP готовностью к микросервисам я половина информации остаивл здес патом отправлю осталный ### 1. Цель проекта Создать MVP сервиса доставки еды, который: * запускается как модульный монолит; * готов к немедленному выделению в микросервисы; * выдерживает нагрузку до 15?000 пользователей; * не зависит от сервисов Яндекса; * укладывается в бюджет до 1?млн?руб. ### 2. Целевые платформы * мобильное приложение (React Native) для iOS и Android (последние 3 версии); * веб?админ?панель; * личный кабинет заведения (веб). ### 3. Архитектурные принципы **Ключевые принципы:** * **слабая связность** — модули общаются только через API; * **сильная связность внутри модулей** — каждый модуль отвечает за свою бизнес?область; * **независимость данных** — каждый модуль владеет своими данными; * **асинхронное взаимодействие** — все некритичные операции через очереди; * **контейнеризация** — каждый модуль в отдельном Docker?контейнере; * **автоматизированное развёртывание** — CI/CD для каждого модуля. **Требования к масштабируемости:** * горизонтальное масштабирование любого модуля; * возможность выделить любой модуль в отдельный сервис без остановки работы; * поддержка нескольких регионов (гео?шардинг). **Требования к отказоустойчивости:** * время отклика 500?мс для 95?% запросов при нагрузке до 5?000 заказов/день; * доступность системы 99,5?% (SLA); * автоматическое восстановление после сбоев; * резервное копирование БД (ежедневно + инкрементальные каждые 4?часа). ### 4. Технологический стек **Бэкенд:** Node.js (NestJS) с поддержкой DI и модульности. **БД:** PostgreSQL (отдельная БД для каждого нагруженного модуля). **Кэширование:** Redis (для сессий, часто запрашиваемых данных). **Очереди:** RabbitMQ (асинхронная обработка заказов, уведомлений). **API Gateway:** Traefik (единая точка входа). **Service Discovery:** Consul (автоматическое обнаружение сервисов). **Circuit Breaker:** Resilience4j (защита от каскадных сбоев). **Фронтенд (админ?панель):** React с TypeScript, Ant Design. **Личный кабинет заведения:** React с TypeScript. **Мобильные приложения:** React Native (поддержка iOS и Android). **Хостинг:** облачный VPS (VK Cloud, Selectel). **CDN:** для статического контента (изображения меню). **CI/CD:** GitLab CI/CD. **Мониторинг:** Prometheus + Grafana. **Логирование:** Grafana Loki. **Трассировка:** Jaeger. **Интеграции (без Яндекса):** * карты: 2ГИС API или OpenStreetMap; * push?уведомления: Firebase Cloud Messaging (FCM); * платежи: ЮKassa / CloudPayments / Тинькофф?Касса (1 на выбор); * SMS?шлюз для критических уведомлений. ### 5. Модульная структура (готовая к микросервисам) Каждый модуль: * имеет собственную БД или схему; * общается только через API/очереди; * контейнеризирован (Docker); * имеет CI/CD пайплайн; * мониторится отдельно. **Список модулей:** 1. **Модуль авторизации (`/api/auth`):** * регистрация/авторизация пользователей; * JWT?токены; * ролевая модель доступа; * двухфакторная аутентификация. 2. **Модуль заказов (`/api/orders`):** * создание/редактирование заказов; * управление статусами; * интеграция с модулем платежей; * уведомления о новых заказах. 3. **Модуль меню и заведений (`/api/restaurants`):** * управление заведениями; * загрузка и модерация меню; * акции и скидки; * зоны доставки. 4. **Модуль геолокации (`/api/geolocation`):** * определение адреса по координатам; * расчёт времени доставки; * маршрутизация для курьеров. 5. **Модуль платежей (`/api/payments`):** * обработка платежей; * возвраты; * интеграция с платёжными системами. 6. **Модуль уведомлений (`/api/notifications`):** * отправка push/SMS; * шаблоны сообщений; * логирование отправленных уведомлений. 7. **Модуль аналитики (`/api/analytics`):** * сбор метрик; * формирование отчётов; * экспорт данных. 8. **Модуль администрирования (`/api/admin`):** * управление пользователями; * модерация заведений; * настройка тарифов и комиссий. ### 6. Структура проекта (готовая к разделению) ``` project/ ??? docker/ # Конфигурации Docker для каждого модуля ??? modules/ ? ??? auth/ # Модуль авторизации ? ? ??? src/ ? ? ??? Dockerfile ? ? ??? package.json ? ??? orders/ # Модуль заказов ? ? ??? src/ ? ? ??? Dockerfile ? ? ??? package.json ? ??? ... # Остальные модули аналогично ??? shared/ # Общие утилиты, типы, интерфейсы ??? api-contracts/ # OpenAPI 3.0 спецификации для всех модулей ??? ci-cd/ # Пайплайны CI/CD для каждого модуля ??? infrastructure/ # Terraform/Ansible скрипты для развёртывания ``` ### 7. План запуска MVP (готового к микросервисам) **Этап?1. Настройка инфраструктуры (1?месяц)** **Задачи:** * развернуть облачную инфраструктуру (VK Cloud/Selectel); * настроить CI/CD (GitLab CI/CD) для каждого модуля; * развернуть observability?стек (Grafana?Loki, Jaeger, Prometheus?+?Grafana); * развернуть RabbitMQ и настроить очереди; * развернуть Consul для Service Discovery; * развернуть Traefik как API Gateway; * настроить резервное копирование. **Результат:** готовая инфраструктура для модульного монолита. **Этап?2. Разработка модулей (2?месяца)** **Задачи для каждого модуля:** * реализовать бизнес?логику; * создать Docker?образ; * написать API?контракт (OpenAPI?3.0); * настроить логирование и мониторинг; * написать unit? и интеграционные тесты; * настроить пайплайн CI/CD; * интегрировать с RabbitMQ для асинхронных операций. **Приоритет разработки:** 1. авторизации; 2. уведомлений; 3. меню и заведений; 4. геолокации; 5. платежей; 6. заказов; 7. аналитики; 8. администрирования. **Результат:** работающий модульный монолит с полной observability. **Этап?3. Интеграция и тестирование (3?недели)** **Задачи:** * соединить модули через API Gateway; * настроить Service Discovery; * протестировать взаимодействие модулей; * провести нагрузочное тестирование (15?000 пользователей); * устранить узкие места; * проверить отказоустойчивость (имитация сбоев); * провести аудит безопасности. **Результат:** стабильный MVP, готовый к эксплуатации и разделению. **Этап?4. Запуск MVP (1?неделя)** **Задачи:** * развёртывание в продакшн; * подключение первых заведений; * тестирование на реальных пользователях; * сбор обратной связи; * мониторинг стабильности. **Результат:** работающий MVP с возможностью немедленного перехода на микросервисы. ### 8. Немедленная готовность к микросервисам **Что позволяет немедленный переход:** * каждый модуль — отдельный Docker?образ с собственным CI/CD; * все взаимодействия через API/RabbitMQ (нет прямых вызовов); * полная observability (логи, трейсы, метрики); * Service Discovery и API Gateway настроены; * Circuit Breaker защищает от каскадных сбоев; * данные уже разделены (отдельные БД/схемы); * асинхронная обработка через RabbitMQ; * автоматизированное развёртывание и масштабирование. **Как выделить модуль в микросервис:** 1. остановить контейнер модуля в монолите; 2. развернуть отдельный инстанс модуля в новом контейнере; 3. подключить к общей БД или создать отдельную (если нужно); 4. обновить Service Discovery; 5. перенаправить трафик через API Gateway; 6. проверить работоспособность. **Время выделения одного модуля:** 2–4?часа (включая тестирование).