Сравнение технологий - 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, но не поддерживает асинхронность и больше подходит для создания небольших прототипов, чем приложений с высокой нагрузкой.