web-dev-qa-db-ja.com

ワニスの前にハプロキシまたは他の方法で?

私は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番目のセットアップを使用したいと思います。あなたの意見は何ですか?

44
MiniQuark

忙しいWebアプリケーション用に数年前に同様のセットアップを構築し(Varnishの代わりにSquidを使用してのみ)、うまく機能しました。

最初のセットアップ(HAProxy-> Varnish)を2つの変更を加えて使用することをお勧めします。

  1. keepalivedと共有仮想IPを使用してセカンダリHAProxyサーバーを追加します
  2. 使用 balance uriキャッシュヒットを最適化するロードバランシングアルゴリズム

長所:

  • HAProxy(x2)およびVarnish(x3)の冗長性による安心
  • HAProxy URIロードバランシングオプションを使用したVarnishでのヒット率効率の向上
  • キャッシュサーバーは、メモリをそれほど保持する必要がないため、パフォーマンスが向上します。
  • 同じURIが毎回同じサーバーに送られるため、キャッシュの無効化は簡単です

短所:

  • URIバランシングはうまく機能しますが、キャッシュサーバーがダウンすると、更新されたURIバランシングハッシュからスラックを拾う他のキャッシュサーバーがキャッシュされたデータを再取得する必要があるため、バックエンドサーバーがヒットします。大したことではないかもしれませんが、私のシステムではそれを念頭に置いておく必要がありました。
38
Matt Beckman

どちらにも長所と短所があります。 HAProxyとVarnishの両方の構成を含む、以下のブログ記事の詳細: http://blog.exceliance.fr/2012/08/25/haproxy-varnish-and-the-single-hostname-website/

バプテスト

11
Baptiste

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つだけ前に配置してください

1
rocketspacer

もちろん最初のもの!

URIベースのバランシング用に構成されたHAProxyを使用。 (IPバランシングモードとは反対のセッションがある場合は、アプリケーションユーザーセッションを配布する必要があります)。

特にHTTPSエンドポイントが必要な場合、VarnishはHTTPSを使用しないためです。

1
Thomas Decaux