Вопрос проверяет понимание типовой архитектуры backend-приложения и роли основных компонентов инфраструктуры.
Типичный backend-стек на Python включает веб-фреймворк (например FastAPI или Django), базу данных (Postgres), ORM для работы с данными, кэш (Redis), очередь задач (RabbitMQ или Redis) и контейнеризацию через Docker. Фреймворк отвечает за HTTP-запросы, база данных хранит данные, ORM упрощает доступ к ним. Кэш ускоряет работу, очередь выполняет фоновые задачи. Контейнеры упрощают запуск и деплой.
Backend-приложение обычно состоит из нескольких слоев, каждый из которых решает свою задачу.
Веб-фреймворк
Это основа приложения, которая:
обрабатывает HTTP-запросы
маршрутизирует их
формирует ответы
Примеры:
FastAPI
Django
Flask
Пример маршрута:
from fastapi import FastAPI
app = FastAPI()
@app.get("/users")
def get_users():
return {"status": "ok"}
База данных
Используется для хранения данных:
Postgres
MySQL
SQLite (для разработки)
ORM
Упрощает работу с базой:
SQLAlchemy
Django ORM
Пример:
user = session.query(User).filter(User.id == 1).first()
Кэш
Используется для:
ускорения чтения данных
уменьшения нагрузки на БД
Обычно используется Redis.
Очередь задач
Нужна для фоновых операций:
отправка email
обработка файлов
интеграции
Инструменты:
Celery
RQ
Контейнеризация
Docker используется для:
изоляции окружения
удобного деплоя
Типичный поток:
Клиент отправляет HTTP-запрос
Фреймворк принимает запрос
ORM обращается к БД
При необходимости используется кэш
Долгие задачи отправляются в очередь
Типовой стек backend-разработки строится вокруг фреймворка, базы данных и инфраструктурных сервисов. Такой подход позволяет масштабировать систему и разделять ответственность между компонентами.