2012-03-16 37 views
4

人々が通常SocketIOとNodeで構築する最初のアプリは、通常チャットアプリケーションです。このチャットアプリは基本的に1台のノードサーバーを持ち、複数のクライアントにブロードキャストします。ノードコードでは、次のようなものがあります。NodeJS + SocketIO:シングルポイント障害の拡大縮小と防止

これは少数のユーザーには最適ですが、これに問題があります。まず第一に、ノード・サーバーである単一障害点があります。第二に、クライアントの数が増えるにつれてアプリが減速します。私たちがこのボトルネックに達すると、何をしなければなりませんか?この問題を緩和するために使用できるアーキテクチャ(水平/垂直スケーリング)はありますか?

+0

サーバーに接続するクライアント数はいくつですか?そのループが著しく遅くなるためには、何万という必要があると言えます。 –

+0

何百万人ものユーザーがいるのであれば、それほど多くはありませんか? – denniss

答えて

4

チャットアプリケーションに複数のフォールトトレラントなノードサーバーが必要なときに、サーバーとクライアント間の通信にsocket.ioを使用する場合は、node.jsモジュールが適しています請求書。このような複数のノードサーバとして -

https://github.com/hookio/hook.io

これは、複数の間の通信「の事を」横断するフレームワークを発するイベントは、基本的にです。

これは複雑な問題であるため、ほとんどのモジュールと比較すると比較的使いやすいです。

言われていることですが、これに問題が発生する前に、おそらく数千人の同時ユーザーと他の多くの問題を抱えている必要があります。

あなたができるもう1つのことは、接続が失われた場合(いつも起こっている)などの方法でアプリケーションを開発しようとすることです。サーバーがダウンしたり、クライアントがネットワーク上の問題(モバイルユーザーなど)を持っているなどの場合、アプリケーションはそれを処理し、そのような問題から正常に回復できるはずです。

+0

リンクが壊れています。 – funerr

2

Node.jsにはイベントループスレッドが1つあるため、この単一障害点がそのDNAに書き込まれます。コード変更後にサーバーを再読み込みする場合でも、このスレッドを停止する必要があります。

しかし、このような障害を正常に処理するためのツールはたくさんあります。 foreverを使用できます。特定のスクリプトが継続的に実行されることを保証するためのシンプルなCLIツール。その他のオプションには、distributeupがあります。ディストリビュートはノード用のロードバランシングミドルウェアです。 Upは、JavaScript APIまたはコマンドラインインターフェイスを使用してゼロダウンタイムのリロードを提供するためにDistributeの上に構築されています。

さらなる読書私は、Socket.ioでRedis Storeを使用して、サーバー。これらのオプションは、すでに広範にherehereと議論されています。

Redisストアを使用しない場合は、socket.io-clusterhubを使用するオプションもあります。

+0

あなたはdistributeを使ってみたことがありますか?私はそれがどのようにすべてのユーザーにブロードキャストできるのだろうと思っています。接続されているすべてのユーザーについて各ノードが知っている必要があるようです。 – denniss

関連する問題