Ответ
На моем последнем проекте — высоконагруженном B2B SaaS-сервисе — мы обрабатывали в среднем ~300 миллионов событий в день. Пиковая нагрузка достигала ~12 000 RPS (запросов в секунду) на основном API-шлюзе.
Архитектура и метрики:
- Стек: Микросервисы на PHP (Laravel/Lumen) и Go, взаимодействующие через gRPC и RabbitMQ.
- Инфраструктура: Kubernetes-кластер, автоматическое горизонтальное масштабирование (HPA) на основе CPU и кастомных метрик.
- Ключевые метрики, которые мы отслеживали в Grafana/Prometheus:
- Latency: P95 времени ответа API — < 150 мс.
- Error Rate: < 0.1% для 5xx ошибок.
- Traffic Patterns: Ярко выраженные пики в рабочие часы по UTC, нагрузка в 3 раза выше, чем ночью.
Пример кода для сбора метрик в PHP-сервисе:
// Использование библиотеки promphp/prometheus_client_php
$histogram = $registry->getOrRegisterHistogram(
'api',
'request_duration_seconds',
'HTTP request duration in seconds',
['endpoint', 'method']
);
$start = microtime(true);
// ... логика обработки запроса ...
$duration = microtime(true) - $start;
$histogram->observe($duration, [$request->path(), $request->method()]);
$counter = $registry->getOrRegisterCounter('api', 'requests_total', 'Total requests', ['endpoint']);
$counter->inc([$request->path()]);
Основной задачей было обеспечить стабильность и низкую задержку при таком объеме данных, для чего мы активно использовали кэширование (Redis), оптимизацию запросов к БД и асинхронную обработку фоновых задач.