私の本当の質問は、上記の技術スタックが1秒あたり1,000,000メッセージ(テキスト、画像、ビデオ)をスケーリングできるかどうかです。
確かにできます。適切な設計と十分なハードウェアを備えています。クライアントが尋ねるべき問題は、実際にはそれをそれほど大きくすることができるかどうかではなく、どのようなコストと実用性でそれを行うことができ、それらが最良の選択であるかということです。
あなたが言及した各部分を見てみましょう:
node.js -I / O中心のアプリの場合、大規模な場合に最適であり、クラスター内に多数のCPUをデプロイすることで拡張できます(サーバーごとのマルチプロセスとマルチサーバーの両方)。このタイプのスケールがどれほど実用的であるかは、これらすべてのサーバープロセスがアクセスする必要のある共有データの種類に大きく依存します。通常、データストアは、リクエスト処理でより多くのサーバーをスローするのが簡単であるため、最終的にスケーリングのボトルネックになります。一元化されたデータストアにハードウェアを追加するのはそれほど簡単ではありません。それを行う方法はいくつかありますが、それはあなたがそれをどのように行うか、そしてそれがどれほど難しいかについてのアプリの要求に大きく依存します。
socket.io -小さいメッセージの効率的なサーバープッシュが必要な場合は、socket.ioがクライアントへのプッシュで最も効率的であるため、おそらく最善の方法です。しかし、それはすべての種類の輸送で素晴らしいわけではありません。たとえば、socket.ioを介して大きな画像やビデオを移動することはありません。これを行うには、より多くの目的に合わせた方法があります。したがって、socket.ioの使用は、アプリがそれを何に使用したいかに大きく依存します。動画をクライアントにプッシュしたい場合は、URLだけをプッシュして、クライアントに向きを変えて、よく知られている大規模なテクノロジーを使用して通常のhttpURL経由で動画をリクエストすることもできます。
Redis -繰り返しになりますが、すべてではなく、いくつかの点で優れています。だから、それは本当にあなたがやろうとしていることに依存します。前に説明したのは、データストアの設計とそれを介したトランザクションの数は、おそらく実際の規模の問題が存在する場所であるということです。この仕事を始める場合は、サーバーのデータストレージのニーズ、さまざまなタイプの1秒あたりのトランザクション数、キャッシング戦略、冗長性、フェイルオーバー、データの永続性などを理解することから始め、高度な設計を行います。最初にデータへのアクセスを拡大します。 redisが好ましい選択であるかどうかは完全にはわかりません。プロジェクトの早い段階で、コンサルタントとして大規模なデータベース担当者が必要になることをお勧めします。
Nginx -nginxを使用している大規模なサイトがたくさんあるので、確かに優れたツールです。それがあなたにとって正確に正しいツールであるかどうかは、あなたのデザインに依存します。この部分は設計の中心ではないように思われるため、おそらく最後に作業します。システムの残りの部分がレイアウトされたら、ここで必要なものを検討できます。
Amazon EC2 -いくつかの可能な選択肢の1つ。これらの選択肢は、リンゴとリンゴの比較で直接比較するのは困難です。大規模なシステムはEC2から構築されているため、そこには概念実証があり、一般的なアーキテクチャは適切に一致しているようです。実際のグレムリンがどこにあるかを知りたい場合は、EC2で大規模な作業を行ったコンサルタントが必要です。
Amazon S3 -私は個人的に、ビデオと画像の両方にS3を使用している非常に高いストレージと帯域幅のサイトをいくつか知っています。それはそのために機能します。
したがって...これらは、適切な方法で使用されている場合、一般的に使用するのに適したツールである可能性があります。 Redisは、実際のアプリケーションのストレージニーズに応じて疑問符になります(要件がゼロであると、データベースを選択できません)。より合理的な答えは、1,000,000を提供するためにシステムが実行できる必要があることを分析する一連の高レベルの要件をまとめることに基づいています。これらの要件は、システムのスケーリングに関する球場を開始するために、これらの要素のいくつかの既知の機能と比較できます。次に、システムの特定の部分でいくつかのテストを実行するために、いくつかのベンチマークテストをまとめる必要があります。失敗の成功の多くは、どのツールが選択されたかと同様に、アプリがどのように構築され、ツールがどのように使用されたかに依存します。多くの異なるタイプのツールを使用して、成功するスケールを作成できる可能性があります。ちなみに、FacebookはPHPで実行されます(高度に変更され、カスタマイズされたPHPであり、実行時のPHPは実際にはまったく一般的ではありません)。