Skip to content

qutha/highload-final

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Высоконагруженный Go-сервис с ИИ-аналитикой в Kubernetes

Проект: высоконагруженный 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

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

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

# Установка зависимостей
go mod download

# Запуск Redis локально
docker run -d -p 6379:6379 redis:7-alpine

# Запуск сервиса
task run

2. Развертывание в Kubernetes

Подготовка Minikube

# Запуск 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

3. Доступ к сервису

# 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}'

API Endpoints

  • POST /metrics - прием метрик (JSON: timestamp, cpu, rps)
  • GET /analyze - получение аналитики (rolling average, anomaly stats)
  • GET /health - проверка доступности (health check)
  • GET /metrics - метрики Prometheus

Мониторинг

Prometheus

# Установка Prometheus + Grafana через Taskfile (Helm обязателен)
task monitoring:setup

# Доступ к Prometheus UI
kubectl port-forward svc/prometheus-kube-prometheus-prometheus 9090:9090 -n monitoring

Grafana

# Доступ к 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=300

ApacheBench (если установлен):

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)

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors