Skip to content

Repository files navigation

MIFI_HighLoad_go-microservice

Микросервис для управления пользователями с поддержкой CRUD-операций, написанный на Go. Включает в себя конкурентную обработку, метрики Prometheus, rate limiting и готов к развертыванию в контейнерах.

🚀 Возможности

  • CRUD API: Полный набор операций для управления пользователями
  • Конкурентная обработка: Асинхронное логирование и обработка уведомлений
  • Rate Limiting: Ограничение до 1000 запросов в секунду
  • Мониторинг: Метрики Prometheus и health checks
  • Контейнеризация: Docker и Docker Compose конфигурации
  • Graceful Shutdown: Корректное завершение работы приложения

📋 Требования

  • Go 1.22+
  • Docker и Docker Compose (опционально)

🏗️ Структура проекта

go-microservice/
├── cmd/server/main.go                 # Точка входа
├── internal/
│   ├── handlers/                      # HTTP обработчики
│   │   ├── user_handler.go
│   │   └── health_handler.go
│   ├── services/                      # Бизнес-логика
│   │   ├── user_service.go
│   │   └── audit_service.go
│   ├── middleware/                    # HTTP middleware
│   │   ├── rate_limiter.go
│   │   ├── metrics.go
│   │   └── logging.go
│   └── models/                        # Модели данных
│       └── user.go
├── pkg/logger/                        # Утилиты логирования
│   └── logger.go
├── Dockerfile                         # Конфигурация Docker
├── docker-compose.yml                 # Docker Compose конфигурация
├── Makefile                           # Команды для разработки
├── go.mod                             # Зависимости Go
└── go.sum                             # Зафиксированные версии зависимостей

🚀 Быстрый старт

Локальная разработка

  1. Клонируйте репозиторий:
git clone <repository-url> .
  1. Установите зависимости:
go mod download
  1. Запустите сервис:
make run
# или
go run ./cmd/server

Использование Docker

  1. Соберите Docker образ:
make docker-build
# или
docker build -t user-microservice .
  1. Запустите контейнер:
make docker-run
# или
docker run -p 8080:8080 user-microservice

Полный стек с мониторингом

Запустите все сервисы с помощью Docker Compose:

make docker-compose-up
# или
docker-compose up -d

Это запустит:

  • Микросервис на порту 8080
  • Prometheus на порту 9090
  • Grafana на порту 3000

📡 API Endpoints

Управление пользователями

Метод Endpoint Описание
GET /api/users Получить список всех пользователей
GET /api/users/{id} Получить пользователя по ID
POST /api/users Создать нового пользователя
PUT /api/users/{id} Обновить данные пользователя
DELETE /api/users/{id} Удалить пользователя

Мониторинг

Метод Endpoint Описание
GET /health Health check сервиса
GET /metrics Метрики Prometheus

📊 Примеры использования API

Создание пользователя

curl -X POST http://localhost:8080/api/users \
  -H "Content-Type: application/json" \
  -d '{"name": "John Doe", "email": "john@example.com"}'

Получение всех пользователей

curl http://localhost:8080/api/users

Получение пользователя по ID

curl http://localhost:8080/api/users/1

Обновление пользователя

curl -X PUT http://localhost:8080/api/users/1 \
  -H "Content-Type: application/json" \
  -d '{"name": "John Updated", "email": "john.updated@example.com"}'

Удаление пользователя

curl -X DELETE http://localhost:8080/api/users/1

Health check

curl http://localhost:8080/health

Получение метрик

curl http://localhost:8080/metrics

🔧 Конфигурация

Переменные окружения

Переменная По умолчанию Описание
LOG_LEVEL info Уровень логирования (debug, info, warn, error)
PORT 8080 Порт для HTTP сервера

📈 Метрики Prometheus

Микросервис предоставляет следующие метрики:

  • http_requests_total - общее количество HTTP запросов
  • http_request_duration_seconds - длительность HTTP запросов
  • http_requests_in_flight - количество активных запросов

Доступ к метрикам

  1. Prometheus: http://localhost:9090
  2. Grafana: http://localhost:3000 (admin/admin)
  3. Метрики сервиса: http://localhost:8080/metrics

🛡️ Rate Limiting

Сервис ограничивает количество запросов:

  • Лимит: 1000 запросов в секунду
  • Burst: 5000 запросов
  • Ответ при превышении: HTTP 429 (Too Many Requests)

🔄 Graceful Shutdown

Сервис поддерживает graceful shutdown:

# Отправка сигнала SIGTERM
kill -TERM <pid>

# Или SIGINT через Ctrl+C в консоли

При получении сигнала сервис:

  1. Прекращает принимать новые соединения
  2. Завершает обработку текущих запросов
  3. Корректно освобождает ресурсы
  4. Завершает работу

🧪 Тестирование

Запуск тестов

make test
# или
go test ./...

Сборка

make build
# Скомпилированный бинарный файл будет в bin/server

Очистка

make clean

🐳 Docker

Сборка образа

docker build -t user-microservice .

Запуск контейнера

docker run -d \
  -p 8080:8080 \
  -e LOG_LEVEL=debug \
  --name user-service \
  user-microservice

Docker Compose

# Запуск всех сервисов
docker-compose up -d

# Просмотр логов
docker-compose logs -f app

# Остановка всех сервисов
docker-compose down

# Пересборка и запуск
docker-compose up -d --build

📝 Логирование

Сервис использует структурированное логирование через zerolog. Формат логов:

  • Консольный вывод с цветами при локальной разработке
  • JSON формат в контейнерах
  • Уровни логирования: debug, info, warn, error

🚨 Обработка ошибок

  • Централизованная обработка HTTP ошибок
  • Асинхронное логирование ошибок
  • Детализированные сообщения об ошибках для клиентов

📄 Лицензия

MIT License

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages