2

この件に関してはすでにたくさんのドキュメントがあることは知っていますが、Appengine やその他の提供するインスタンスが実際にどのように機能するかについての簡単な説明を探していました。

応用ソフトが複雑でなければどう動くかはわかるのですが、次のケースに興味があります。

ポート 8888 で着信接続をリッスンするプログラムを書いたとしましょう。そのサーバーを通常のサーバーで実行すると、ポート 8888 が開かれ、リッスンが開始されますが、理論的には 65.535 接続しか受け入れることができません (どのシステムでも利用可能なポートの数だけしかないため)。実際には、この数値はかなり低くなりますが、理論について話しましょう。そのアプリケーションを拡張したい場合は、ローカル エリア ネットワークに別のコンピューターを追加し、2 台のコンピューターに着信接続を均等にロードするロード バランサーも用意する必要があります。しかし、問題はそれだけにとどまりません: 着信クライアントが互いのデータにアクセスする必要がある場合はどうでしょうか。これは、バックグラウンドでデータベースを同期する必要があることを意味します。したがって、両方のサーバーがデータベース内のすべてのデータのコピーを保持します (データベースが何であれ)。これにはおそらく、サーバーの構成を追加し、サーバー プログラムに追加するコードを追加する必要があります。無数の問題に遭遇しましたが、それらの概要をもう一度説明しましょう。

  1. 別のサーバーを LAN に追加します。
  2. クラスタリングをサポートするように両方のサーバーを構成します。
  3. サーバー プロセスに追加のコードを記述して、クラスタリングが行われていることを認識します。
  4. 着信接続の負荷分散。
  5. バックエンド データベース内のデータの複製。

しかし、これはまだすべての話ではありません。2 人のユーザーがリアルタイムでチャットする必要がある場合に、クラスタリングを念頭に置いて 2 通信チャット サーバーを実装する必要がある場合はどうでしょうか。最初のユーザーが最初のサーバーに接続され、2 番目のユーザーが 2 番目のサーバーに接続されている場合、最初のユーザーから sencond にデータを送信する方法と、その逆の方法は非常に複雑な問題です。これにより、テーブルに別の問題が追加されます。

  1. 異なるサーバーに接続しているユーザー間のリアルタイム通信。

上記の問題は非常に複雑で、簡単には解決できません。それについて考え、一つ一つ解決するには数え切れないほどの時間が必要です。しかし、Appengine/Amazon/Heroku などのソリューションは、すべてを処理すると言っています。ここに私の質問があります。

  1. さまざまな提供によるインスタンスが実際にどのように機能するのか、次の 3 つに興味があります。

    • App エンジン
    • アマゾン
    • ヘロク
  2. 同時に 65,000 人以上の接続ユーザーをサポートするように、サーバー アプリケーションをどのように拡張できるでしょうか?

  3. より多くのインスタンスが実行されている場合でも、どのインスタンスが DB からデータをプルしても、バックエンド データベースのデータが同じであることをどのように保証できますか?

  4. 異なるインスタンスに接続されたユーザー間のリアルタイム通信は、本当に期待通りに機能するでしょうか?

  5. すべてのソフトウェアが何らかのハードウェアで実行されている場合、通常は 10 台のハードウェア サーバーをクラスターに接続する必要があるのと同じ数のインスタンスを実装して連携させるにはどうすればよいでしょうか。

上記の問題の説明は、開発者/プログラマー/管理者がインスタンスが実際にどのように機能するかをよりよく理解するのに本当に役立つと思います. 仕組みがわからないと、どの製品を使うべきかを本当に決めることはできないと思います。

ありがとうございました

4

1 に答える 1

3
  1. さまざまな提供によるインスタンスは実際にどのように機能しますか?

    Appengine : プロセス ベースのように機能します。あなたは本当のサーバーを持っていません。App Engine は、クラウド アーキテクトで Web サービスを提供しようとし、CPU 時間、データベース クエリ、Web リクエストなど、使用するリソースの数を計算します。スケールまたは拡張するために何もする必要はありません。

    Amazon (EC2 インスタンス) : インスタンスを作成して実行し、通常の物理サーバーのように使用します。物理サーバーのように拡張および設計します。ストレージには Amazon S3、データベースには Amazon RDS が必要になる場合があります。

    Heroku : Heroku インスタンスは dyno を呼び出します。各 dyno は、Web プロセス、バックグラウンド プロセス、スケジューラ プロセスなどの各ジョブ サービスを提供します。たとえば、1 つの Web dyno を作成すると、Web サイトにサービスを提供するために 1 つのプロセスが実行されている 1 つの Apache Web サーバーがあるようになります。サービスへの各リクエストは、次のリクエストを処理する前に完了する必要があり、リクエストのタイムアウトは 30 秒です。必要な数の dyno を作成できます。Heroku には postgresql が付属しており、キャッシュ サイズを支払う必要があります。

  2. スケーラブルについては、以前の回答でスケーリングする方法について既に言及しています。

    65k を超える接続をサポートする場合。接続を提供するために必要な数のインスタンスを作成できます。

  3. データベースは別のシステムに保存されます。あなたの説明から、あなたのアプリケーションは各サーバーに個別のデータベースを持っていると思います。しかし、PaaS に移行すると、バックエンドに単一のデータベースがあるように見えます。各インスタンスは同じデータベースに接続し、インスタンス ユーザーがどこに接続しても同じデータを取得できるようにします。

  4. アプリケーションをどのように設計するかによって異なります。たとえば、以下のプロセス フローでチャット アプリケーションを作成するとします。

    • 送信者

      1. 送信側クライアントがチャット サーバーにメッセージを送信する
      2. Chat Server ストア メッセージを DB に保存する
    • レシーバー

      1. 受信者クライアントは、チャット サーバーから更新メッセージを取得します
      2. チャット サーバーは DB から更新メッセージを取得します
      3. チャット サーバーが更新メッセージを受信者に送信する

    上記のフローでは、各ユーザーが常に同じデータベースから同じデータを取得するため、各ユーザーがどのインスタンスに接続したかを気にする必要はありません (データベースへの読み取り/書き込みが遅れる可能性がありますが、エンド ユーザーは同じメッセージを受け取ります)。 )。

  5. 単一のデータベースがあるため、これを行う必要はありません。バックエンドでは、データベースを必要なだけ大きく強力に拡張できますが、フロントエンドからアプリケーションまでは同じです。

于 2012-11-17T10:19:09.527 に答える