@yiicoder

Какой язык выбрать под Backend высоконагруженного rest-сервиса?

Задачи бэкэнда - rest-сервис для игр (социальных\мобильных).
Задачи банальные - забрать данный с БД, передать на клиент, получить запрос от клиента, выполнить несложную логику, сохранить в БД, передать ответ.

!!Нагрузка высокая, 150к-300к RPM, создают где-то 30-50к пользователей онлайн - обычное среднее количество для нас. Сейчас все это дело держит PHP в несколько нод. С выходом 7ой версии конечно порадовались, но теперь совсем планируем уйти на компилируемый язык со статической типизацией.
Основная цель - держать как можно больший RPS с ноды.

Краткий обзор чего рассматриваем:
Больше всего нравится GO в плане работы с большим количеством соединений. Goroutines - красота. Но некоторые минусы конкретно убивают плюсы.
С#, вся инфраструктура на Linux, поэтому видимо Mono. Очень много возгласов, что все это не для продакшна.(хотя мы с Mono работаем на клиенте)
С++ - прекрасно, но очень не хочется заниматься самому управлением памяти.
Java - честно говоря - нет опыта, пытались разбираться с потоками: честные потоки явно жрут много оперативки сервера, "дешевые" реализации coroutines пугают тяжелы (можно как-то еще?).

Какой язык(+фреймворк) вы используете для подобных задач и почему?
  • Вопрос задан
  • 2283 просмотра
Пригласить эксперта
Ответы на вопрос 8
evnuh
@evnuh
Поиск Гугл помог мне, впусти и ты его в свой дом
Ну выбора у вас не много.
Го - на порядки проще, особенно при работе с вашими задачами (http/json/db)
C++ - в разы быстре Го, но и в разы тяжелее вам будет работать с ним
Пока у вас не миллионы онлайна и живёте вы на PHP, спокойно переходите на Go, его хватит надолго.
Ответ написан
uvelichitel
@uvelichitel Куратор тега Go
habrahabr.ru/users/uvelichitel
Если логика несложная(скриптуется на Lua), то быстрее nginx c LuaJit модулем кажется не придумали.
Ответ написан
Taraflex
@Taraflex
Ищу работу. Контакты в профиле.
С++ - прекрасно, но очень не хочется заниматься самому управлением памяти.

vibed.org
Ответ написан
Nipheris
@Nipheris Куратор тега C++
забрать данный с БД, передать на клиент, получить запрос от клиента, выполнить несложную логику, сохранить в БД, передать ответ

По вашему описанию БД должна быть узким местом. А если узлов с базой много, почему не размножить бэкенд-сервера?
Ответ написан
xmoonlight
@xmoonlight
https://sitecoder.blogspot.com
Советую пока что остаться на PHP и подключить Redis
Проблема у Вас не в обработке, а в хранилище.
Ответ написан
@Sterk
Программист
Голос за C#. Да он не такой быстрый как C++. Но он довольно быстр. Если вы собираетесь выпустить новую версию к лету или позднее можно присмотреться к новому asp.net core mvc. на гитхабе есть бенчмарки(только не смотрите на asp.net mvc 5 он уныл в этом плане). Внизу страницы есть "Plain Text with HTTP Pipelining", как мне кажется очень показательный. Да пока что линукс проседает(при этом все равно оставаясь быстре node.js, который быстрее php), но это дело времени. По поводу того что скала пока что быстрее, два месяца назад asp.net core выдавал в этих тестах 200-300к(на windows). На будущее(год-два) майкрософт пилит компиляцию в нативный код на разных платформах(пока что это работает только на HelloWorld).
Ответ написан
AterCattus
@AterCattus
Люблю быстрый backend
300K RPM (5000 qps) можно на любом из предложенных ЯП на одной ноде держать, если аккуратно и с пониманием особенностей выбранного варианта. Ну разве что про C# Mono не уверен.
С учетом ваших задач "сходи туда, обработай ответ, посчитай то, ответь клиенту" выбор Go был бы весьма кстати.
Ответ написан
Ваш ответ на вопрос

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

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