Микросервис для управления пользователями с поддержкой 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 # Зафиксированные версии зависимостей
- Клонируйте репозиторий:
git clone <repository-url> .- Установите зависимости:
go mod download- Запустите сервис:
make run
# или
go run ./cmd/server- Соберите Docker образ:
make docker-build
# или
docker build -t user-microservice .- Запустите контейнер:
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
| Метод | 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 |
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/userscurl http://localhost:8080/api/users/1curl -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/1curl http://localhost:8080/healthcurl http://localhost:8080/metrics| Переменная | По умолчанию | Описание |
|---|---|---|
LOG_LEVEL |
info |
Уровень логирования (debug, info, warn, error) |
PORT |
8080 |
Порт для HTTP сервера |
Микросервис предоставляет следующие метрики:
http_requests_total- общее количество HTTP запросовhttp_request_duration_seconds- длительность HTTP запросовhttp_requests_in_flight- количество активных запросов
- Prometheus: http://localhost:9090
- Grafana: http://localhost:3000 (admin/admin)
- Метрики сервиса: http://localhost:8080/metrics
Сервис ограничивает количество запросов:
- Лимит: 1000 запросов в секунду
- Burst: 5000 запросов
- Ответ при превышении: HTTP 429 (Too Many Requests)
Сервис поддерживает graceful shutdown:
# Отправка сигнала SIGTERM
kill -TERM <pid>
# Или SIGINT через Ctrl+C в консолиПри получении сигнала сервис:
- Прекращает принимать новые соединения
- Завершает обработку текущих запросов
- Корректно освобождает ресурсы
- Завершает работу
make test
# или
go test ./...make build
# Скомпилированный бинарный файл будет в bin/servermake cleandocker build -t user-microservice .docker run -d \
-p 8080:8080 \
-e LOG_LEVEL=debug \
--name user-service \
user-microservice# Запуск всех сервисов
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