Сервис для обработки и просмотра информации о заказах.
Проект представляет собой систему для обработки заказов, использующую событийно-ориентированный подход и микросервисную архитектуру. Взаимодействие между компонентами построено на брокере сообщений Kafka, что обеспечивает слабую связанность и высокую отказоустойчивость.
Поток данных: Publisher ➝ Kafka ➝ App (Consumer) ➝ PostgreSQL & Redis
Запрос данных: Frontend ➝ App (HTTP API) ➝ Redis (cache) / PostgreSQL (db)
- Publisher: Генерирует и отправляет тестовые данные о заказах в Kafka. Это утилита для имитации внешнего источника данных.
- App: Основное приложение, которое:
- Подписывается на топик в Kafka и получает данные о новых заказах.
- Валидирует входящие данные.
- Сохраняет их в основную базу данных PostgreSQL.
- Кэширует данные в Redis для обеспечения быстрого доступа.
- Предоставляет HTTP API с помощью chi роутера для получения информации о заказах по их UID. При запросе сначала проверяет наличие данных в Redis, и только в случае промаха кеша обращается к PostgreSQL.
- Frontend: Простой одностраничный веб-интерфейс для просмотра заказов по их уникальному идентификатору (UID). Отправляет запросы к HTTP API основного приложения.
- Migrator: Вспомогательный сервис для применения миграций к базе данных PostgreSQL с помощью golang-migrate. Запускается перед стартом основного приложения, чтобы подготовить схему БД.
Проект покрыт как unit, так и интеграционными тестами для проверки корректности работы ключевых компонентов и их взаимодействия.
Для запуска всех тестов можно использовать команду:
make testЭта команда предварительно загрузит необходимые для тестов Docker-образы (цель pull-images) и соберет тестовый сервис.
Для запуска и работы с проектом вам понадобятся:
- Docker
- Docker Compose
- Make (опционально, для удобства)
-
Клонируйте репозиторий:
git clone https://github.com/Ravwvil/order-service.git cd order-service -
Настройте переменные окружения: Переименуйте файл
.env.exampleв.env. При необходимости вы можете изменить значения в этом файле. -
Запустите сервисы: Выполните следующую команду для сборки образов и запуска всех сервисов в фоновом режиме:
make up
Если у вас не установлен
make, вы можете использовать командуdocker-compose:docker-compose up -d --build
В случае ошибок при сборке надо повторно запустить программу.
-
Получите UID заказа: После запуска всех сервисов,
publisherавтоматически сгенерирует и отправит 50 тестовых заказов в Kafka. Вы можете посмотреть логиpublisher, чтобы получитьOrder UIDзаказов.docker-compose logs publisher
В логах вы увидите секцию, похожую на эту:
--- Published Order UIDs --- b563feb7b2b84b6test ... --------------------------Скопируйте любой UID из списка.
-
Откройте веб-интерфейс: Перейдите в браузере по адресу http://localhost:8080.
-
Просмотрите заказ: Вставьте скопированный
Order UIDв поле ввода на странице и нажмите "Get Order". Информация о заказе будет загружена и отображена в формате JSON.
Ниже приведены основные команды для управления сервисами. Вы можете использовать make для удобства или выполнять соответствующие команды docker-compose напрямую.
| Действие | Команда make |
Команда docker-compose(на случай если нет Make) |
|---|---|---|
| Сборка и запуск | make up |
docker-compose up -d --build |
| Остановка | make down |
docker-compose down |
| Загрузка образов для тестов | make pull-images |
docker pull confluentinc/cp-zookeeper:7.1.1docker pull confluentinc/cp-kafka:7.1.1docker pull redis:7.2.5-alpinedocker pull postgres:16.3-alpinedocker pull testcontainers/ryuk:0.8.1 |
| Сборка тестового сервиса | make build-tests |
docker-compose build tests |
| Запуск тестов | make test |
docker-compose build tests && docker-compose run --rm tests |