Это веб-сервис для отслеживания информации о заказах. Система реализована на Go, использует PostgreSQL для хранения, Kafka для потоковой передачи данных и LRU-кэш в памяти для быстрого доступа.
- Backend: Go
- Веб-сервер: chi
- База данных: PostgreSQL
- Брокер сообщений: Kafka
- Кэширование: LRU-кэш (внутренняя реализация)
- Мониторинг (Метрики): Prometheus
- Мониторинг (Визуализация): Grafana
- Мониторинг (Трассировка): Jaeger
- Контейнеризация: Docker / docker-compose
- Frontend: HTML, CSS, JavaScript
В корневой папке проекта выполните одну команду:
docker-compose up -d
Эта команда в фоновом режиме запустит всю систему:
- postgres-db: База данных PostgreSQL.
- kafka: Брокер сообщений.
- zookeeper: Необходим для Kafka.
- l0-app: Основное Go-приложение (HTTP-сервер и Kafka-консюмер).
- prometheus: Сбор метрик.
- grafana: Дэшборды.
- jaeger: Трассировка.
Приложение l0-app (основной сервис) автоматически подключится к БД, применит миграции и начнет "прогрев" кэша, загружая существующие заказы.
Чтобы в системе появились данные, нужно запустить продюсер. Он не является частью docker-compose, так как нужен только для генерации тестовой нагрузки.
Откройте новый терминал и перейдите в директорию продюсера:
cd cmd/producer
Запустите продюсер:
go run main.go
Каждые несколько секунд продюсер будет генерировать случайный заказ и отправлять его в топик orders. В логах docker-compose (командой docker-compose logs -f l0-app) вы увидите, как основной сервис их получает, сохраняет в БД и кэширует.
После запуска вам доступны несколько интерфейсов:
Основное приложение (поиск заказов):
http://localhost:8081
Откройте эту страницу в браузере. В логах продюсера (из Шага 2) скопируйте UID одного из отправленных заказов. Вставьте его в поле ввода и нажмите "Найти Заказ".
Jaeger (Трассировка):
http://localhost:16686
В интерфейсе Jaeger выберите сервис l0-app, чтобы посмотреть трейсы запросов (от HTTP-хендлера до кэша или БД).
Prometheus (Метрики):
http://localhost:9090
Здесь можно посмотреть сырые метрики, которые собирает сервис (например, http_requests_total, cache_hits_total, db_errors_total). Лучше смотреть через дэшборд в Grafana
Grafana (Дэшборды):
http://localhost:3000
(Логин/пароль по умолчанию: admin/admin). Здесь можно настроить дэшборды, используя Prometheus как источник данных.
L0/
├── cmd/ # Главные приложения
│ ├── main/ # Основной сервис (HTTP-сервер и Kafka-консюмер)
│ └── producer/ # Продюсер для генерации и отправки тестовых данных
├── internal/ # Внутренняя логика приложения
│ ├── api/ # HTTP-хендлеры и настройка сервера
│ ├── cache/ # Реализация LRU-кэша
│ ├── config/ # Конфигурация приложения
│ ├── database/ # Работа с PostgreSQL (включая миграции)
│ ├── generator/ # Генератор случайных заказов для продюсера
│ ├── kafka/ # Логика для Kafka-консюмера (и DLQ)
│ ├── metrics/ # Определение метрик Prometheus
│ ├── model/ # Структуры данных (модели)
│ ├── tracing/ # Настройка трассировки (Jaeger)
│ └── validator/ # Валидатор структур
├── web/ # Файлы для фронтенда (HTML, CSS, JS)
│ ├── static/ # CSS и JS файлы
│ └── index.html # Главная страница
├── .env # Конфигурация
├── .golangci.yml # Линтер
├── docker-compose.yml # Файл для запуска всей инфраструктуры
├── Dockerfile # Dockerfile для основного Go-приложения
├── go.mod # Зависимости проекта
├── go.sum
├── model.json # Шаблон данных (для генератора и тестов)
└── prometheus.yml # Конфигурация Prometheus