Liteset
Liteset — это асинхронный порт Apache Superset, переписанный с Flask/WSGI на Litestar/ASGI.
Проект сохраняет полную обратную совместимость с существующими установками Apache Superset: схема БД метаданных, HTTP API, контракт WebSocket и фронтенд остаются неизменными. Останавливаешь Superset, ставишь Liteset на ту же базу — и продолжаешь работать с теми же дашбордами, датасетами, пользователями и ролями.
Содержание
- Мотивация
- Целевая архитектура
- Технологический стек
- Гарантии совместимости
- Структура проекта
- Установка и запуск
- Тестирование
- Лицензия
Мотивация
Исторически Apache Superset построен на Flask/WSGI и работает под Gunicorn с pre-forked процессами. У такой модели три фундаментальных ограничения:
- Блокирующий I/O. Во время длинного запроса к аналитической БД воркер сидит idle и не обслуживает другие запросы.
- Высокий memory footprint. Каждый воркер несёт копию всего приложения и собственный пул соединений к БД метаданных.
- Ограниченный параллелизм. Число одновременных запросов жёстко ограничено
процессы × потоки.
Liteset убирает эти узкие места, переводя весь веб-слой на async ASGI-модель. Ожидаемый результат — рост RPS в 2–3 раза на IO-bound нагрузках и ощутимое снижение рез идентной памяти за счёт перехода с pre-forked процессов на единый event loop.
Целевая архитектура
Сервер Liteset спроектирован по принципам Clean Architecture. Приложение разбито на четыре слоя; зависимости идут строго внутрь — внутренние слои никогда не импортируют внешние.
| Слой | Ответственность | Реализация |
|---|---|---|
| Presentation | Контроллеры, DTO, сериализация, авторизационные предикаты | superset/controllers/, superset/schemas/, superset/guards/ — async def хендлеры Litestar, DTO на msgspec.Struct, Guards для RBAC |
| Business Logic | Бизнес-правила (validate() → run()) | superset/commands/ — AsyncBaseCommand, framework-независимые Command-классы |
| Data Access | Доступ к данным через SQLAlchemy 2.0 Select API | superset/db/base_dao.py, superset/db/daos/ — BaseAsyncDAO[T] с AsyncSession в конструкторе |
| Infrastructure | Middleware, DI, конфигурация, DB engine | superset/middleware/, superset/dependencies.py, superset/config.py |
Технологический стек
| Категория | Компонент | Роль |
|---|---|---|
| ASGI-фреймворк | Litestar | Роутинг, DI, OpenAPI, Guards, Middleware |
| ASGI-сервер | Uvicorn + uvloop | Event loop на libuv |
| ORM | SQLAlchemy 2.0 (Async) | Декларативные модели, запросы к БД |
| Драйвер метаданных | asyncpg / aiosqlite | Async-доступ к БД метаданных |
| Сериализация | msgspec | DTO + валидация, заменяет Marshmallow и Pydantic v1 |
| Конфигурация | pydantic-settings | Типизированная конфигурация, совместимая с superset_config.py |
| Миграции | Alembic (psycopg2, sync) | Схема БД унаследована 1:1 от Superset 6.0.0 |
| Фоновые задачи | Celery | Не меняется (ортогональна HTTP-слою) |
| WebSocket | Native Litestar | Заменяе т отдельный Node.js-сервис superset-websocket |
| Кэш | Redis (redis-py async) | Per-request cache, кэш auth-пользователей, async events |
| Логирование | structlog | Структурный JSON-лог |
Гарантии совместимости
Liteset — это drop-in замена Apache Superset 6.0.0 на уровне бэкенда. Зафиксированы три инварианта:
1. БД метаданных
Схема таблиц метаданных (ab_user, ab_role, dashboards, slices, tables, dbs, query, saved_query, report_schedule и др.) унаследована без изменений. Alembic-ревизии перенесены целиком. Существующая инсталляция Superset мигрируется простой подменой бэкенда — без superset db upgrade.