私は2つのセットアップを想像できます:
負荷分散してからキャッシュ
+-- Cache server #1 (varnish) -- App server #1
/
Load Balancer (haproxy)-+---- Cache server #2 (varnish) -- App server #2
\
+-- Cache server #3 (varnish) -- App server #3
キャッシュ、次に負荷分散
+-- App server #1
/
Cache Server (varnish) --- Load Balancer (haproxy) --+---- App server #2
\
+-- App server #3
最初のセットアップの問題は、複数のキャッシュがあることです。これは多くのメモリを浪費し、キャッシュの無効化をより複雑にします。
2番目のセットアップの問題は、1つ(haproxy)ではなく、パフォーマンスヒットと2つの単一障害点(varnishとhaproxy)が存在する可能性があることです。
Haproxyとvarnishの両方が高速で安定しているはずなので、2番目のセットアップを使用したいと思います。あなたの意見は何ですか?
忙しいWebアプリケーション用に数年前に同様のセットアップを構築し(Varnishの代わりにSquidを使用してのみ)、うまく機能しました。
最初のセットアップ(HAProxy-> Varnish)を2つの変更を加えて使用することをお勧めします。
keepalived
と共有仮想IPを使用してセカンダリHAProxyサーバーを追加しますbalance uri
キャッシュヒットを最適化するロードバランシングアルゴリズム長所:
短所:
どちらにも長所と短所があります。 HAProxyとVarnishの両方の構成を含む、以下のブログ記事の詳細: http://blog.exceliance.fr/2012/08/25/haproxy-varnish-and-the-single-hostname-website/
バプテスト
2 LBを使用しない理由、最初のLBはbalance uri
オプション、2番目のLBは選択した戦略(ワークロード、ラウンドロビン)を使用できます
+-- Cache Server #1 --+ +-- App server #1
/ \ /
LB #1 --+ + -- LB #2 --+---- App server #2
\ / \
+-- Cache Server #2 --+ +-- App server #3
必要な場所で、必要なだけ拡張します。キャッシュでボトルネックになっていないことがわかった場合は、LB#1を削除して、キャッシュサーバーを1つだけ前に配置してください
もちろん最初のもの!
URIベースのバランシング用に構成されたHAProxyを使用。 (IPバランシングモードとは反対のセッションがある場合は、アプリケーションユーザーセッションを配布する必要があります)。
特にHTTPSエンドポイントが必要な場合、VarnishはHTTPSを使用しないためです。