この件に関してはすでにたくさんのドキュメントがあることは知っていますが、Appengine やその他の提供するインスタンスが実際にどのように機能するかについての簡単な説明を探していました。
応用ソフトが複雑でなければどう動くかはわかるのですが、次のケースに興味があります。
ポート 8888 で着信接続をリッスンするプログラムを書いたとしましょう。そのサーバーを通常のサーバーで実行すると、ポート 8888 が開かれ、リッスンが開始されますが、理論的には 65.535 接続しか受け入れることができません (どのシステムでも利用可能なポートの数だけしかないため)。実際には、この数値はかなり低くなりますが、理論について話しましょう。そのアプリケーションを拡張したい場合は、ローカル エリア ネットワークに別のコンピューターを追加し、2 台のコンピューターに着信接続を均等にロードするロード バランサーも用意する必要があります。しかし、問題はそれだけにとどまりません: 着信クライアントが互いのデータにアクセスする必要がある場合はどうでしょうか。これは、バックグラウンドでデータベースを同期する必要があることを意味します。したがって、両方のサーバーがデータベース内のすべてのデータのコピーを保持します (データベースが何であれ)。これにはおそらく、サーバーの構成を追加し、サーバー プログラムに追加するコードを追加する必要があります。無数の問題に遭遇しましたが、それらの概要をもう一度説明しましょう。
- 別のサーバーを LAN に追加します。
- クラスタリングをサポートするように両方のサーバーを構成します。
- サーバー プロセスに追加のコードを記述して、クラスタリングが行われていることを認識します。
- 着信接続の負荷分散。
- バックエンド データベース内のデータの複製。
しかし、これはまだすべての話ではありません。2 人のユーザーがリアルタイムでチャットする必要がある場合に、クラスタリングを念頭に置いて 2 通信チャット サーバーを実装する必要がある場合はどうでしょうか。最初のユーザーが最初のサーバーに接続され、2 番目のユーザーが 2 番目のサーバーに接続されている場合、最初のユーザーから sencond にデータを送信する方法と、その逆の方法は非常に複雑な問題です。これにより、テーブルに別の問題が追加されます。
- 異なるサーバーに接続しているユーザー間のリアルタイム通信。
上記の問題は非常に複雑で、簡単には解決できません。それについて考え、一つ一つ解決するには数え切れないほどの時間が必要です。しかし、Appengine/Amazon/Heroku などのソリューションは、すべてを処理すると言っています。ここに私の質問があります。
さまざまな提供によるインスタンスが実際にどのように機能するのか、次の 3 つに興味があります。
- App エンジン
- アマゾン
- ヘロク
同時に 65,000 人以上の接続ユーザーをサポートするように、サーバー アプリケーションをどのように拡張できるでしょうか?
より多くのインスタンスが実行されている場合でも、どのインスタンスが DB からデータをプルしても、バックエンド データベースのデータが同じであることをどのように保証できますか?
異なるインスタンスに接続されたユーザー間のリアルタイム通信は、本当に期待通りに機能するでしょうか?
すべてのソフトウェアが何らかのハードウェアで実行されている場合、通常は 10 台のハードウェア サーバーをクラスターに接続する必要があるのと同じ数のインスタンスを実装して連携させるにはどうすればよいでしょうか。
上記の問題の説明は、開発者/プログラマー/管理者がインスタンスが実際にどのように機能するかをよりよく理解するのに本当に役立つと思います. 仕組みがわからないと、どの製品を使うべきかを本当に決めることはできないと思います。
ありがとうございました