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


24

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

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

明確にするために、フロントエンドサーバーを書き換えています。これは、既存のRuby on RailsアプリケーションとAPIとして対話します。その間、Ruby on Railsアプリケーションをサービスにリファクタリングします。

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

  • HTMLパーシャルキャッシュ用のMemcached
  • セッション用のRedis、および構造化されたデータキャッシング
  • MySQLシングルマスター、マルチスレーブ
    • 多数の書き込みを受け入れる1つの大きなテーブルがあります(ポーリングを想像してください)
    • それ以外の場合はほとんど読み取ります。
  • 一部のメタデータ用のMongoDB
  • Ruby on Rails 3.0
  • nginxUnicorn

33
sheesh、これらすべての流行に敏感な言語。よく書かれたphpアプリケーションは簡単に拡張できます。従来のツールは機能します。
ダークナイト

5
問題は、「改善により価値のあるビジネスに十分なお金を節約できるでしょうか?」という行に沿ったものでなければなりません。これは、5年間でお金を節約するかもしれないが、書き換えは、高価で時間がかかる-あなたのコードは、私はあなたの管理者が怒っていると考えている恐ろしい恐ろしい混乱しない限り
マイキーC

4
書き換えを検討している場合は、フロントエンドをクライアント側のjavascriptに移動することも検討できます。つまり、動的なフロントエンドサーバーはもう存在せず、静的ファイルだけになります。
ジョーリSebrechts

11
@Darknightは、ある時点でPHPが流行に敏感な言語であり、Perl Web開発者がPHPの流行に敏感であった一方で、PHPが成功する製品に展開できることを示す人々がその採用を促進したことを心に留めておいてください。

9
誰もジョエルスポルスキーの記事 " あなたがするべきでないこと"を誰も取り上げていないことに非常に驚いています。すべての書き換えが悪いと言っているわけではありませんが、@ MikeyCには、細心の注意を払ってアプローチする必要があることに同意します。
ダンピチェルマン

回答:


22

あなたが尋ねる質問のほとんどは文脈なしでは答えることができず、管理者がすでにあなたのために選択をしているので、多かれ少なかれ意味がありません...あなたが「すべてのこの変化に直面して辞めて新しい仕事を見つけるべきですか? ?」

あなたがそれを難し​​くするつもりなら、トピックでこの投稿を読むことをお勧めします:あなたの正気を失うことなく、グラウンドアップの書き換えを生き残る方法

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

私のこれまでの経験はポジティブで、すべての非ブロッキング性を備えた最初の学習曲線が得られますが、実際にコードを書くのはとても楽しいことです。

ただし、JavaScriptでフロントエンド開発を行ったすべての男性と彼の犬(そして、私が望むすべてのフロントエンド開発者になるでしょう)は、node.jsが「サーバーサイドjavascript」であることに少し興奮します。 'ただし、フロントエンドの開発者が優れたサーバーサイドアプリを作成するために必要な経験を持つことを意味しません。

あなたが考えていることの一つは、致命的なエラーがスレッド化されていない性質のためにアプリ全体をダウンさせることです。

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


「考えられることの1つは、致命的なエラーがスレッド化されていないという性質のためにアプリ全体をダウンさせることです。そのため、賭け金が少し高くなり、すべてを明示的にチェックしてキャッチする必要があります」-それは私の心配です。
13

はい、その声明の私の主なポイントは、例外処理に関してはフロントエンドのみの開発者は一般的に特に面倒ではないということでした。さあ、もうほぼ2017年です!
dave.zap 16

8

まあ、アプリケーションの書き直しは、パフォーマンスが悪い場合を除き、良いアイデアだとは思いません。質問に答えるには:

  1. Node.jsは魔法ではありません。アプリケーションには膨大な数のユーザーがいるため、高速化を確実にする方法はありません。

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

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

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

Node.jsはシングルスレッドであるため、そうするように明示的に構成されていない限り、複数のCPUを利用することはできません。

コメントもご覧ください。Node.jsの動作に関する優れた洞察を提供します。


16
単一のスレッドのためにリソースが少ない?これらの余分なスレッドは何をしていると思いますか?
ジョー

ノードjsでは、できるだけ早くリクエストを破棄することをお勧めします。一度に完了するか、次回に再開することで。私が本番アプリケーションを作成した唯一の技術ですので、他のサーバー側の技術と比較するのに最適な人ではないかもしれません。私の答え。
アクシャットジワンシャルマ

7
はい、サーバーはイベントループで一度に1つのことしかできないため、1つのスレッドでリソースの使用が制限されます。また、一度に1つのことしかできないため、サーバーの使用も制限されます。機能(シングルスレッド)と、単なる利点ではなく、利点と欠点を引用することは非常に重要です。Node.jsは一部の用途に適していますが、他の用途には適していません。シングルスレッドノードサーバーに容量の問題がある場合は、別のノードインスタンスを追加する必要があります。これで、マルチプロセスサーバーができました。
ジョー

私は答えをすぐに更新します(いくつかの研究の後に読む)
Akshat Jiwan Sharma

10
CPUだけではありません。理由なぜすべての要求は、あなたがすべてを処理終了するまで待たなければならないので、サーバは、一度に複数の要求を処理することはできませんので、それが(他の並行処理でシングルスレッドシステムに)可能な限り迅速に、すべての要求を処理することが重要ですですその前のリクエスト。並行性が適切に行われると、待機時間が少なくなります。スレッドの使用は本質的にパフォーマンスの低下ではなく、シングルスレッド(デフォルトまたはそれ以外)はパフォーマンス上の利点ではありません。
ピーター・ホージー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.