Node vs python для создания веб-сервисов RESTful
Я создаю backend для REST API для мобильных приложений. Мне трудно решить между Twisted matrix в python и Express Framework в Nodejs.
Я просмотрел несколько ссылок:
Как и каждый другой ребенок на блоке, у меня тоже есть те же требования:
- Простота обслуживания.
- Масштабируемый для большого трафика.
- Следует поддерживать MongoDB/NoSQLs
- Должно быть безопасным и легко аутентифицироваться.
- Другие стандартные требования к веб-сервисам.
Я понимаю факты:
- "Это решение, которое масштабируется, а не технология".
- Хорошее решение по любой технологии будет успешным.
- Большинство стеков технологий имеют некоторые большие истории успеха, чтобы похвастаться.
Тем не менее, если мне нужно выбрать один стек технологий над другим, что это должно быть? С одной стороны, Nodejs предлагает встроенные функции асинхронного и неблокирующего ввода-вывода. Но у twistedmatrix есть серьезные большие истории успеха в своем котенке. В python и других языках возможны другие фреймворки. Другие предложения также приветствуются.
Мой конкретный вопрос: я планирую использовать Twisted Matrix в python для создания RESTful API. Поскольку у меня есть предыдущий опыт работы с python и django, и код очень аккуратный. Есть ли какая-нибудь причина убийства, с которой я должен пойти с Node или другим техническим стеком?
Пожалуйста, не обсуждайте расширенные обсуждения.
ps1: дать некоторое представление о мобильном приложении, о его широкомасштабном обмене сообщениями на основе геопозиций. API-интерфейсы REST должны иметь дело с пространственными расчетами.
ps2: Я готов совершить прыжок веры.
Ответы
Ответ 1
Учитывая все, что вы заявили в своем вопросе, и вы готовы принять скачок веры. Я думаю, у меня есть ответ:
-
Являясь разработчиком python-django, я не буду предпочитать python
в первую очередь из-за проблемы, с которой вы имеете дело.
-
В геоприложении, которое будет частью очень большой системы, у вас будет concurrency и проблемы оптимизации в тот момент, когда вы закончите реализацию первой фазы вашего приложения.
-
Я думаю, что вы должны пойти на node.js
без всяких сомнений [Возможно, потребуется время для его реализации, но это будет лучшее решение), вот почему:
- По своей сути из-за дизайна javascript решает большинство проблем с производительностью, с которыми вы столкнетесь.
- Вам не понадобится прокси-сервер, например
nginx
для его обслуживания, он снова сохранит ваши служебные данные.
-
Он отлично работает с mongo db
, который снова служит большим кэшем.
-
Вы можете достичь производительности, эквивалентной nginx
с 10 line
веб-сервером в node.js
.
В двух словах,
python
работает синхронно по дизайну, а tornado
и Twisted
позволяет ему идти async
с помощью сложной потоковой передачи - почему бы не выбрать технологию, которая по своей сути приходит с решением самой проблемы, на которую вы нацеливаетесь?
Это правда, что я не буду предпочитать node.js
авансом для разработки сайта, учитывая производительность разработчика. Но я бы сказал, что мы должны использовать node.js
, где он действительно решает проблему, то есть прийти как решение, а затем технологию (как вы указываете в своем вопросе).
Возникает вопрос: зачем использовать nosqldb
, когда у вас отличная реляционная база данных, например postgres
? Вы знаете ответ, который вы можете: не делайте что-либо с postgres
, которое вы можете сделать с помощью nosqldb
, например, манго и наоборот.
Итак, ваша проблемная область является родной для node.js
, поэтому нет смысла пытаться изобрести колесо с помощью python
.
Соображения:
- Вы столкнетесь с первоначальным трением с
node.js
, так как это новая технология для вас.
-
javascript
может быть сложнее поддерживать для разработчика python изначально.
- Прыжок веры является обязательным, поскольку вы нацеливаете долгосрочные цели на это, а не на краткосрочную выгоду, чтобы экономить время на проверенных и проверенных технологиях.
В качестве примера:
- Facebook использует
php
для всех своих веб-страниц, но для своего чата он использует встроенный erlang
.
- Рассмотрение
erlang
было бы более логичным, чем рассмотрение эмуляции python.
Ответ 2
Ваш вопрос во многом зависит от подзапросов, которые не являются чисто техническими, поскольку в чисто технических терминах вряд ли будет какая-либо реальная разница в производительности между вашими двумя предлагаемыми решениями. Вопросы, которые вам нужно задать, следующие строки:
1) На каком языке у меня больше всего опыта?
2) На каком языке мне удобнее писать?
3) Если я должен привлечь больше людей в проект, как они ответят на предыдущие два вопроса?
4) На каком языке имеются более/более полные библиотеки для обработки общих задач, которые будут возникать в моем проекте?
5) Какой язык/среда, скорее всего, будет найден/проще настроить в большинстве хостинговых сред, которые я бы рассмотрел для своего проекта на ранних этапах.
Даже не думайте о том, чтобы спросить себя: "Какой технологический стек был бы лучше, если бы мой проект стал следующим Facebook?". ЕСЛИ вам когда-либо удастся достичь этого момента, вы не будете использовать тот же самый технический стек, с которого вы начали. Не пытайтесь оптимизировать преждевременно.
Ответ 3
Вы также должны учитывать тот факт, что если вы идете с Node, вы сможете использовать один и тот же язык как на стороне сервера, так и на клиенте (если необходимо), что может быть огромным плюсом. Когда вы приобретете опыт работы с JavaScript, в этом случае вы выиграете обе стороны вашего проекта.