Ответ
На моем последнем проекте — высоконагруженном 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), оптимизацию запросов к БД и асинхронную обработку фоновых задач.
Ответ 18+ 🔞
А, слушай, вот тебе реальная история из жизни. На моём прошлом проекте — это был такой высоконагруженный B2B SaaS — мы в день обрабатывали ~300 миллионов событий. Ёпта, цифры просто овердохуища. А пики, представляешь, доходили до ~12 000 RPS (запросов в секунду) на основном шлюзе. Там уже не до кофе-брейков, там терпения ноль ебать, если что-то ляжет.
Архитектура и метрики:
- Стек: Микросервисы на PHP (Laravel/Lumen) и Go, которые между собой через gRPC и RabbitMQ болтались.
- Инфраструктура: Всё в Kubernetes, конечно. Автоматическое масштабирование (HPA) по CPU и своим кастомным метрикам — без этого просто пизда рулю.
- Ключевые метрики, за которыми мы в Grafana/Prometheus глаз не спускали:
- Latency: P95 времени ответа API — меньше 150 мс. Больше — уже хуй с горы, начинаются жалобы.
- Error Rate: Меньше 0.1% для 5xx ошибок. Иначе доверия ебать ноль у клиентов.
- Traffic Patterns: Чёткие пики в рабочие часы по UTC. Нагрузка ночью в три раза ниже — можно хоть немного выдохнуть.
Вот, смотри, как мы метрики в 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, запросы к базе оптимизированы до предела, а всё тяжёлое — в асинхронные фоновые задачи. Иначе бы просто накрылись медным тазом в первый же час пика.