Перейти к основному содержимому

Инфраструктура и инструменты (RabbitMQ, Redis, Docker)

RabbitMQ и AMQP​

RabbitMQ — это брокер сообщений, использующий протокол AMQP 0-9-1.

  • Жизненный цикл сообщения: Producer -> Exchange -> Queue -> Consumer.
  • Типы Exchange:
    • Direct: Направляет сообщения по точному совпадению ключа маршрутизации.
    • Topic: Направляет сообщения по шаблону (с использованием * и #).
    • Fanout: Пересылает сообщения во все привязанные к нему очереди.
    • Headers: Использует заголовки сообщений вместо ключей маршрутизации.
  • Ack/Nack:
    • Ack (Acknowledge): Потребитель сообщает RabbitMQ, что сообщение обработано (можно удалить).
    • Nack (Negative Acknowledge): Потребитель сообщает RabbitMQ, что произошла ошибка (сообщение может быть возвращено в очередь или отброшено).
  • Durable vs Persistent: Durable-очередь переживает перезапуск брокера. Persistent-сообщения сохраняются на диск (при условии, что очередь тоже durable).
  • Pull vs Push: RabbitMQ обычно использует модель Push (брокер отправляет сообщения потребителям), но потребители также могут «забирать» сообщения через Pull с помощью basic.get.

Возможности Redis​

Redis — это хранилище данных в оперативной памяти, используемое как база данных, кэш и брокер сообщений.

  • Базовые типы данных: String, List, Set, Sorted Set, Hash.
  • Сложные типы данных: Bitmaps, HyperLogLogs, Geospatial, Streams.
  • Pub/Sub: Redis может выступать в качестве легковесного брокера сообщений, где издатели отправляют сообщения в каналы, а подписчики слушают их (модель «отправил и забыл»).
  • Безопасность: Redis предназначен для внутреннего использования. Он должен быть доступен только в доверенных сетях. Меры безопасности включают:
    • requirepass: Аутентификация.
    • rename-command: Отключение или переименование опасных команд (например, FLUSHALL).
    • bind: Ограничение доступа определёнными IP-адресами.

Docker и DevOps​

ENV vs ARG​

  • ARG: Используется только на этапе сборки образа. Недоступен в работающем контейнере.
  • ENV: Используется как при сборке, так и во время выполнения. Сохраняется в окружении контейнера.

Docker Volumes​

  • Anonymous Volume: Управляется Docker, сложно найти (например, /var/lib/docker/volumes/...).
  • Named Volume: Проще управлять и повторно использовать между контейнерами.
  • Bind Mount: Связывает конкретную директорию хоста с директорией контейнера (лучший вариант для разработки).

Производительность БД в Docker​

Запуск базы данных в Docker может иметь накладные расходы по производительности, особенно на macOS/Windows (из-за виртуальной машины и синхронизации файловой системы). На Linux скорость почти нативная, но тома по-прежнему необходимы для сохранения данных.

CI/CD (Continuous Integration / Continuous Deployment)​

  • Continuous Integration (CI): Частое слияние кода в основную ветку и запуск автоматизированных тестов.
  • Continuous Delivery (CD): Автоматическая подготовка кода к релизу, но финальное развёртывание выполняется вручную.
  • Continuous Deployment (CD): Каждое изменение, прошедшее автоматизированные тесты, автоматически развёртывается в продакшен.