В каких приложениях Go существенно эффективнее чем Node.js и PHP?

Я заинтересовался освоением языка Golang. Мое первое впечатление было что Go должен показать намного большую производительность чем Node.js и PHP, по следующим причинам: Язык компилируемый, строгая типизация, весьма похож на C, а следовательно должно быть мало накладных расходов как у его коллег Node.js и PHP, встроенная легковесная многозадачность. В статьях постоянно пишут что Go идеален для написания всяких высокопроизводительных веб-сервисов. Однако, капнув чуть глубже, я нашел много статей с бенчмарками, в которых Go не показывает какого то супер превосходства по производительности по сравнению с тем же Node.js.
Про PHP тут понятно, что классический PHP работает по схеме запрос-перезапуск_скрипта-ответ-умер и это не супер эффективно, но есть ведь всякие ассинхронные решения на PHP, которые работают с практически как Node.js c event-loop.
С другой стороны, Go сложнее при написании небольших сервисов чем тот же Node.js и PHP, хотябы в силу своей жесткой типизации и непривычного большинству разработчикам специфического-ООП.
Но если Go не дает какого то колоссального преимущества, то почему сейчас такой большой спрос на разработчиков Go и одни из самых высоких зарплат на этом языке? Почему крупные компании пытаются переделать свои решения с PHP на Go? Вроде как намного проще использовать разработчиков на PHP и Node, которых полно на рынке, чем искать редких и дорогих Go-разработчиков.
  • Вопрос задан
  • 1388 просмотров
Решения вопроса 1
EvgenyMamonov
@EvgenyMamonov Куратор тега Go
Senior software developer, system architect
Бенчмарки - это хорошо, но очень важно понимать что именно там меряли и почему результаты именно такие.

Несколько лет назад я тоже делал бенчмарки Python, PHP, Node, Go.
Для меня были важны две вещи:
1 - скорость ответа сервера/кол-во запросов в секунду
2 - объём сервиса в памяти, т.к. от этого зависит стоимость ресурсов

На тесте, где сервисы не делали запросы в базу - из всех четверых лучше всего отработал Go с приличным отрывом, цифры, к сожалению, уже не помню.

Но вся эта разница сошла на нет, как только добавился всего один простой SQL запрос в базу, в таблицу с 10 строками. И на этом фоне разница по скорости ответа была меньше 10%.

Иными словами если ваш сервис работает с базой - критической разницы по скорости работы между Go/Rust/PHP/Node/Java, особо не будет.

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

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

Один экземпляр Go занимал в памяти порядка 6мб RAM, при том, что Pytho+Django порядка 60мб.
Node уже не помню сколько, но что-то близкое к Python'у.

Вот тут уже, когда серверов у вас будет много - количество серверов с Go у вас будет в 10 раз меньше, соответственно расходы за эти сервера у вас будут в 10 раз меньше :)

В крупных компаниях, где нужны специалисты по Go - там уже есть высокие нагрузки и переход на Go и поиск специалиста обусловлен необходимостью решить в первую очередь проблему с нагрузками, оптимизировать расходы на оборудование.

Где-то читал статью, что у людей было API на порядка 40 серверов на Node, после переписывания на Go - серверов осталось два, из которых второй запасной :)
Ответ написан
Пригласить эксперта
Ответы на вопрос 4
Супер превосходства в производительности и не будет. Но при правильной архитектуре будет нормальное превосходство.
В nodejs, например, чтобы распараллелить задачу на несколько ядер, нужно делать много доп. движений, вручную раскидывая задачи. В Go это делается автоматически и гораздо удобнее, просто используешь горутины, а рантайм сам беспокоится о том, запустить их конкурентно или параллельно. Ну и плюс, в го ты просто пишешь последовательный код, вместо колбэков, это легче.
Строгая статическая типизация дает возможность вылавливать много проблем до релиза, код просто не скомпилится, вместо того, чтобы упасть в продакшне. Это очень критично для крупных проектов, над которыми работает много людей. Рефакторинг тоже проще по этой причине. Пхп и нода не дают такой возможности.
Разработчики на го не редкие и не дорогие, они довольно быстро воспитываются из разработчиков на других языках, что тоже удобно компаниям. Плюс, код довольно стандартен, на го почти нет нескольких способов сделать одно и то же, он прививает единый подход.
Сумма этих всех факторов и является причиной популярности го.
Ответ написан
@mitya_k
  • Первая, причина, Go популярен за свою бедность синтаксиса, кому-то это нравится...
    Для больших компаний типа Google это плюс так, как можно посадить посадить 100500 программистов, которые вынуждены писать очень много однотипного болерплейта кода.
  • Вторая причина, там где требовалось решать низкоуровневые задачи, без бизнес-логики(например, много работать с байтиками), плюс требовалась многопоточность для этого приходилось использовать СИ++. Теперь есть простая альтернатива в виде Go. Опять же это актуально для больших компаний, где есть подобные задачи. Например, писать какой-нибудь парсер террабайтных логов
  • И последняя, можно сгенерить бинарь без зависимостей, что нравится работающим в DevOps, а для скриптования "богатый язык" особо не нужен. Опять же актуально для больших компаний, где есть большие отделы DevOps


Из всех 3 пунктов вытекает зарплата и популярность в больших компаниях.
Ответ написан
Комментировать
index0h
@index0h
PHP, Golang. https://github.com/index0h
В каких приложениях Go существенно эффективнее чем Node.js и PHP?

Go > PHP:

1. Приложения, в которых на инициализацию тратиться очень много времени и это критично. Грубо говоря, когда умирающая модель выполнения не подходит.
2. Приложения, в которых нужно много памяти для обработки.
3. Приложения, в которых необходима мультипоточность и реализация задержек во времени.

PHP > Go:

1. Приложения, в которых важна скорость разработки, а производительность на втором плане.
2. Приложения, в которых важна легкость горизонтального масштабирования. Грубо говоря там, где умирающая модель оптимальна.
Ответ написан
Noizefan
@Noizefan
Есть ещё некий момент следования за трендами.

В своё время, как нам всем известно, крупнейшие веб-проекты работали на PHP, и в проблеме возможности оптимизации киты решили изобретать велосипеды, что-то в духе своих диалектов, как фб или вк, кто-то переписывал ядра на более производительные языки, с++ итд итп.

Го же лично для меня представляется чем-то вроде золотой середины в описанной мной ситуации.
Он раз - компилируемый, два - эффективнее (>php,js), три - надёжнее (>php,js), четыре - проще (>c++). А значит удовлетворяет запросу выше.
И при том я бы ни в коем случае не разрабатывал (читай - не переписывал) на нём проект, пока под проект не выделен целый ЦОД, а не полка на стойке, пока обо мне не говорит весь мир.

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

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

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