Skip to content

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

Courier Service

Микросервис для управления курьерами и доставками.
Реализован на 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:

архитектура,

качество кода,

наблюдаемость,

эксплуатация.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages