Микросервис для управления курьерами и доставками.
Реализован на Go с использованием PostgreSQL, Kafka, Prometheus и Grafana.
Проект предназначен для учебной и практической отработки:
- чистой архитектуры,
- тестирования,
- метрик и мониторинга,
- rate limiting,
- CI/CD,
- профилирования (pprof).
- Создание курьера
- Получение курьера по ID
- Обновление данных курьера
- Получение списка курьеров
- Поиск доступного курьера
- Назначение заказа курьеру
- Снятие заказа с курьера
- Автоматическое освобождение курьеров по дедлайну
- HTTP Gateway для Order Service
- Kafka consumer для событий заказов
- Prometheus-метрики
- Rate Limiter (Token Bucket)
Проект построен по принципам Clean Architecture:
cmd/ myapp/ // точка входа internal/ courier/ // курьеры (handler, usecase, repository) delivery/ // доставка (handler, usecase, repository) gateway/ // HTTP gateway к order-сервису middleware/ // middleware (metrics, rate limit) metrics/ // prometheus-метрики worker/ // Kafka consumer db/ // работа с БД pkg/ logger/ // логгер
- Go 1.21+
- PostgreSQL (pgx)
- Kafka (sarama)
- Prometheus + Grafana
- golangci-lint
- Goose (миграции)
- net/http/pprof
Используется файл .env:
make run
🗄 Миграции БД
make migrate # применить миграции make migrate-down # откатить последнюю миграцию make migrate-status # статус миграций 🧪 Тесты go test ./... -v 🧹 Линтинг golangci-lint run ./... или через Makefile (если добавлено):
make lint 📊 Метрики и мониторинг Prometheus bash Копировать код GET /metrics Примеры метрик:
HTTP latency
Количество запросов
Rate limit exceeded
Gateway retries
🔥 Rate Limiting Используется Token Bucket:
Ограничение по RPS
Возврат 429 Too Many Requests
Заголовок Retry-After
🧠 Профилирование (pprof) Отдельный HTTP-сервер (только localhost):
http://127.0.0.1:6060/debug/pprof/
Примеры:
go tool pprof http://localhost:6060/debug/pprof/profile?seconds=10 go tool pprof http://localhost:6060/debug/pprof/heap
🔐 Безопасность pprof доступен только с localhost
Не предназначен для прямого доступа снаружи
🤖 CI/CD Используется GitHub Actions:
golangci-lint
go test
go build
Workflow: .github/workflows/ci.yml
📌 Дополнительно Все слои покрыты unit-тестами
Gateway покрыт retry-сценариями
Метрики тестируются отдельно
Код соответствует требованиям golangci-lint v2
📚 Назначение проекта Учебный проект для практики backend-разработки на Go:
архитектура,
качество кода,
наблюдаемость,
эксплуатация.