Проект: высоконагруженный HTTP-сервис на Go, который принимает метрики, выполняет онлайн-аналитику и разворачивается в Kubernetes.
Сервис принимает потоковые метрики от IoT-устройств, считает агрегаты в реальном времени и выявляет аномалии.
- Service: HTTP-сервис на Go для приема метрик
- Redis: кэш для метрик
- Analytics: rolling average и детекция аномалий по z-score
- Prometheus: сбор и экспорт метрик
- Kubernetes: оркестрация и автоскейлинг через HPA
- Go 1.22+
- Docker
- Kubernetes (Minikube/Kind) или доступ к облачному кластеру
- kubectl
- Taskfile
# Установка зависимостей
go mod download
# Запуск Redis локально
docker run -d -p 6379:6379 redis:7-alpine
# Запуск сервиса
task run# Запуск Minikube
minikube start --cpus=2 --memory=4g
# Включение метрик сервера для HPA
minikube addons enable metrics-server# Сборка Docker образа
task docker:build
# Загрузка в Minikube
minikube image load go-service:latest# Развертывание всех компонентов
task k8s:deploy
# Проверка статуса
kubectl get pods,svc,hpa# Port-forward для доступа
kubectl port-forward service/go-service 8080:80
# Тестирование
curl http://localhost:8080/health
curl http://localhost:8080/analyze
# Отправка метрики
curl -X POST http://localhost:8080/metrics \
-H "Content-Type: application/json" \
-d '{"timestamp": 1234567890, "cpu": 45.5, "rps": 1500}'POST /metrics- прием метрик (JSON: timestamp, cpu, rps)GET /analyze- получение аналитики (rolling average, anomaly stats)GET /health- проверка доступности (health check)GET /metrics- метрики Prometheus
# Установка Prometheus + Grafana через Taskfile (Helm обязателен)
task monitoring:setup
# Доступ к Prometheus UI
kubectl port-forward svc/prometheus-kube-prometheus-prometheus 9090:9090 -n monitoring# Доступ к Grafana (после установки выше)
kubectl port-forward svc/prometheus-grafana 3000:80 -n monitoring
# Логин: admin, пароль: admin123# Установка Locust
pip3 install locust
# Запуск теста (1000 RPS, 5 минут)
task test:load
# Или через kubectl port-forward
kubectl port-forward service/go-service 8080:80 &
task test:loadПараметры нагрузочного теста можно задавать через переменные окружения:
task test:load SERVICE_URL=http://localhost:8080 RPS=1000 DURATION=300ApacheBench (если установлен):
task test:ab SERVICE_URL=http://localhost:8080 TOTAL_REQUESTS=50000 CONCURRENCY=100.
├── cmd/
│ └── service/ # Основной сервис
├── internal/
│ ├── analytics/ # Rolling average и anomaly detection
│ ├── cache/ # Redis клиент
│ └── metrics/ # Prometheus метрики
├── k8s/ # Kubernetes манифесты
│ ├── deployments/
│ ├── services/
│ ├── configmaps/
│ ├── hpa/
│ └── ingress/
├── scripts/ # Скрипты развертывания
└── xtemp/ # Временная документация (gitignored)