С какими драйверами или брокерами очередей сообщений вы работали?

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

Ответ

В проектах разного масштаба я использовал несколько систем. Выбор всегда зависел от требований к надежности, пропускной способности и сложности маршрутизации.

  1. Redis (как очередь):

    • Когда использовал: Для высокопроизводительных, но не критичных к потере сообщений задач внутри одного сервиса. Например, для кэширования, фоновой отправки email или обработки быстрых фоновых задач в веб-приложении.
    • Пример: В одном из микросервисов на Node.js мы использовали bull на основе Redis для обработки PDF-генерации.
      // Producer (Node.js с библиотекой bull)
      const Queue = require('bull');
      const pdfQueue = new Queue('pdf generation');
      await pdfQueue.add('generate-report', { userId: 123, template: 'annual' });
  2. RabbitMQ:

    • Когда использовал: В сложных распределенных системах, где важны гарантии доставки, persistence сообщений, dead letter очереди и сложная маршрутизация (exchange, routing keys). Например, для интеграции между микросервисами заказов и доставки.
    • Плюсы: Надежность, гибкая модель обменников (direct, topic, fanout).
  3. Apache Kafka:

    • Когда использовал: Для потоковой обработки больших объемов данных (data pipelines), событийного архивирования (event sourcing) или когда требовалась возможность повторной обработки истории сообщений множеством потребителей.
    • Ключевое отличие: Это не просто очередь, а распределенный лог commit-ов. Сообщения не удаляются после чтения.

Вывод по выбору: Для большинства задач фоновой обработки в веб-приложениях хватало Redis. RabbitMQ был выбором для надежной межсервисной коммуникации в микросервисной архитектуре.