Найти тему

Как обработать миллион запросов день, Или как я выбирал фреймворк для крупного проекта

Оглавление

Немного вводных:
- Статья о питоне
- В статье есть мемы
- Вся информация не совсем объективная, я же не на хабре это пишу.

При каждом запуске нового PET-проекта встает резонный вопрос: "Как выбрать фреймворк так, чтобы он подходил под мои задачи, не имел ничего лишнего".

Стоит понять, что фреймворков много - а я у мамы один.

Общий обзор фреймворков

1. Django - большой и толстый:

До недавнего времени неповоротливый, wsgi-синхронный фреймворк, который хоть и обрабатывал запросы быстро, но обрабатывал их последовательно.

Из преимуществ:

  • Встроенный Debug-режим, который упрощает разработку
  • Поддержка Rest Framework - фреймворк, добавляющий REST архитектуру
  • Встроенная защита от всех шаблонных атак - csrf, xss, SQL Injection
  • Мощный инструмент - Django ORM
  • Большая кодобаза и коммьюнити
  • Реализация MVC-паттерна, что упрощает разработку и нахождение файлов
  • Использование LazyQuery запросов (пунктик про ORM), что позволяет оптимизировать кодобазу и

Из недостатков:

  • Не подходит под микросервисную архитектуру, так как является по-умолчанию довольно большим фреймворком
  • Не подходит под "быстро накидать простейший сервис", если у вас установлена джанга - у вас установлены и 400 миллионов её зависимостей.
  • Отсутствие полноценного ASGI в дефолтном django. (Однако есть django-channels, и сейчас более-менее появляется реализация async-to-sync, sync-to-async).

Кратко резюмируя -

Джанго при правильном подходе может вывезти и 100, и 200, и 1000 тысяч запросов в день, но для этого требуется правильный подход. Оптимизация запросов, булк-запросы

2. Flask - маленькое и гибкое:

Фреймворк для создания веб-приложений, который представляет собой ароматизированную версию Python. С ним вы можете создать веб-сервисы так вкусные, что пользователи будут просто хотеть откусить от экрана! Flask, подобно истинной гусятине, легкой и нежной, но при этом полна вкуса и приятно утоляет вашу голодную потребность в создании веб-приложений. Берите Flask и наслаждайтесь вкусами веб-разработки, один глоток за другим!

3. FastAPI - автомат калашникова в мире фреймворков:

Преимущества:

- Очень быстрый фреймворк, оптимизированный для высоконагруженных систем и быстрой разработки.

- Основан на асинхронном программировании, что способствует эффективному использованию ресурсов и обеспечивает высокую производительность.

- Использование типизации данных с помощью Python 3.7+ type hints делает код более надежным и понятным.

- Имеет встроенную поддержку автоматической генерации интерфейса API (Swagger и ReDoc).

- Хорошо документирован и активно развивается.

Недостатки:

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

- Из-за своей асинхронной природы, может потребоваться больше опыта и понимания в асинхронном программировании для эффективного использования.

4. Pyramid:

Малоизвестный, но быстро набирающий популярность фреймворк

Преимущества:

- Гибкий фреймворк, который позволяет разработчику принимать свои собственные решения и выборы в отношении архитектуры и компонентов.

- Обеспечивает широкий набор инструментов и библиотек для создания сложных веб-приложений различных масштабов.

- Хорошо масштабируется и поддерживает различные модели разработки.

- Имеет гибкую систему шаблонов и мощный механизм расширений.

Недостатки:

- Из-за своей гибкости и наличия большого набора инструментов, начинающим разработчикам может потребоваться больше времени и усилий для изучения и освоения Pyramid.

- Некоторые разработчики могут предпочесть фреймворки, которые предоставляют больше стандартизированных компонентов и решений "из коробки".

Надеюсь, это позволит вам быть более осведомленным при выборе фреймворка для вашего проекта! Если у вас есть еще вопросы, не стесняйтесь задавать.

Кратко резюмируя всё-всё:

Для особо-крупных проектов с огромным охватом я рекомендую использование `FastAPI` в связке с микросервисной архитектурой. Он быстрый, гибкий и асинхронный.