Речь пойдет о выборе и использовании fullstack-инструментария после 10 лет занятия разработкой на проектах, из которых с нуля я начинал только 2.
Стек технологий очень важен, он выбирается один раз на всю жизнь проекта, а некоторые проекты вдруг обнаруживают что заменить mongodb на postgresql когда база данных уже весит несколько гигабайт и активно используется очень дорого, а найти разработчиков со знанием graphql очень сложно.
Поэтому при выборе очень часто принято отталкиваться от рынка. Ведь правда - чем больше хайпа вокруг фреймворка, тем проще на нем разрабатывать и искать исполнителей.
Я люблю Ruby on Rails, но выбрать его для нового проекта я бы не хотел, потому что замена разработчика будет стоить очень дорого.
Как бы мне не был отвратителен React и как бы у меня не болели глаза от миллионов строк кода, которые я увидел, выбирать Vue и Angular тоже довольно рискованно ввиду ригидности этих технологий.
Стек технологий обычно содержит
- хранилище данных - это база данных и файловое хранилище
- базы данных
- Postgres
- MS SQL
- Elasticsearch
- MongoDB
- memcached,
- Redis
- etc...
- хранилища
- minio
- S3
- RAS
- базы данных
- бэкенд-фреймворк - его выбор зависит от ландшафта и требований, обычно содержит ORM - синтаксический сахар над SQL-запросами.
- Django (Python)
- Ruby on Rails
- ExpressJS (Nest, Next, Nuxt, Meteor)
- Lavarel (PHP)
- .Net core
- Spring (Java)
- Jamstack - Headless CMS (Strapi, Contentful, Gatsby) - пользовательский интерфейс для создания и изменения структур контента
- фронтенд-фреймворк - его выбор зависит от набора компонентов пользовательского интерфейса и количества и динамичности данных которые будут обрабатываться на фронтенде.
- React
- Angular
- Vue
- Ember
- Svelte
- Tooling - typescript, eslint, prettier, webpack, turbopack, etc...
- кроме прочего, нужно выбрать библиотеку компонент и css-framework (tailwind, bootstrap, foundation)
- системы виртуализации-контейнеризации
- Docker (kubernetes)
- VMWare
- API (внутренний или внешний программный интерфейс для интеграции), например:
- Graphql
- Kafka
- Twilio
- Auth0
Также, в зависимости от требований проекта, необходимо заранее задуматься об инфраструктуре и процессе деплоя приложения
- CI/CD
- мониторинг (prometheus, graphana)
- парсер логов (kibana) и выписать конкретные показатели которые необходимо отслеживать и ранжировать по критичности.
Итак, для того чтобы выбрать стек, нужно определить проблему. Затем нужно определить ландшафт и данные, которые мы будем хранить и обрабатывать.
Возьмем для примера несколько кейсов из PropTech, EdTech, FinTech и HR-Tech.
# Кейс 1. EdTech
Необходимо создать систему тестирования учащихся (без уточнения - школ, вузов, онлайн-курсов) с возможностью проведения нескольких видов тестов:
- тест на выбор правильного ответа
- тест со свободным полем ввода
- тест-паззл
- загрузка документа с ответом
И SLA:
- загрузка страницы должна быть меньше 1 секунды
- система должна выдерживать одновременную нагрузку 10000 учеников.
# Кейс 2. FinTech
Необходимо создать консоль управления SaaS-инфраструктурой для облачного сервиса и интеграцией с AD заказчика. Пользователь будет только один - генеральный директор компании, то есть продукт должен быть законченным и не содержать багов.
# Кейс 3. PropTech
Необходимо создать облачное решение для планирования и технического надзора проектного строительства. Требования:
- Автономная работа без интернета
- Умение работать с BIM (стандартизированный формат файлов для описания архитектуры здания)
- Безопасность данных Задача - выстроить соответствия между конструкциями здания (водопровод, вентиляция, отделка, перекрытия) и конкретными подрядчиками, выполняющими данный вид работ.
# Кейс 4. HR-Tech
Необходимо создать продукт полного цикла для "стаффинга" - поиск и найм кандидатов, ведение личных дел, ознакомление с регламентами компании, фидбеки, интервью, распределение между проектами компании, API для получение информации из других систем и увольнение.
# Кейс 5. Личный блог разработчика
Полушуточный кейс - необходимо создать бесплатную среду для записи и публикации мыслей в которую будет удобно писать и обслуживание хостинга не должно занимать много времени.
Чтобы не перегружать статью, мой субъективный выбор архитектуры для каждого кейса будет подробно расписан в следующих статьях.