2

Web アプリケーションの背景:

java/spring-mvc/tomcat を使用して Web サービスを提供し、安静な API をモバイル クライアントに公開しています。私は今、Web サーフェイスのすべてに満足しています。問題は、私のアプリケーションのコアに非常に重い計算プロセスがあり、別の Java プログラムを呼び出して画像を処理し、計算されたデータを Web サービスに返すことです。EC2 インスタンスのメモリを大量に消費したり、Tomcat7 サーバーをシャットダウンする例外を引き起こしたりすることがあります。

質問:

現在、すべてが同じ tomcat7 コンテナーの下で実行されています。これら 2 つを分離して別のサーバーにインストールできるようにするソリューションを探しています。おそらく、プログラムだけを計算するための高メモリ サーバーを見つけます。

それらを分離し、スケーラビリティと安定性を向上させるオプションは何ですか?

アップデート:

プログラムまたはコマンド ラインからコンピューティング エンジンを呼び出すことができます。

アップデート2:

私は答えに基づいていくつかの研究を行いました。Apache Camel とは正確には何ですか?に関する別の投稿を読んだとき 、おそらく EIP パターンについてもう少し学ぶべきだと思います。うまくいけば、それはやり過ぎではありません。

提案に基づくソリューション

EIP の概念、camel の動作、activemq を読んだ後、最終的に解決策を思いつきました。エレガントではないかもしれませんが、機能しています。提案やコメントをいただければ幸いです。apache-camel に基づいてキュー ルーターを作成し、activemq ブローカーに接続し、1 つのサーバーでスタンドアロン プログラムとして実行しました。スタンドアロン コンテナーで実行されているコンピューティング エンジンとルーターは、web サーバーで私の spring コンテナーからの jms リクエスターを処理する責任があります。後でさらに集中的なコンピューティングが必要な場合は、camel からコンピューティング エンジンの負荷分散を構成する必要があります。

4

3 に答える 3

1

現在注目されているのは、ハードウェアの追加です。これで問題が解決するかどうかをよく考える必要があります。例: 32 ビット JVM を使用している場合、指定できるヒープ サイズには制限があります。幸運にも 64 ビットの JVM を使用できる場合は、メモリ用のスペースが大きくなります。しかし、CPU を使いすぎてアプリケーションが応答しなくなる可能性は常にあります。

私は計算集約型のタスクを複数のジョブに分割し、別の JVM で処理することを好みます。失われないように、ジョブをデータストア/JMS に永続化します。ロックを回避するために、これらのジョブから DB 更新を行う場合は注意してください。

于 2012-08-28T21:13:19.030 に答える
1

私の理解が正しければ、ロードバランサーが必要なようです。

  1. Web サービス/コンピューティング エンジンの複数のインスタンスの 1 つにルーティングするロード バランサーを用意します。これは、esb、ルーティング エンジン、クラスター化、マスター スレーブ、分散キャッシュなどを使用して実現できます。これらのほとんどは相互に関連しています。また、負荷に基づいて EC2 で追加のノードをリアルタイムでスピンアップすることもできます。

  2. それ以外の場合、タスクが壊れる可能性がある場合は、複数のノード/サービスに委任します。いくつかのオーケストレーション メカニズムが必要になります。

上記の 1 と 2 に対処できるオープン ソース ソリューションがあります。

于 2012-08-29T01:56:27.827 に答える
0

バックエンドは同期的に動作しますか? つまり、モバイル クライアントが何かを要求したとき、バックエンドが多くの処理を行うのを待たなければならないのでしょうか?

はいの場合は、水平方向に拡張して、より多くのワーカー ノード (バックエンド Web アプリケーション) とフロント Nginx または任意のバランサーを配置できます。それが最速の方法です。

再利用可能なデータはありますか?はいの場合は、memcached などを使用できます。

より多くの情報を提供していただければ、より良いアドバイスを提供できると確信しています。

于 2012-08-28T22:23:27.407 に答える