Java EEベースのWebアプリケーションが Glassfish アプリサーバークラスターで実行されています。着信トラフィックは主に、アプリケーションリソースのXMLベースの表現に対するRESTfulリクエストです。 、ただし、トラフィックの5%は、JSONベースまたはXHTML/CSSベースの表現である可能性があります。
現在、クラスター内のGlassfishインスタンス全体に着信トラフィックを分散するための負荷分散ソリューションを調査しています。また、RESTリソース名(例:「/ user/bob」、「/ group/jazzlovers ")であり、その値は対応するXML表現です。
有望に聞こえる1つのアプローチは、1つの石で両方の鳥を殺し、軽量で高速な nginx HTTPサーバー/リバースプロキシを使用することです。 Nginxは、最初にmemcachedでURIを検索して、有効期限が切れていないXML表現がすでに存在するかどうかを確認することで、各着信リクエストを処理します。そうでない場合、nginxはGlassfishインスタンスの1つにリクエストを送信します。 nginx memcachedモジュールについては、 この短い記述 で説明されています。
このように使用されたnginxとmemcachedの全体的な印象はどうですか?それらにどの程度満足していますか?それらについて学ぶのに最も役立つリソースは何ですか?あなたがそれらを試したが、それらがあなたの目的に合わなかった場合、なぜそうではなく、代わりに何を使用しましたか?
注:ここに 関連する質問 があります。 ServerFaultについて知る前に、私はこれを StackOverflow で尋ねました。
編集:ここまでのすべての回答は非常に役に立ちましたが、直接的な経験はありませんでした。 この回答 最終的にStackOverflowに表示され、nginx/memcachedの設定ではかなり強気でした。
あなたは本当にあなたのウェブサーバーの前にキャッシュサーバーを使うべきです。 Varnish-cacheをお勧めします。私たちはスカンジナビアで最大かつ最も忙しいウェブサイトで仕事でそれを使用しています。高負荷のイカボックス13個をワニスボックス1個、スペア用1個に交換しました。
私のプライベートWebサイトで簡単なアプリのベンチマークを行ったところ、1秒あたり9リクエストから2000以上になりました。
物事をメモリに保持する期間を決定します。時間の終わりまで実行し、データが変更されたときにhttpパージ要求をキャッシュサーバーに送信するだけです。
経験から、私の個人的な意見は、ロードバランサーを使用している場合、そのボックスを完全にロードバランシング機能に限定することです。ロードバランサーにキャッシュからでもコンテンツを提供させると、高負荷の状況下でロードバランシング機能が低下します(より多くの接続がより長くアクティブのままであり、全体的な容量とスループットが低下します)。
アプリ自体にルックアップを実行させ、キャッシュされたコンテンツを提供して、ロードバランサーにその仕事を任せることをお勧めします。そうは言っても、nginxは負荷分散に関しては完璧ではなく、非常に基本的なラウンドロビンアルゴリズムしか提供していません。代わりにhaproxyをお勧めします。私の経験では、SSL復号化サービスを前もって必要とする場合、nginxはhaproxyの前に座ってもうまく機能します。
ロードバランシング、高可用性などが必要になる場合は、行き止まりになると思います。
また、そのような状況を考慮してください。ユーザーが認証されると、ページの外観が異なり、追加機能が利用可能になり、ユーザーごとに個別化されます。リンクなどの利便性のためにURLは同じです。たとえば、認証されたユーザーがコメントのために名前/キャプチャを入力する必要がないサイトや、uがログインすると、サイトの上部にユーザー名が表示されます(serverfaultなど)。このような場合、認証されたユーザーと認証されていないユーザーを区別できないため、nginxは使用できなくなります。
SSLが必要ない場合は、Varnishを実行することをお勧めします。 Webサーバーやプロキシではなく、HTTPアクセラレータとして設計されています。 SSLが必要な場合は、SSLアクセラレータとしてnginxを実行し、プレーンHTTPアクセラレータとしてvarnishを実行します。VarnishはSSLを処理できないためです。
キャッシングサーバーの選択はアプリケーション固有であり、アプリの詳細な分析なしにそれについて一般的なコメントをすることはできないと思います。
私の選択はhaproxyです。非常に小さく、非常に高速なリバースプロキシですが、キャッシュプロキシではありません。キャッシュシステム「SquidWebProxy」に使用しています
CACHE /squid/ -> Load-balancing /Haproxy/ -> WEB I /lighttpd/
-> WEB II /lighttpd/
-> WEB III /lighttpd/
これは私のWebシステムに最適です