2

I am building a scalable Server Side App in Java but I need to know the "Do's and the Dont's".

The app needs clients to connect to the server via TCP Sockets, I heard lot of good things about Apache MINA so I thought I'd give it a try and build around this. I would also need the app to communicate to a Database and send suitable data to the clients either on request or push.

I would me managing my own home server so even that would be under my control.

I have some doubts about the following:

  • Does a Server side need to have a GUI, to report status, connectivity and exceptions. If so how do I implement this, should I use Swing?
  • MINA is handling the connectivity but how do I handle the database(MySQL)?
  • How could I test this app for scalability, how can I simulate client connections to the server.
  • Is there any framework that can do all of the above or do I have to handle each aspect.
4

5 に答える 5

3

このアプリのスケーラビリティをテストするにはどうすればよいですか。サーバーへのクライアント接続をシミュレートするにはどうすればよいですか。

スケーラビリティのテストには、ApacheJMeterをお勧めします。これは、アプリケーションの負荷を作成および測定するための、優れた無料の非常に簡単なツールです。応答時間、1秒あたりのトランザクション数、サーバーの負荷などに関する情報を取得できます。

私はそれをHTTPアプリケーションでかなり使用しました。TCPアプリケーションの場合、TCPサンプラーがありますが、既に作成した接続コードを使用して、Javaサンプラーの実装を作成する方がおそらく簡単です。また、テスト中にサーバーのCPU /メモリを測定できるように、 rstatdサンプラープラグインと組み合わせることをお勧めします。

ツールに慣れるまでに数日かかる場合がありますが、かなり役に立ちました。

サーバー側には、ステータス、接続、および例外を報告するためのGUIが必要ですか。

正直なところ、サーバー側のGUIはおそらくやり過ぎです。確かに、赤と緑のライトが点滅し、ログがスクロールするようなコンソールがあると便利ですが、結局のところ、これらはすべてYAGNIのアイテムにすぎません。

サーバーが追跡したいトランザクションとイベントのログと監査情報を書き込んでいる限り、それで十分です。GUIがあると、サーバーが複雑になり、バグが増える可能性があります。さらに、ログを効果的に使用している場合は、他の監視/アラートメカニズム(SNMPなど)にプラグインできます。

データベース(MySQL)をどのように処理しますか?

他の答えにはいくつかの良い提案があります。これはおそらくそれ自体でより適切にカバーされているトピックであり、それについて多くの質問がありました。ORM + Javaを検索して、良い意見を得ることをお勧めします。ここにいくつかのまともなリンクがあります:

さまざまなORMのすべてについてさまざまな意見を見つけることができます。また、それらをまったく使用しないことを支持する人もいます。それ自体は意見がありません。選択肢を調べた後、その仕事に適していると思うものを使用してください。

上記のすべてを実行できるフレームワークはありますか、それとも各側面を処理する必要がありますか?

疑わしいです、そしてもしあれば、それはおそらくとても一般的で、とにかくそれのためにたくさんのコードを書くことになるでしょう。ORM + GUIの場合(GUIを使用する場合)、GrailsのようなJVMで実行されるすぐに使用できるMVC+データベースWebソリューションがあります。しかし、あなたの質問のほとんどは異なる問題領域を含み、それぞれが独自の個別の解決策を必要としています。

于 2009-11-29T15:52:44.360 に答える
2

サーバー側には、ステータス、接続、および例外を報告するためのGUIが必要ですか。もしそうなら、これをどのように実装しますか?Swingを使用する必要がありますか?

GUI側である必要はありません。ログをファイルに書き込むか、Windowsイベントログなどの他のログサーバーを使用できます。

MINAは接続を処理していますが、データベース(MySQL)をどのように処理しますか

MySQLデータベースにアクセスするには、さまざまな方法があります。確かに、swingには、このためのフレームワークがあります。また、休止状態を試すこともできます。これは、.NETのLINQに似ていますが、Java用です。

このアプリのスケーラビリティをテストするにはどうすればよいですか。サーバーへのクライアント接続をシミュレートするにはどうすればよいですか。

そのためのテストフレームワークが必要です。JUnitを試してください。

于 2009-11-29T15:17:52.643 に答える
2

