Highload — это не только про миллионы пользователей. Это про предсказуемость, отказоустойчивость и стоимость ошибки. Когда ваша система обрабатывает 1000+ запросов в секунду (RPS), каждая непродуманная деталь превращается в инцидент.
В этой статье команда AXIIOM делится практическим опытом: что работает, а что нет, как выбирать между монолитом и микросервисами, строить кэширование, балансировку и оркестрацию. И главное — как не наломать дров на старте.
Highload начинается с архитектурных принципов: масштабируемость (способность расти горизонтально без переписывания кода); отказоустойчивость (выход одного сервера не должен ронять всю систему); наблюдаемость (метрики, логи и трейсы каждой транзакции); асинхронность (очереди и события вместо блокировок).
Начинать лучше с хорошо структурированного монолита, а микросервисы вводить по мере необходимости. Монолит — простой деплой, лучшая производительность на низкой нагрузке, ACID-транзакции. Подходит для команды до 10 разработчиков и нагрузки до 1000 RPS. Микросервисы — независимое масштабирование, слабые связи, но выше DevOps-нагрузка. Оправданы от 1000 RPS и команде от 20 человек.
Компромисс: модульный монолит с чёткими доменными границами. При росте нагрузки горячие модули выносятся в отдельные сервисы постепенно.
Используем L7-балансировку (nginx, HAProxy) — она даёт гибкость по заголовкам, cookies, URL-роутингу. Health Check: балансировщик стучится в /health каждого бэкенда. Circuit Breaker (Hystrix, Resilience4j): при превышении порога ошибок клиент перестаёт слать запросы и возвращает fallback.
Пример из AXIIOM: в платёжной системе с пиками 3000 RPS circuit breaker для сервиса банка-эквайера переключал трафик на резервного при проблемах. Процент отказов упал с 5% до 0.3%.
Алгоритмы: Round Robin (простой), Least Connections (для длительных запросов), Random (для stateless бэкендов).
Уровни: CDN (статику, 1-24ч), HTTP-кэш Nginx (страницы для неавторизованных, 1-60мин), локальный кэш приложения (повторяющиеся запросы, 5-30сек), Redis (сессии и частые объекты, 30сек-1ч), БД-кэш (InnoDB buffer pool).
Правила: кэшируй как можно выше (ближе к клиенту); не кэшируй персонализированный контент; для Redis используй maxmemory-policy allkeys-lru и кластеризацию. Cache stampede — решается через SETNX или случайное TTL.
Кейс AXIIOM: для онлайн-кинотеатра с 2 млн DAU настроили многоуровневое кэширование: CDN (постеры), Redis (описания, рейтинги), локальный кэш в API. 98% запросов к каталогу из кэша, нагрузка на базу упала на 90%.
Kubernetes — стандарт для highload: HPA (Horizontal Pod Autoscaler) по CPU, памяти или кастомным метрикам; самовосстановление; декларативность.
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: payments-hpa
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: payments
minReplicas: 3
maxReplicas: 20
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 70Что важно: stateless приложения, graceful shutdown, readiness и liveness probe. Когда K8s избыточен: меньше 5 микросервисов и нагрузки <100 RPS.
Три паттерна: Master-Replica (чтение/запись, read-heavy), шардирование по ключу (горизонтальное), NewSQL (CockroachDB, TiDB). Начинаем с PostgreSQL + реплики чтения. Когда реплики перестают справляться — шардирование на уровне приложения.
Кейс: для B2B платформы с 2000 записей/сек шардировали таблицу счетов на 64 шарда PostgreSQL с consistent hashing.
Синхронные вызовы убивают highload. Очереди нужны для: обработки изображений, рассылок, логирования, компенсационных транзакций. Выбор: Redis Streams (простые задачи), Kafka (высокая нагрузка, хранение событий), RabbitMQ (worker-очереди).
Три столпа: метрики (Prometheus + Grafana) — CPU, память, RPS, latency p50/p95/p99; логи (ELK или Loki) — ошибки и события; трейсинг (Jaeger, Zipkin) — распределённая трассировка. Внедряйте с первого дня.
Ранняя оптимизация (микросервисы до 100 пользователей); игнорирование backpressure (OOM и падение системы); отсутствие нагрузочного тестирования до релиза; единая БД для аналитики и транзакций; необратимые миграции без плана отката.
Анализ нагрузочных профилей (пиковые RPS, чтение/запись); выбор архитектурного стиля (модульный монолит для MVP); прототипирование узких мест (схема БД, кэширование); нагрузочные тесты (K6, JMeter) до написания основного кода; CI/CD с автотестами производительности; пост-релизный мониторинг.
Пример из портфолио: платёжный шлюз для агрегатора такси с пиком 15 000 RPS. API на Go в K8s, Redis Cluster (10 нод), Kafka + ClickHouse для аналитики, nginx L7 с circuit breaker. Результат: p99 latency 47 мс, два года без сбоев.
Highload — это подход, а не технология. Начинайте с монолита, проектируйте модульно. Измеряйте всё. Балансировка и отказоустойчивость — с первого дня. Кэшируйте многоуровнево. Тестируйте нагрузкой до релиза.
AXIIOM — надёжные highload-решения, которые масштабируются с вашим бизнесом.