Repository navigation
Backend Development Stack
Anton Lamtev edited this page Mar 10, 2020
·
6 revisions
- HTTP сервер (обработка клиентских запросов)
- HTTP клиент (запросы к сторонним сервисам, например, к Github)
- База данных
- Драйвер для базы данных
- Формат данных для взаимодействия с клиентом
- Сериализация/десериализация
- Система сборки проекта и управления зависимостями
- Dependency Injection
- ORM (если выберем реляционную модель данных)
- Актуальность (использование в "кровавом" энтерпрайзе)
- Отсутствие многословности (минимум boilerplate кода)
- Способность эффективно утилизировать железо
- Простота использования
- Наличие опыта работы хотя бы у части участников (желательно)
- Open-source + лицензия, позволяющая свободно использовать в рамках некоммерческого проекта
-
Spring Boot over servlet container (classic)
- Классика: RestController'ы, thread and connection per request model. Потоки большую часть времени спят
- просто, проверено временем
- из коробки есть многое: DI, FasterXML Serialization/Deserialization
- Spring Data
- скучно
- не очень модно в эпоху неблокирующих технологий
-
Spring Boot Webflux
- Functional endpoints
- Reactor Netty
- Все плюсы предыдущего варианта
- Реактивно
- Non-blocking
- Минимум 2 участника проекта работали с этим
- Использует Reactor - популярную и удобную реализацию Reactive Streams
- Spring Data поддерживает R2DBC
- декларативно
- возможно сложновато?
-
Vert.x
- Интересная идея
- Non-blocking
- Есть реактивный драйвер для SQL
- Колбэки
- Абсолютно новая технология для всех участников команды
- Классно сочетается с Kotlin coroutines. Но опыта работы с колтином почти нет
- Kotlin далеко не стандарт в энтерпрайзе
-
Play framework with Akka Streams
- Очень круто
- Тоже куча интеграций с БД
- На Java очень многословно и неудобно
- Scala на приличном уровне владеет лишь 1 разработчик
- Сложно!
-
One-nio
- Очень быстро
- Есть сериализация
- Слишком низкоуровниево для нашего проекта. Придется много вещей делать самим
-
Netty
- По сути то же, что и one-nio
-
Reactor-Netty
- Добавлен Reactor, что облегчает вручную связать с R2DBC
- Все равно многое придется делать самим
Предварительно, будет что-то реляционное, потому что кажется, что предметная область вполне ложится на реляционную модель.
- PostgreSQL
- Почти все участники работали с ним
- Активно используется в индустрии
- Любые драйверы существуют
- MySQL
- По функциональности +- то же самое
- JDBC (classic)
- Проверено временем
- скучно
- blocking
- ADBA
- Уже не в моде
-
R2DBC
- Reactive Streams
- Non-blocking
- r2dbc-pool
- уже stable
- поддержано Spring Data
-
Vert.x Reactive
- Хорошо с Vert.x
- Пока preview
-
Vert.x JDBC
- Stable
- JDBC =(
- JSON
- Наверное остановимся на этом. Повсеместно используется. На фронте вообще стандарт
- XML
- Protobuf
- FasterXML Jackson
- По бэнчмаркам для JSON -- очень быстро
- Spring default
- GSON
- Медленнее
- Protobuf
- Излишне для нас
- HTTP framework preinstalled solution
- в one-nio своя быстрая реализация. Но пока нет причин так глубоко закапываться
- Maven
- декларативно
- некогда стандарт де факто
- длинющий xml
- Ant + Ivy
- прошлый век
- Gradle
- декларативно + императивно
- kotlin / groovy
- удобно
- становится все более популярным
Надо выбирать
- Java 14 (выходит уже в марте)
- Spring Boot Webflux over Reactor-Netty
- Functional endpoints
- Lombok
- R2DBC
- Spring Data
- pool
- PostgreSQL
- JSON
- FasterXML Jackson
- Gradle
Потому что это актуально, производительно, идеально сочетается друг с другом, декларативно, немногословно, есть опыт работы с этим. Соответствует всем предъявляемым требованиям.
Ближайший конкурент - традиционный Spring Boot, но это слишком скучно и уже не модно.
Vert.x - интересный вариант, но с ним никто из команды не работал. Плюс некоторые современные фичи еще пока на стадии preview.