MINAは優れたフレームワークです。

  • サーバー側には、ステータス、接続、および例外を報告するためのGUIが必要ですか。もしそうなら、これをどのように実装しますか?Swingを使用する必要がありますか?

短い答え:いいえ!
長い答え:大規模なサーバーシステムのほとんどにはディスプレイさえないため、サーバーには通常GUIがありません。より良い解決策は、JMXを使用して統計を提供することです。MINAには、JMXサービスに追加するだけでよい事前定義されたMBeanがあります。JMXクライアントを使用すると、これらの情報にアクセスしてGUIを構築できます。
JConsoleを試して、ローカルJavaアプリケーションを選択するだけでそれについてのアイデアを得ることができます。

  • MINAは接続を処理していますが、データベース(MySQL)をどのように処理しますか?

データベースを処理する方法はたくさんあります。純粋なJDBC、Hibernate、または別のORMフレームワークのいずれか。使用しているものがスレッドセーフであることを確認してください。

  • このアプリのスケーラビリティをテストするにはどうすればよいですか。サーバーへのクライアント接続をシミュレートするにはどうすればよいですか。

単純なクライアントを作成して数千回起動するか、専用のテストフレームワークを使用します。既存のプロトコルを使用している場合は、そのための特定のプロトコルがある可能性があります。

  • 上記のすべてを実行できるフレームワークはありますか、それとも各側面を処理する必要がありますか?

プロトコルと何を達成したいかによって異なります。すべてを1つにまとめるMINAベースのFTPサーバーがありますが、これは特定の実装であり、ニーズに適合しません。
独自のプロトコルを使用している場合は、en-/decodersとプロトコルおよびメッセージの処理を独自に実装する必要があります。これには、データベースでのメッセージ情報の保存が含まれます。

于 2009-12-01T12:31:00.237 に答える
1
  • サーバー側には、ステータス、接続、および例外を報告するためのGUIが必要ですか。もしそうなら、これをどのように実装しますか?Swingを使用する必要がありますか?

いいえ、そうする必要はありません。例外はログファイルに記録する必要があります。クライアントから要求された場合、ステータスはシンプルなコンソールで報告できます。そして接続情報も。言い換えれば、(Swing)GUIは便利かもしれませんが、とにかく低レベルのものから始める必要があり、それは優先度の低い機能であり、持っていると便利です。

  • MINAは接続を処理していますが、データベース(MySQL)をどのように処理しますか?

この質問がデータベース接続に関するものなのか、データベースアクセスに関するものなのかわかりません。データベースアクセスに関する場合は、実行する作業の複雑さとOOnessに応じて、ORMが適切かどうかはわかりません。その場合は、生のJDBCを使用することをお勧めします。詳細がなければ、答えることは不可能です。データベース接続の処理に関する場合は、c3p0のような接続プールを使用しますが、JNDIは忘れてください。

  • このアプリのスケーラビリティをテストするにはどうすればよいですか。サーバーへのクライアント接続をシミュレートするにはどうすればよいですか。

このため、他の回答で示唆されているように、JMeterとそのTCPサンプラーがその役割を果たします。

  • 上記のすべてを実行できるフレームワークはありますか、それとも各側面を処理する必要がありますか?

私が言ったように、これ以上の詳細がなければ、より具体的または正確な答えを出すことは不可能です。

于 2009-11-29T16:14:08.780 に答える
1
  • アプリケーションが言及していることを報告することが重要だと思う場合は、おそらくそうすべきです。SwingをGUIとして使用できます。Web開発の経験が豊富な場合は、サーバーアプリにデータベースへの書き込みを行わせ、これをWebページに表示することもできます(データベースを介して別の方法で書き込むこともできます)。選択は、アプリケーションがどのように進化すると思うかに基づいて行う必要があります。

  • データベース操作が制限されている場合は、単純な古いJDBCライブラリを使用できます。これにより、MySQLデータベースとの間で書き込み/読み取りを実行するために必要なクラスが提供されます。アプリケーションのサイズ/複雑さがある程度大きくなると思われる場合は、ある種のORM (Hibernateなど)を検討することをお勧めします。

  • JMeterは、クライアントサーバー設定でクライアントの負荷をテストするためのツールであることを読みました。私はこれを自分で試したことがありません。JUnitはこれを測定するのに役立ちません。

于 2009-11-29T15:22:23.040 に答える