Какой был трафик на последнем проекте?

«Какой был трафик на последнем проекте?» — вопрос из категории Софт-скиллы, который задают на 24% собеседований PHP Разработчик. Ниже — развёрнутый пример ответа, который можно адаптировать под свой опыт.

Ответ

На моем последнем проекте — высоконагруженном 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), оптимизацию запросов к БД и асинхронную обработку фоновых задач.