Сравнение технологий - pointownerr/Project-practic GitHub Wiki

Тема проекта: "Разработка серверной части 2D-навигатора для работы с объектами в российском программном продукте класса EAM"
2D-навигатор является логистической системой, интегрируемой в отечественную корпоративную информационную систему (КИС). Архитектура системы состоит из ядра, брокера и клиента:

Для разработки серверной части будут использоваться фреймворки и библиотеки python. Прототип архитектуры ПП с интегрированным компонентом 2D-навигатора:


Критерий Flask FastAPI Описание Обоснование
Производительность 0 1 2D-навигатору важны высокая производительность и быстрая обработка запросов, он интегрируется в высоконагруженную ЕАМ-систему с большим количеством сервисов и множеством активных пользователей и должен работать с большими объёмами данных (карты, маршруты, объекты). FastAPI считается одним из самых быстрых фреймворков и предлагает высокую производительность благодаря использованию асинхронных запросов и быстрым алгоритмам маршрутизации.
Межсетевой шлюз ASGI 0 1 ASGI — спецификация для создания асинхронных веб-приложений, управляемых событиями. WSGI — это стандарт для взаимодействия веб-приложений и серверов друг с другом. EAM-система поддерживает асинхронность, поэтому 2D-навигатор должен работать на ASGI-сервере. FastAPI использует ASGI-сервера по умолчанию и при необходимости использования асинхронности не нужно заниматься конфигурацией приложения с WSGI на ASGI. Flask работает лишь под WSGI.
Асинхронность 0 1 2D-навигатор должен уметь обрабатывать запросы асинхронно, чтобы справляться с высокой нагрузкой. В FastAPI всё заточено под асинхронность, есть встроенные асинхронные таски. Flask не поддерживает асинхронность.
Встроенный сервер разработки 1 0 Обеспечивает удобство разработки, так как не требует дополнительных установок и интеграций с сервером. Для продуктивного контура встроенные сервера не используются. У Flask есть встроенный сервер Werkzeug, FastAPI обычно используется с ASGI веб-сервером Uvicorn или с WSGI сервером Gunicorn, но встроенного сервера для разработки не имеет.
Поддержка PostgreSQL 1 1 Основная система, в которую будет внедряться 2D-навигатор, построена на СУБД PostgreSQL. Для 2D-навигатора будет использоваться та же БД, что и для других компонентов системы, а значит, важна совместимость фреймворка с СУБД. Оба фреймворка имеют полноценную поддержку работы с базами данных, включая PostgreSQL.
Работа с ORM 1 1 ORM оптимизирует запросы к базе данных и упрощает работу с данными, что является преимуществом для 2D-навигатора, который оперирует большими объёмами данных, в том числе файлами. У обоих фреймворков нет встроенных ORM, но у Flask есть расширение Flask-SQLAlchemy, а FastAPI совместим с любым ORM, который поддерживает стандарт Python для работы с базами данных (например, SQLAlchemy и GINO).
Разработка API-сервисов 1 2 Так как разрабатывается API для 2D-навигатора, фреймворк должен обладать многофункциональным инструментарием для проектирования API. FastAPI — это полнофункциональная платформа, которая предназначена для создания высокопроизводительных API с нуля и микросервисов. Flask тоже позволяет разрабатывать полноценные API, но больше предназначен для разработки веб-приложений и быстрых прототипов.
Поддержка веб-сокетов 1 2 Протокол WebSockets обеспечивает двустороннюю связь между клиентом и сервером, это необходимо для работы EAM-системы (в частности 2D-навигатора) в реальном времени, поскольку обеспечиваются мгновенные обновления и уведомления. Для работы с веб-сокетами в Flask можно использовать библиотеку Flask-SocketIO. FastAPI же предоставляет более развитую встроенную поддержку веб-сокетов из коробки. За счёт высокой производительности и асинхронности FastAPI соединения WebSocket могут обрабатываться параллельно, веб-сокеты — часто применяемый протокол в рамках именно асинхронных API.
Загрузка файлов на сервер 1 1 Основное назначение 2D-навигатора — это манипуляция графическим контентом, поэтому фреймворк должен обладать необходимыми инструментами для обмена файлами сервера с клиентом. Оба фреймворка имеют достаточный функционал для работы с файлами, в частности изображениями, позволяют сохранять файлы в отдельные папки и управлять ими.
Гибкость и масштабируемость 1 2 2D-навигатору важна масштабируемость для поддержания активной пользовательской базы и обеспечения трафика. Также необходимы гибкость и отсутствие утверждённой архитектуры для интеграции с другими компонентами системы и быстрой адаптации к изменениям в архитектуре системы. Оба фреймворка отличаются гибкостью, они легко интегрируются с другими библиотеками и сервисами. Flask позволяет легче масштабировать приложения в сравнении с FastAPI, но FastAPI поддерживает асинхронность, за счёт чего обрабатывается большое количество запросов одновременно.
Итого 7 12

Вывод: Для разработки серверной части 2D-навигатора и внедрения его в архитектуру высоконагруженной ЕАМ-системы больше подходит фреймворк FastAPI. Он работает с ASGI-серверами, такими как Uvicorn, и обеспечивает асинхронную обработку запросов, что критически важно для работы 2D-навигатора с большим пулом пользователей. FastAPI отличается одним из самых высоких показателей скорости и производительности, благодаря чему будет осуществляться работа с большим объёмом данных. Приложения на FastAPI гибкие, поэтому функционал 2D-навигатора можно будет легко интегрировать в кластер серверов, на которых работает EAM-система. Также фреймворк обладает всеми необходимыми инструментами для реализации требуемого функционала API, включая работу с файлами, веб-сокетами, ORM и PostgreSQL. Flask тоже обладает хорошей базой для создания API, но не поддерживает асинхронность и больше подходит для создания небольших прототипов, чем приложений с высокой нагрузкой.