We detected you are likely not from a Russian-speaking region. Would you like to switch to the international version of the site?

К списку статей

Объединение очередей RabbitMQ между Symfony и FastAPI: синхронные задачи, обработка событий и мониторинг через Prometheus + Grafana

В современном мире веб-приложений, обработка задач, требующих ресурсов или выполняемых асинхронно, является критически важной задачей. Данная статья посвящена разработке эффективного решения, объединяющего две популярные PHP-фреймворка – Symfony и Python-фреймворк FastAPI – через централизованную очередь сообщений RabbitMQ. Мы рассмотрим архитектуру системы, преимущества использования выбранных технологий, примеры реализации и интеграции с системами мониторинга.

Архитектура системы

Предлагаемая архитектура основана на использовании RabbitMQ в качестве брокера сообщений. Symfony будет использоваться для обработки запросов, инициирующих задачи в очереди, а FastAPI – для обработки этих задач асинхронно. Это позволяет разделить логику обработки запросов и выполнение сложных операций, повышая отказоустойчивость и масштабируемость системы.

Основные компоненты:

  • Symfony (PHP): Отвечает за обработку HTTP-запросов, валидацию данных и отправку сообщений в очередь RabbitMQ.
  • FastAPI (Python): Обрабатывает сообщения из очереди RabbitMQ, выполняет необходимые операции и сохраняет результаты.
  • RabbitMQ: Брокер сообщений, обеспечивающий надежную передачу сообщений между Symfony и FastAPI.
  • База данных (например, PostgreSQL): Для хранения данных, связанных с задачами и их результатами.
  • Prometheus: Система мониторинга, собирающая метрики с компонентов системы.
  • Grafana: Инструмент визуализации данных, позволяющий отображать метрики Prometheus в удобном виде.

Выбор технологий и обоснование

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

Symfony: Популярный PHP-фреймворк, обладающий богатым функционалом и активным сообществом. Предоставляет удобные инструменты для разработки веб-приложений и интеграции с различными системами.

FastAPI: Современный высокопроизводительный Python-фреймворк, основанный на стандартных подсказках типов Python. Он обеспечивает быструю разработку API и интеграцию с различными сервисами.

Prometheus + Grafana: Сочетание Prometheus и Grafana позволяет создать эффективную систему мониторинга, отслеживающую производительность всех компонентов системы. Это позволяет оперативно выявлять и устранять проблемы.

Пример реализации (Symfony - отправка сообщения в RabbitMQ)


isOpen() ? $connection->getConnection() : $connection->createConnection();
        
        $channel->assertExchange('my_exchange', 'direct');
        
        // Создание сообщения
        $message = new BinaryMessage('Hello from Symfony!');
        
        // Отправка сообщения
        $channel->send($message, 'my_exchange', 'my_routing_key');

        return new Response('Message sent to RabbitMQ!');
    }
}

Пример реализации (FastAPI - обработка сообщения из RabbitMQ)


from fastapi import FastAPI
from pika import connection

app = FastAPI()

@app.on_event('startup')
async def startup_event():
    connection.setup_logging()
    connection_params = connection.Params(
        host='localhost',
        port=5672,
        username='guest',
        password='', # Или ваш пароль
        virtual_host='', 
    )

    connection_ = connection.Factory(connection_params).connect()
    channel = connection_.channel()
    channel.assert_queue('my_queue', auto_delete=False)

    @channel.on_message
    async def callback(ch, method, properties, body):
        message_content = body.decode('utf-8')
        print(f'Received message: {message_content}')
        # Обработка сообщения


if name == 'main':
    import uvicorn
    uvicorn.run(app, host='0.0.0.0', port=8000)

Мониторинг с помощью Prometheus и Grafana

Для мониторинга состояния компонентов системы мы используем Prometheus для сбора метрик и Grafana для их визуализации. В Prometheus можно собирать метрики, такие как количество сообщений в очереди, время обработки задач, загрузка CPU и памяти и т.д. Grafana позволяет создавать дашборды, отображающие эти метрики в удобном виде.

Для интеграции Prometheus с Symfony и FastAPI можно использовать различные библиотеки и инструменты. Например, можно использовать Symfony Messenger для отправки метрик в Prometheus или добавить API-эндпоинты в FastAPI, которые возвращают метрики в формате, понятном Prometheus.

Соответствие законодательству РФ

При разработке системы необходимо учитывать требования законодательства РФ в области защиты персональных данных (ФЗ-152) и информационной безопасности (ФЗ-152). Необходимо обеспечить защиту данных, передаваемых через RabbitMQ, и соблюдать требования к хранению и обработке персональных данных. Рекомендуется использовать шифрование данных при передаче и хранении, а также реализовать механизмы контроля доступа к данным.

Заключение

Предложенное решение позволяет эффективно объединить Symfony и FastAPI через RabbitMQ, обеспечивая асинхронную обработку задач, высокую надежность и масштабируемость системы. Интеграция с Prometheus и Grafana позволяет оперативно отслеживать производительность системы и выявлять проблемы. Соблюдение требований законодательства РФ гарантирует безопасность и конфиденциальность данных.

РыбинскЛАБ – ваш надежный партнер в разработке сложных и масштабируемых веб-приложений. Мы предлагаем полный спектр услуг: от проектирования архитектуры до разработки, тестирования и внедрения. Свяжитесь с нами для обсуждения вашего проекта!

Материал подготовлен и отредактирован для практического применения. Перед внедрением в продакшен проверьте код и команды на своём окружении.

Поделиться материалом

Нужна сложная backend-разработка?

Проектирование архитектуры, PHP/Python backend, интеграции API, боты, автоматизация и оптимизация существующих систем.

Обсудить проект
Поддержать проект