web-dev-qa-db-ja.com

Node vs vs python RESTful Webサービスの作成用

モバイルアプリ用のREST APIバックエンドを作成しています。 pythonで Twisted matrix とNodejsで Express Framework を決定するのが困難です。

私はいくつかの参照を行ってきました:

  1. Python RESTフレームワークの推奨事項
  2. Web +モバイルアプリの技術スタック
  3. REST APIの最適な言語/フレームワーク

ブロック上の他のすべての子供のように、私も同じ要件を持っています:

  1. メンテナンスが簡単。
  2. 大規模なトラフィックに拡張可能。
  3. MongoDB/NoSQLをサポートする必要があります
  4. 安全で、 簡単に認証 である必要があります。
  5. Webサービスのその他の標準要件。

私は事実を理解しています:

  1. 「技術ではなく、拡張するソリューションです。」
  2. あらゆるテクノロジーの優れたソリューションが成功します。
  3. ほとんどのテクノロジースタックには、自慢すべき大きな成功事例があります。

それでも、一方のテクノロジースタックをもう一方よりも選択する必要がある場合、どうすればよいですか?一方では、Nodejsはネイティブの非同期および非ブロッキングI/O機能を提供します。しかし、twistedmatrixにはいくつかの深刻な問題があります 子猫の大成功事例 。 pythonや他の言語でも他のフレームワークが可能です。他の提案も歓迎します。

私の特定の質問は、RESTful APIを構築するためにpythonでTwisted Matrixを使用する予定です。 pythonおよびDjangoでの経験があり、コードは非常にきれいです。 Nodeまたは他の技術スタックを使用する必要がある致命的な理由はありますか?

詳細な議論を巻き込まないでください。

ps1:モバイルアプリについてのアイデアを提供するために、地理的位置に基づいた大規模なメッセージングを紹介します。 REST APIは空間計算を処理する必要があります。

ps2:私は信仰の飛躍をする準備ができています。

42
jerrymouse

あなたがあなたの質問で述べたすべてを考慮し、あなたは信仰の飛躍を受け入れます。私は答えがあると思う:

  • 私はpython-Django開発者なので、最初はpythonを好まないでしょう。なぜなら、あなたが扱っている問題のためです。

  • 非常に大規模なシステムの一部となるジオアプリケーションでは、アプリケーションの最初のフェーズの実装が完了すると、同時実行と最適化の問題が発生します。

  • 間違いなくnode.jsを選ぶべきだと思います[実装には時間がかかるかもしれませんが、最善の解決策になるでしょう]。

    • 本質的にjavascriptの設計により、直面するほとんどのパフォーマンスの問題を解決します。
    • それを提供するためにnginxのようなプロキシサーバーは必要ありません。オーバーヘッドを節約できます。
    • mongo dbで非常にうまく機能し、これも優れたキャッシュバックエンドとして機能します。

    • 10 linenode.js Webサーバーを使用すると、nginxと同等のパフォーマンスを実現できます。

一言で言えば、Pythonは設計により同期的に機能し、tornadoおよびTwistedを使用すると、asyncをトリッキーなスレッドで処理できます。

開発者の生産性を考慮して、ウェブサイトの開発に前もってnode.jsを好まないというのは本当です。しかし、問題を本当に解決する場合はnode.jsを使用する必要があります。つまり、ソリューションとして、次にテクノロジーとして(質問で引用するように)来ます。

nosqldbのような優れたリレーショナルデータベースがあるのに、なぜpostgresを使用するのかというような質問ですか? mongoのようにpostgresでできることと、mongoのようにnosqldbでできることはできません。

したがって、あなたの問題領域はnode.jsに固有であるため、pythonでホイールを再発明しようとする意味はありません。

考慮事項:

  • node.jsとの最初の摩擦に直面するのは、その新しいテクノロジーだからです。
  • javascriptは、最初にpython開発者に対して維持するのが難しい場合があります。
  • 長期的な目標を目標とするため、信頼性の飛躍は必須です。試されたテスト済みの技術の時間を節約するという短期的なメリットはありません。

例として:

  • Facebookは、すべてのWebページにphpを使用しますが、チャットには本質的に同時のerlangを使用します。
  • erlangを考慮することは、pythonエミュレーションを考慮することよりも論理的です。
39
Yugal Jindle

純粋に技術的な用語では、提案された2つのソリューション間で実際のパフォーマンスの違いはほとんどあり得ないため、あなたの質問は、純粋に技術的ではないサブ質問に大きく依存します。質問する必要があるのは、次の行です。

1)どの言語で最も経験が豊富ですか?

2)どの言語で書くのがより快適ですか?

3)プロジェクトにもっと多くの人を連れて行く場合、前の2つの質問にどのように答えますか?

4)私のプロジェクトで発生する一般的なタスクを処理するための、より優れた/より包括的なライブラリを持つ言語はどれですか?

5)初期の段階でプロジェクトのために検討するほとんどのホスティング環境で、どの言語/環境がより見つけやすく/セットアップしやすいか。

「私のプロジェクトが次のFacebookになったら、どのテクノロジースタックが最適だろうか」と自問することさえ考えないでください。そのポイントに到達するのに十分幸運であるならば、あなたはあなたが始めたのと同じ技術スタックを使用することはないでしょう。時期尚早に最適化しようとしないでください。

20
ebohlman

Nodeを使用する場合、サーバー側とクライアント(必要な場合)の両方で同じ言語を使用できるという事実も考慮する必要があります。これは大きなプラスになる可能性があります。この場合、JavaScriptの経験を積むと、プロジェクトの両側にメリットがあります。

3
bobek