2016-07-09 4 views
0

私のクライアントはリアルタイムでチャット、画像、動画の送信を行うリアルタイムアプリケーションを作成するようにお願いします。彼は自分自身のテクノロジースタックを思いつくように頼んだので、私はたくさんの研究をして、最も簡単なものを構築するには、技術スタックの下で使うことが分かった。このテクノロジは規模を拡大できますか?

1)Node.jsとクラスタサーバの1つのインスタンスのためのコア - 言語

2)Socket.io - リアルタイム・フレームワーク

3)のRedis - サーバ

4の複数のインスタンスのためのパブ/サブ)nginxの - プロキシと負荷バランスを逆転させます複数のサーバ

5 )アマゾンEC2 - 画像/動画を保存するために、私は上記のスタックのために間違っているなら、私を修正し

を提供する - サーバー

6)アマゾンS3とCloudFrontを実行します。私の本当の疑問は、上記のテクノロジースタックが1秒間に1,000,000メッセージ(テキスト、イメージ、ビデオ)を拡大できるかどうかです。

node.jsとsocket.ioを経験している人なら誰でも、上記のスタックの洞察や代替案を得ることができます。

よろしく、

SinusGob

+0

プッシュ通知にsocket.ioを使用する場合は、APN、GCMをチャットサーバーに使用することをお勧めします.WithsAppなどのXMPPオープンソース実装を使用することをお勧めします。 – Damirchi

+2

これはちょっとした質問です。 1秒間に1,000,000件のメッセージを処理できるシステムを、名前を付けたものから構築できますか?はい。どのくらいのサーバー、ロードバランサ、帯域幅、ネットワークカード、およびその他のカスタム開発など、それがどれくらいの規模かを知ることができますか?いいえ、ここまでは細部まで言及することはほとんどありません。 – jfriend00

+0

5msで1つのメッセージを処理することができれば(サーバーが何をする必要があるかを知るために文脈を全く与えていないので、野外から抜け落ちる)、200メッセージ/秒/ 1,000,000件のメッセージ/秒を処理するためには5000コアとかなりのネットワーク帯域幅が必要です。私は、テストの実行を開始できるコンセプトテストハーネスの構築を開始することをお勧めします。それが本当にあなたがする必要があることをすることができるかどうかを知る唯一の方法です。測定する。 – jfriend00

答えて

1

私の本当の問題は、上記の技術スタックスケールは秒あたり1,000,000メッセージ (テキスト、画像、動画)ができているのですか?

もちろん可能です。適切なデザインと十分なハードウェア。あなたのクライアントが求めるべき質問は、それが大きなものにすることができるかどうかということではなく、コストと実用性をどのようにして行うことができ、それらが最良の選択であるかです。

のは、あなたが言及したそれぞれの作品を見てみましょう:

のNode.js - I/O中心のアプリについては、それが高いスケールのための優れた選択肢だし、クラスタ内の多くのCPUを展開することによって拡張することができます(サーバーとマルチサーバーの両方でマルチプロセス)。このタイプのスケールは、どのような共有データにアクセスする必要があるかによって大きく異なります。通常、データ・ストアは、要求処理でより多くのサーバーをスローするのが容易であるため、最終的にスケーリングのボトルネックになります。中央のデータストアにハードウェアを追加するのは簡単ではありません。それを行う方法はありますが、アプリの要求に応じて、アプリの操作や難易度などに大きく依存します。

socket.io - 小型メッセージの効率的なサーバープッシュが必要な場合は、socket.ioがクライアントへのプッシュで最も効率的であるため、おそらく最善の方法です。しかし、すべてのタイプの輸送でそれは素晴らしいことではありません。例えば、私は大きな目的の画像やビデオをsocket.ioで動かすことはありません。なぜなら、それを行うためのより多くの目的があるからです。だから、socket.ioの使い方は、アプリケーションが使っているものが何であるかに大きく依存しています。ビデオをクライアントにプッシュしたい場合は、URLだけをプッシュして、クライアントに回って、よく知られている大規模な技術を使って、通常のhttp URLでビデオをリクエストすることもできます。

Redis - また、いくつかの点では優れており、すべてではそれほど優れていません。だから、それはあなたがしようとしていることに本当に依存しています。前に説明したことは、データストアの設計とそれを通じたトランザクションの数が、実際の規模の問題が存在する場所である可能性が高いということです。私がこの仕事を始めたのであれば、サーバーのデータストレージのニーズ、さまざまな種類のトランザクション、キャッシュ戦略、冗長性、フェイルオーバー、データの永続性などを理解し、データへの大規模なアクセスが可能になります。私は完全にレディスが好ましい選択であるとは思わないでしょう。おそらく、プロジェクトの早い段階でコンサルタントとして大規模なデータベースを必要とすることをお勧めします。

Nginx - nginxを使用している大規模なサイトがたくさんあるので、確かにいいツールです。それがまさにあなたのための正しいツールであるかどうかは、あなたのデザインによって決まります。私はおそらくこの部分では、設計の中心ではないように思われ、システムの残りの部分がレイアウトされているので、ここで必要なものを検討することができます。

Amazon EC2 - いくつかの選択肢の1つです。これらの選択肢は、リンゴとリンゴの比較では直接比較するのが難しいです。大規模システムはEC2から構築されているため、そこに概念証明があり、一般的なアーキテクチャは適切なマッチであるようです。実際のグレムリンがどこにあるのか知りたいのであれば、EC2で大規模な作業をしたコンサルタントが必要です。

Amazon S3 - 私は、ビデオと画像の両方にS3を使用している非常に高いストレージと帯域幅のサイトを個人的に知っています。それはそれのために働く。

これは、正しい方法で使用すると、一般的には使いやすいツールです。レディスは、実際のアプリケーションのストレージニーズに応じて疑問点になります(ゼロの要件を満たしており、ゼロの要件でデータベースを選択することはできません)。より合理的な答えは、システムが1,000,000人にサービスするために何ができる必要があるかを分析する高水準の要件をまとめることに基づいています。これらの要件は、システムのスケーリングを開始するための既知の機能と比較することができます。次に、いくつかのテストをシステムの特定の部分で実行するためのベンチマーキングテストをまとめなければなりません。失敗の成功の多くは、アプリの構築方法やツールの選択方法などによって異なります。さまざまなタイプのツールを使用してスケールを成功させることができます。ヘックは、Facebook上で実行されます(よく、実行時に実際に典型的なPHPではない高度に変更されたカスタマイズされたPHP)。

+0

上記のスタックを明確にしていただきありがとうございます! – sinusGob

関連する問題