Zonor
@Zonor
Начинающий веб программист

Что выбрать для бэкенда с нуля?

Вообщем есть проект написанный не мной, на PHP. PHP вообще ненавижу из-за кучи версий, настроек и прочего. Люблю Node за простоту в этом плане. Go только присматривался и писал хеллоу ворды. Но сейчас стоит задача, для которой не могу выбрать инструмент...
Будет много I/O. Как запросы от клиента (очень много, до 5 запросов в секунду от одного клиента). И много работы с базой.
Но в каждом запросе клиента будут расчеты, по типу собрать из 10 массивов случайные числа, перемножить, проверить что полученные данные больше или меньше того что содержится в базе, так же проверить что выбранные числа содержатся в другом массиве. Записать выбранные числа в базу.
Много читал про ноду, что якобы вычисления ее слабое место. Но ведь есть воркеры, и им можно отдавать такие задачи. PHP я точно не хочу. Я уже давно хочу уйти от него. И встал выбор между Node JS и Go. Go быстрый в этом плане, и хочется пощупать его в реальной задаче. Но если возьму его - то будет времязатраты на изучение. А с Node JS знаком уже на реальных проектах, но без больших вычислений, ну и плюс во фронте JS, хочется писать все на одном языке, без переключений в голове xD
Помогите определится, справится ли нода, если будет 500-1000 одновременных клиентов с расчетами и проверками в базе.
  • Вопрос задан
  • 817 просмотров
Решения вопроса 1
@foterio
Преимущество NodeJS - это ее асинхронность, и тут это нам сыграет на пользу. Плюс математические вычисления мы вынесем в отдельные worker'ы. Подробнее, как организовать worker pool тут https://github.com/josdejong/workerpool
При правильно спроектированной архитектуре и настроенном NGINX, NodeJS способна переварить тысячи запросов и чувствовать себя отлично.
У меня, к примеру в одном из проектов я уперся быстрее в производительность MongoDB на запись 165-220 RPS (на той конфигурации монги, которая была у заказчика), чем в невозможность обработать запрос клиента у NodeJS.
Я бы начал с тестового backend'а на Fastify, так как мы все равно пишем с нуля и нам важна производительность. Будем честны для Go тут еще маловато нагрузки))))
Затем пострелял бы в него из пушки, скажем 1000 RPS 10 секунд подряд и посмотрел результаты.
Далее будет понятно, справляется ли один инстанс с этой задачей или нет, и тогда можно в случае чего масштабировать его и лить трафик на несколько NodeJS приложений через load balancer.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 4
Steel_Balls
@Steel_Balls
Здесь не язык надо выбирать, а правильно разрабатывать архитектуру.
С правильной архитектурой неважно на чём написан бэк - на C#, Go, NodeJs или, простигосподи, на Kotlin.
И вообще, в бэкенде обычно используется несколько языков. Python, JS, Go и C# одновременно - абсолютно нормально
Ответ написан
Стоит написать тестовую программу нагрузки для Node.js и проверить на деле. И с конкретными цифрами проще решать.

Дополнение
в БД просто выборка строки по id
Ну, можно взять какую-то K/V СУБД.
Ответ написан
uvelichitel
@uvelichitel Куратор тега Go
habrahabr.ru/users/uvelichitel
Я, евангелист языка Go) Мне язык нравится и платят неплохо. Go быстрее чем Node.js, быстрее чем PHP.
Но, хотел бы заметить:
Вообщем есть проект написанный не мной, на PHP.

переписывать работающий проект на другом языке должно быть явным побуждением стейкхолдеров.
Ответ написан
@deliro
Конечно же Rust
Ответ написан
Ваш ответ на вопрос

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

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