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

Доброго времени суток.
Есть большой проект и мне выпала честь переписать его логику.
Цель такова:
Сделать все вычисления, записи и прочее касаемо логики проекта отдельно от всего. Что бы веб и мобильные версии просто отправляли запросы на логическую часть и она выполняла все основные операции.
Сразу скажу основные претенденты Python и NodeJs.
Я смотрел различные статистики и где-то python, где-то nodejs лучше.
От проекта требуется хорошая производительность с малым потреблением ресурсов (сервер мощный, не подумайте). Определённо будет большой кол-во обращений к PostgreSql базе.
Не знаю какой язык и фреймворк выбрать под такие нужды.
Товарищ подталкивает написать всё на C++ и идея впринципе не плохая, но переживаю за скорость разработки и стабильность проекта.
  • Вопрос задан
  • 7850 просмотров
Пригласить эксперта
Ответы на вопрос 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 - даже не предполагайте того, что сервер будет один.
Ответ написан
viktorvsk
@viktorvsk
10к в день - это не нагрузки. Симфони - явно не хуже джанги или экспресса. Если "тормозит", проставьте индексы в базе и потюнингуйте настройки (в вашем случае, мне кажется, начать хотя бы с pg_tune)

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

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

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

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
ИТЦ Аусферр Магнитогорск
от 100 000 до 160 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
26 апр. 2024, в 07:47
2000 руб./за проект
26 апр. 2024, в 06:46
1000 руб./в час
26 апр. 2024, в 05:31
1000 руб./за проект