web-dev-qa-db-ja.com

大きなRuby on Railsアプリケーション(月額2,500万ユーザー))がいるので、私たちの経営陣はNode.jsで書き直すことに決めました。

次の場合は教えてください:

  • Node.jsはサイトを高速化します!
  • Node.jsはサーバーリソースの消費量が少ないため、コストを節約できます。
  • Node.jsによって生産性が向上します!
  • Node.jsは、クライアント側とサーバー側のJavaScriptコードを共有できることを意味します。

明確にするために、フロントエンドサーバーを書き換えて、既存のRuby on RailsアプリケーションをAPIとして使用するようにします。その間、 Ruby on Railsアプリケーションをサービスに。

既存のアーキテクチャの詳細:

  • Memcached HTML部分キャッシュ
  • Redis セッション、およびいくつかの構造化データキャッシング
  • MySQL 単一のマスター、複数のスレーブ
    • 多数の書き込みを受け入れる大きなテーブルが1つあります(投票を想像してください)。
    • それ以外の場合は主に読み取ります。
  • MongoDB 一部のメタデータ
  • Ruby on Rails 3.0
  • nginx および nicorn
24
user88487

あなたが尋ねる質問のほとんどは、コンテキストなしでは答えられず、経営陣がすでにあなたのために選択を行っていることを考えると、多かれ少なかれ議論の余地はありません...「すべての変更に直面して私が辞めて新しい仕事を見つけるべきかどうか」と尋ねない限り? '

あなたがそれを難し​​くするつもりなら、私はこのトピックに関するこの投稿を読むことをお勧めします: 正気を失うことなく根本的な書き換えを生き残る方法

私は最近、node.jsでサーバーロジックを少し書き換える方法を始めました。主な理由は、現在.NETで記述されており、将来的にMS環境から移行したいと考えていることです。

これまでの私の経験はポジティブでした、あなたはそれのすべての非ブロッキング性を備えた初期の学習曲線を持っていますが、それを乗り越えると、実際にコーディングするのはとても楽しいです。

JavaScriptを使用してフロントエンドの開発を行ったすべての人と犬-そして私が期待するすべてのフロントエンドの開発者-は、node.jsが 'サーバー側のJavaScript'だと言うと少し興奮します'ただし、フロントエンドの開発者が優れたサーバー側アプリを作成するために必要な経験を持つことを意味するものではありません。

考慮すべきことの1つは、スレッド化されていないため、致命的なエラーによってアプリ全体がダウンするため、リスクが少し高くなり、すべてを明示的にチェックしてキャッチする必要があるということです。

フロントとバックの両方を行い、両方を楽しんだ人にとって、フロントエンドの言語からバックエンドの言語にメンタルコンテキストを切り替える必要がないことは、最終的に私たちのチームの生産性を飛躍的に向上させると本当のボーナスです。

22
dave.zap

まあ、私はそれが不十分に実行されていない限り、アプリケーションを書き換えることは良い考えだとは思いません。あなたの質問に答えるには:

  1. Node.jsは魔法ではありません。あなたのアプリケーションは膨大な数のユーザーを抱えているので、それがそれをより速くすることを確信する方法はありません。

  2. そうですね、Node.jsは実際にはサーバーリソースの消費量が少なくなっています。リソースを節約できるだけでなく、既存のリソースをさらに活用できます。これは主に、Node.jsのシングルスレッドの性質によるものです。追加のスレッドによるオーバーヘッドはありません。

  3. ここでもNode.jsは魔法ではありません。そうは言っても、そこには真実があるかもしれません。 Node.jsには非常にアクティブなコミュニティがあり、可能なタスクごとに何百ものモジュールを作成しています。そのため、ほとんどの作業があなたのために行われたと考えられます。ピースを合わせるだけです。

  4. 理論的にはそうです。 Node.jsはJavaScriptなので、クライアントとサーバー間でコードを共有できます。しかし、私はそれが共有されることを正確に知りません。クライアントで再利用可能なコードは記述していません。サーバー上で行うことは通常、クライアントとは何の関係もありません。私にとってより重要なのは、コンテキストスイッチがないことです。クライアントとサーバーの両方で単一の言語でコーディングする方が簡単だと思います。

Node.jsはシングルスレッドなので、 explicitly configured を行わない限り、複数の CPUs を利用できません。

コメントも見てください。これらは、Node.jsの動作についての良い洞察を提供します。

8