Будуйте масштабовані додатки за допомогою Flask, Celery, RabbitMQ та Docker Compose

Celery: Дозволяє асинхронну обробку завдань, розділяючи важкі завдання від основного циклу запит-відповідь, що підвищує чутливість додатку.

pic

У сучасну цифрову еру веб-додатки повинні мати здатність обробляти піки трафіку та складну обробку даних.

Масштабованість є основним фактором для забезпечення оптимальної продуктивності додатків.

Ця стаття надасть вам керівництво з побудови масштабованого додатку, використовуючи Flask (мікрофреймворк для Python), Celery (черга завдань), RabbitMQ (посредник повідомлень) та Docker Compose (для оркестрації контейнерів).

https://www.youtube.com/@halovina

Чому варто вибрати таку комбінацію?

  1. Flask: Легкий, гнучкий та простий у навчанні, підходить для створення простих та складних API і веб-додатків.
  2. Celery: Дозволяє асинхронну обробку завдань, розділяючи важкі завдання від основного циклу запит-відповідь, що підвищує чутливість додатку.
  3. RabbitMQ: Діє як надійний та ефективний посредник повідомлень між Flask та Celery додатками.
  4. Docker Compose: Спрощує управління та розгортання додатків і їх залежностей у ізольованих контейнерах.

Архітектура додатку

Ось огляд архітектури додатку, який ми будемо будувати:

[Клієнт] --> [Flask додаток] --> [RabbitMQ] --> [Celery робітники]
  1. Клієнт надсилає запит до Flask додатку.
  2. Flask надсилає завдання до RabbitMQ.
  3. Celery робітник отримує завдання з RabbitMQ і обробляє його асинхронно.

Кроки впровадження

Ось короткий опис кроків впровадження:

  1. Підготовка середовища: Переконайтеся, що Docker і Docker Compose встановлені.
  2. Створіть Flask додаток: Створіть простий Flask додаток, який приймає запити та надсилає завдання до Celery.
  3. Налаштуйте Celery та RabbitMQ: Налаштуйте Celery для підключення до RabbitMQ як брокера.
  4. Створіть Docker Compose файл: Визначте сервіси для Flask, Celery, RabbitMQ та Redis (опційно, для результатів Celery) у docker-compose.yml.
  5. Запустіть додаток: Використовуйте команду docker-compose up -d для запуску всього додатку.

Ось простий приклад docker-compose.yml:

version: "3.9"  
services:  
 rabbitmq:  
 image: rabbitmq:3-management  
 ports:  
 - "5672:5672"  
 - "15672:15672"  
 web:  
 build: ./web  
 ports:  
 - "5000:5000"  
 depends_on:  
 - rabbitmq  
 celery:  
 build: ./worker  
 command: celery -A tasks worker --loglevel=info  
 depends_on:  
 - rabbitmq  
 - web

(Переконайтеся, що структура директорій та Dockerfile для web і worker правильні)

Приклад коду (спрощений)

tasks.py (Для Celery):

from celery import Celery  

app = Celery('tasks', broker='amqp://guest@rabbitmq//')  

@app.task  
def long_task(x, y):  
 # Симуляція часозатратного завдання  
 import time  
 time.sleep(5)  
 return x + y

app.py (Для Flask):

from flask import Flask  
from tasks import long_task  

app = Flask(__name__)  

@app.route('/add//')  
def add(x, y):  
 task = long_task.delay(x, y)  
 return f"Завдання надіслано. Ідентифікатор завдання: {task.id}"

Переваги використання цієї архітектури

  1. Горизонтальна масштабованість: Легко додавати екземпляри робітників Celery для обробки більшої кількості завдань паралельно.
  2. Підвищена чутливість: Важкі завдання обробляються у фоновому режимі, тому додаток залишається чутливим до запитів користувачів.
  3. Ефективне управління завданнями: Celery надає механізми для управління чергами завдань, планування та моніторингу.
  4. Ізоляція середовища: Docker забезпечує консистентність середовища для розгортання та спрощує процес розгортання.

Висновок

Поєднавши Flask, Celery, RabbitMQ та Docker Compose, ви зможете створювати масштабовані, чутливі та зручні для управління веб-додатки.

Ця архітектура є ідеальною для додатків, які потребують асинхронної обробки та обробки високих навантажень.

Перекладено з: Build Scalable Applications with Flask, Celery, RabbitMQ, and Docker Compose

Leave a Reply

Your email address will not be published. Required fields are marked *