0
  • Some large documents (20 - 50 MB) are stored on the server side.
  • A document can be loaded and queried (takes ~ 3 seconds) with a 3rd party program.
  • Only one document can be loaded by the 3rd party program (at a given thread).
  • Clients can request to view the query result of one of the loaded documents.

What is the best way to avoid loading a document upon each client http request?? Is it logical to keep all these loaded documents in memory? If yes, would it require a thread pool, where each thread is holding a document? If no, what are the other options?

(Working with Java - Tomcat - Ubuntu)

4

2 に答える 2

1

キャッシングを行うために、Tomcat の前に別のサーバーを配置します。これを自分で実装すると、必ず問題が発生します。セットアップは次のようになります。

ClientVarnish Caching ServerApache HTTP ServerTomcat

HTTPS が必要な場合は、SSL をサポートしていないため、Varnish の前に別のサーバーを配置することを検討してください (私が思い出したように)。次に、次のようになります。

ClientPoundVarnish Caching ServerApache HTTP ServerTomcat

ある種のルール言語を使用して、Varnish を広範囲に構成できます。とてもいいサービスをしてくれます。

Pound は、SSL の終了や負荷分散に使用できる小さなリバース プロキシです。

リンク:

アパッチ: http://httpd.apache.org/

ワニス: https://www.varnish-cache.org/

ポンド: http://www.apsis.ch/pound

于 2012-05-09T08:00:11.237 に答える
0

外部プログラムでドキュメントを処理している場合、処理結果をどこかにキャッシュする以外にできることはあまりありません。もう 1 つのオプションは、ドキュメントを積極的に前処理し、後で取得できるようにすべての可能なクエリ結果を保存することです。

すべてのリクエストで外部プロセスをフォークすることは、明らかに最悪の選択肢です。

データはWebアプリケーション内で処理され、不変であるため、ファイルをバイトバッファーにmmapして、それらに対して作業することができます。このようにして、JVM でのデータのロードと割り当てを節約できます。

また、クエリはデータを変更しないため、クエリを別のスレッドにプッシュする必要はありません。http リクエストを処理する別のスレッドから直接データにアクセスできます。

于 2012-05-09T09:24:56.667 に答える