@demonow1992

Какой стек технологий выбрать для высоконагруженного MVP?

Есть проект (пока прототип на FIGMA), который предполагает использования мобильных устройств. Естественно, нужно будет пилить UI. Для этого я буду юзать Flutter (вроде стильно, модно, молодежно, относительно шустрый и не надо городить кучу велосипедов). А вот с бэкэндом никак не могу решить что выбрать. Вроде Python + Django, говорят нормальная тема, но плюются на его скорость, а я не хочу поднять проект а потом, когда он вырастет его переписывать на чем-то шустреньком. На Java писать вроде и все ок, да вот только сложный язык говорят и специалисты на него дорогие, а учить Java 100 лет как-то не хочется. Я вот склоняюсь к Node.js. Вроде и Javascript язык относительно несложный, да и ноду за скорость хвалят. Сам проект предполагает высокую нагрузку с использованием websocet, у меня там много чего будет меняться в реальном времени.
  • Вопрос задан
  • 172 просмотра
Решения вопроса 1
@Akela_wolf
Extreme Programmer
Писать надо на том, что знаешь. От языка способность держать высокую нагрузку зависит слабо - есть вполне себе хайлоад (лично видел, платежная система), написанный на PHP.
Для серьезного хайлоада важнее другая характеристика: не скорость работы, а стоимость ошибки. Если ваш хайлоад "ляжет" из-за какой-то ошибки (да еще с потерей части данных) - это будет очень-очень-очень плохой экспириенс для пользователей. А если это будет происходить неоднократно - потеря посетителей вам гарантирована.
Поэтому у меня для хайлоада приоритеты:
1. Надежность
2. Скорость разработки
3. Производительность

Итак, по пунктам.
Надежность. Это про то, насколько строго язык отлавливает ошибки программиста и насколько просто на нем написать подверженную ошибкам муть. Насколько просто будет сопровождать код, написанный на данном языке. В этом пункте ключевые слова "архитектура", "покрытие тестами" и "статическая типизация". Первые два пункта - это про любой язык, так как реализуются на уровне процессов разработки. Из предложенного списка языков статическую типизацию обеспечивают Java (Kotlin) в мире JVM и Typescript (не Javascript) в мире Node.js

Скорость разработки. Это про наличие большого количества готовых библиотек и про богатые возможности языка для выражения требуемых программисту структур данных и алгоритмов. Тут фавориты те же: Java/Kotlin и Typescript. На мой взгляд, JVM-мир сложнее, но дает все-таки больше возможностей (тот же Spring обеспечивает создание бинов за пару аннотаций).

Производительность. Не могу сказать о Node.js - не тестировал на производительность, но JVM обеспечивает очень хорошую скорость. Еще один немаловажный момент: очень часто в хайлоаде приложение чего-то ждет. Например, отправив запрос в БД ожидает ответа. А в это время могло бы обрабатывать другой запрос другого пользователя, а получив ответ из БД - вернуться к обработке первого (reactive programming). Для этого у нас есть разные реактивные фреймворки для той же Java (Reactor, Vert.x и т.п.) и, что особенно приятно, корутины в котлине, которые позволяют писать асинхронный код почти настолько же просто как и синхронный. На Javascript с их async/await тоже можно такое писать, хотя возможностей все-таки поменьше чем в Котлине.
Опять же, с корутинами достаточно легко и просто реализуется многопоточность, в ноде с ней не все так просто (хотя она тоже есть).

Таким образом, мой личный выбор для хайлоада: JVM и Kotlin.
Альтернативный вариант: Node.js и Typescript.

Другие я бы стал рассматривать только при наличии очень весомых преимуществ перед обозначенными.

P.S. Также Kotlin является официальным языком для Android, поэтому можно подумать о том чтобы писать и мобильное приложение и сервер на одном языке.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 5
vabka
@vabka
Токсичный шарпист
но плюются на его скорость, а я не хочу поднять проект а потом, когда он вырастет его переписывать на чем-то шустреньком

Instagram почти полностью на питоне, а у YT много частей на нём написаны.
Не думаю, что вы сможете так сходу их по нагрузке переплюнуть.
Хайлоад - это уже тот момент, когда на одной машине в принципе не сможешь всё обрабатывать, хоть на C++ пиши.

Сам проект предполагает высокую нагрузку с использованием websocet, у меня там много чего будет меняться в реальном времени.

Высокая нагрузка - это сколько?
Уже пробовал тестить, выдержит ли Nodejs такую нагрузку?
Смотрел, сколько стоят nodejs-разрабы, которые умеют в хайлоад? Что-то мне подсказывает, что они не дешевле чел жависты.
Да и в целом JS от питона различается не сильно (если исключить django)

А так да - в топе сейчас C#, Go, Java, Rust, C++ - постоянно друг другу в спину дышат, периодически меняясь местами в бенчмарках.
Ответ написан
Комментировать
@caballero
Программист
если еще ничего нет с чего вы решили что оно будет высоконашгруженым? тем более если это тольок MVP

чтобы проект стал высоконагруженым нужны пользователи а значит огромные дентги в раскруткую на чем писать тут вопрос десятый. тем более можно просто купить мощное железо и все делаа - железо нынче стоит меньше чем стоимость програмистов.

впрочем тому кто задает вопросы на чем писать еще лет пять опыта мигимум для того чтобы писать проекты для высокой нагрузки
Ответ написан
firedragon
@firedragon
Senior .NET developer
GO, C#, Java
Специалистов куча в ногу выстрелить не получится, по скорости они в топе.
Ответ написан
Комментировать
RAFAILgaley
@RAFAILgaley
да
а твоем случае js+node лучший вариант
Ответ написан
Комментировать
Бек разбивать на микросервисы и деплоить в AWS-lambda. По-началу бесплатно, масштабироварие - неограниченно. А фронт - в S3.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы