Какой выбрать язык для серверной части highload проекта?

Доброго времени суток.
Есть большой проект и мне выпала честь переписать его логику.
Цель такова:
Сделать все вычисления, записи и прочее касаемо логики проекта отдельно от всего. Что бы веб и мобильные версии просто отправляли запросы на логическую часть и она выполняла все основные операции.
Сразу скажу основные претенденты Python и NodeJs.
Я смотрел различные статистики и где-то python, где-то nodejs лучше.
От проекта требуется хорошая производительность с малым потреблением ресурсов (сервер мощный, не подумайте). Определённо будет большой кол-во обращений к PostgreSql базе.
Не знаю какой язык и фреймворк выбрать под такие нужды.
Товарищ подталкивает написать всё на C++ и идея впринципе не плохая, но переживаю за скорость разработки и стабильность проекта.
  • Вопрос задан
  • 6437 просмотров
Пригласить эксперта
Ответы на вопрос 8
voidnugget
@voidnugget
Программист-прагматик
Когда люди называют 1Гбит динамического http трафика highload'ом - это вызывает у меня довольно нелепую ухмылку.

Сравнивать php / python / ruby более-менее целесообразно так как это полностью интерпретируемые языки с кэшированием байткода, иногда с оптимизациями, как в случае с jRuby и Project Graal. Обычно такие вещи помирают на 14-17К запросов в секунду с пустыми ответами... В общем на одном гигабите трафика тут обычно всё и заканчивается. Node.js по производительности более корректно сравнивать с JVM языками типа Groovy или Scala, но никак не с самой Java. На практике через Netty на Disruptor'е под offheap'ом и Terracotta можно пропустить и 40Гбит живого трафика, без статики, - главное правильно профилировать и писать прямо pfRing.

Почти в каждом случае где есть сборка мусора нужно использовать offheap кэширование, или любые другие методы контроля роста кучи. Во время самой сборки в очень больших (16Гб и более) старых поколениях возникают проблемы с планировщиками и контролем приоритетов - в итоге получаем очень большое, критическое, увеличение текущих задержек на обработку запросов.

Если вы хотите строить что-то действительно стоящее - стоит смотреть в сторону CQRS-ES'a и реактивных приложений в рамках SOA. Возможно внедрение микросервисных архитектур если нет требований к задержкам на выполнение запросов. Но, учитывая что вы задаёте здесь вопросы о том "что лучше node.js или python" не думаю что у вас хватит опыта для построения подобных вещей.

Можно пробовать golang - яндекс слез с python'a на golang по причине слоупочности оного, и довольно хорошо так слез. В golang'е сейчас самый лучший RAD, гораздо круче того же node.js. Идеоматичность самого языка решает достаточно много потенциальных проблем ещё на этапе разработки. Да и сообщество сейчас довольно активно пилит его runtime - внедряют многопоточный gc и ещё пару вкусностей. Даже не умея всех этих асинхронностей и прочей лабуды с golang'ом можно получить довольно хороший выхлоп. Правда меня немного смущает отсутствие нормальных datamapper'ов и scaffolding'a под golang.
Ответ написан
xmoonlight
@xmoonlight
https://sitecoder.blogspot.com
php - все будет в лучшем виде, если руки "прямые".
Ответ написан
KorsaR-ZN
@KorsaR-ZN
Если стоит выбор между Python и NodeJS, берите однозначно Python, в NodeJS намучаетесь с его асинхронностью.
С++ конечно хорошо, но на мой взгляд будет сильно тормозить скорость разработки, да и можно нарваться на подтекании памяти.
Так, что берите Python, хотя можете присмотреться к PHP и фреймворку Phalcon

А вообще сложно что-то советовать не зная примерной нагрузки.
Ответ написан
index0h
@index0h
PHP, Golang. https://github.com/index0h
С нодой очень вероятно - хлебнете горя на утечках памяти. Нода - конечно не плохая штука, но вы должны понимать, что ограничены N потоков запросов к БД, где N - количество CPU(в случае, если модуль кластер использовать не будете N = 1). То, что касается IO - нода очень даже синхронная.
На счет C++ - будьте осторожны, скорость разработки и поддержка вероятно будут больным вопросом.
На счет питона ничего не скажу.
Можете посмотреть в сторону Golang или Java.

Вообще говоря - нельзя подбирать технологию по паре абстракций типа "работа с postgre", "логика проекта", "highload")) Это как подбирать пароль зная, что но был написан на желтой бумажке. Слишком мало информации.

На счет HL: возможно скажу спорную штуку, но если вы ориентируетесь на HL - даже не предполагайте того, что сервер будет один.
Ответ написан
victorvsk
@victorvsk
10к в день - это не нагрузки. Симфони - явно не хуже джанги или экспресса. Если "тормозит", проставьте индексы в базе и потюнингуйте настройки (в вашем случае, мне кажется, начать хотя бы с pg_tune)

Если и дальше тормозит, то никаких телодвижений, особенно переписывания на неизвестные языки, без профилировщика - узнайте узкие места и задавайте(сь) конкретные вопросы.

Ну и, конечно, уточните понятие "тормозит". Мало ли, может у вас скрипты и стили не слиты и не сжаты и все запущено в дев окружении
Ответ написан
miraage
@miraage
Я вас умоляю. Люди на симфони обрабатывают миллиард запросов в неделю.
Грамотно спроектируйте логику, базу данных, кэширование, балансировку - всё будет летать.
И технология не сильно влияет. Главное, это Ваши навыки.
Ответ написан
@bromzh
Drugs-driven development
Выбирай Java
Ответ написан
FedLapshin06
@FedLapshin06
Fullstack, Low Level Developer
Лучше Go!
1. Многопоточен ( использует ядра и потоки, как в NodeJS )
2. Асинхронен
3. Множество либ ( и для инета тоже )
4. Из коробки кучу примочек
5. Кроссплатформенный
6. Компилируемый
Ответ написан
Ваш ответ на вопрос

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

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