ПГК ДИДЖИТАЛ 3 Создаем цифровые продукты для логистики: наши решения удобны для клиентов и помогают выстраивать логистику внутри компании Компания специализируется на разработке и внедрении цифровых продуктов и ПО для клиентских и внутренних IT-решений Наш портфель насчитывает свыше 150 IT и цифровых проектов
Определяемся с архитектурой 9 Микросервисы Монолит Масштабирование Независимое Всё вместе Оверхед на разработку хорошего протокола Есть Нет Деплой и откат Сложный Простой Мерж-конфликты Минимальны Частые Накладные расходы на RPC (CPU, RAM, сеть) Есть Нет Graceful degradation Есть Нет Поддержка разных языков/фреймворков для разных частей Есть Нет
— ок, но… 12 • Слишком слабая интеграция с FastAPI. • Нужно описывать одни и те же данные дважды: в Pydantic и SQLAlchemy ORM. • Сортировка, пагинация, фильтры – всё руками. • Постоянно таскать за собой engine или городить костыли.
TortoiseORM 16 Плюсы: • Удобнее алхимии • Очень быстрый Минусы: • Несколько маргинален • Слабый движок миграций • Не получилось подключить базы через ODBC Делался под впечатлением от Django (и разработчики это не скрывают) from tortoise.models import Model from tortoise import fields class Train(Model): id = fields.IntField(pk=True) name = fields.TextField()
GINO 17 Плюсы: • Хорошая интеграция с FastAPI Минусы: • Только Postgres • Пока недостаточно стабилен • Слабая документация • Нет готовых админок Делался под впечатлением от Django (и разработчики это скрывают) from gino import Gino db = Gino() class Train(db.Model): __tablename__ = 'trains' id = db.Column(db.Integer(), primary_key=True) name = db.Column(db.Unicode(), default='noname')
aerich 20 • Работает с TortoiseORM • Не поддерживает миграции данных (только DDL) • Не умеет создавать миграции по изменениям моделей Слабоват (аэрих) (аэрич) (эрих)
SQLAlchemy Admin (sqladmin) 23 • Не имеет встроенного механизма авторизации (об LDAP говорить не приходится) • Слабо кастомизируема • Долго и дорого дорабатывать
FastAPI-admin 24 • Сделан на Tabler UI • Есть разделение на Free и Pro версии (тревожный звоночек!) • В бесплатной версии нет управления правами и S3 • Тоже слабая в плане кастомизации
Django 28 • «Батарейки в комплекте» • Решает проблемы с базой, миграциями и админкой • REST API (DRF), управление пользователями, вебсокеты (channels), капча • Гигантское количество компонентов для решения (практически) любых задач Хороший инструмент для решения типовых задач
Начинаем с ORM 30 • $ django-admin startproject project . • $ django-admin startapp app • Добавить django.setup() Переписать модели и все вызовы к ним с Алхимии на Django Сделать «фейковую» миграцию
Начали переписывать API по одному методу 33 Starlette Router (ASGI) FastAPI (/v1) API (старое) Django (/admin, /v1/method1, /v1/method2, …) ORM + Миграции Админка API DRF (новое) Starlette StaticFiles (/static) + Django Channels dev server (Daphne) Можно было использовать djantic
Мы полностью перешли на Django 35 • Мы получили огромную базу переиспользуемых компонентов • Админка досталась нам «бесплатно» с ORM • Мы не отказываемся от FastAPI во вспомогательных микросервисах • Разработка ускорилась в ~2.5 раза
НАШИ СТРАНИЦЫ В СОЦСЕТЯХ И НА СПЕЦИАЛИЗИРОВАННЫХ ПЛОЩАДКАХ https://pgk.ru 105066, Москва, ул. Новорязанская, 24 +7 495 663 01 01 8 800 775 16 16 [email protected] Хабр НАШИ СТРАНИЦЫ В СОЦСЕТЯХ И НА СПЕЦИАЛИЗИРОВАННЫХ ПЛОЩАДКАХ https://pgk.ru 105066, Москва, ул. Новорязанская, 24 +7 495 663 01 01 8 800 775 16 16 [email protected] Хабр @gamepad64 Мой YouTube-канал Александр Шишенко Руководитель команды разработчиков (тимлид)