Je peux imaginer deux configurations:
Load-balance puis cache
+-- Cache server #1 (varnish) -- App server #1
/
Load Balancer (haproxy)-+---- Cache server #2 (varnish) -- App server #2
\
+-- Cache server #3 (varnish) -- App server #3
Cache puis équilibrage de charge
+-- App server #1
/
Cache Server (varnish) --- Load Balancer (haproxy) --+---- App server #2
\
+-- App server #3
Le problème avec la première configuration est qu'il existe plusieurs caches, ce qui gaspille beaucoup de mémoire et rend l'invalidation du cache plus compliquée.
Le problème avec la deuxième configuration est qu'il pourrait y avoir un impact sur les performances et deux points de défaillance uniques (vernis et haproxy) au lieu d'un seul (haproxy)?
Je suis tenté d'aller avec la deuxième configuration car haproxy et vernis sont censés être rapides et stables: quelle est votre opinion?
J'ai construit une configuration similaire il y a quelques années pour une application Web chargée (seulement je l'ai fait avec Squid au lieu de Varnish), et cela a bien fonctionné.
Je recommanderais d'utiliser votre première configuration (HAProxy -> Varnish) avec deux modifications:
keepalived
et une IP virtuelle partagéebalance uri
algorithme d'équilibrage de charge pour optimiser les accès au cacheAvantages:
Les inconvénients:
Les deux ont des avantages et des inconvénients. Plus dans l'article de blog ci-dessous, y compris la configuration pour HAProxy et Varnish: http://blog.exceliance.fr/2012/08/25/haproxy-varnish-and-the-single-hostname-website/
Baptiste
Pourquoi ne pas utiliser 2 LB, le premier LB peut utiliser balance uri
option, le deuxième LB peut utiliser la stratégie de votre choix (charge de travail, round robin)
+-- Cache Server #1 --+ +-- App server #1
/ \ /
LB #1 --+ + -- LB #2 --+---- App server #2
\ / \
+-- Cache Server #2 --+ +-- App server #3
Échelle là où vous en avez besoin, combien vous en avez besoin. Si vous trouvez que vous n'êtes pas goulot d'étranglement dans Cache, supprimez simplement LB # 1 et placez un seul serveur Cache devant
Bien sûr, le premier!
Avec HAProxy configuré pour l'équilibrage basé sur l'URI. (Vous devez distribuer votre session utilisateur d'application si vous en avez d'autres en mode d'équilibrage IP).
Surtout si vous avez besoin d'un point de terminaison HTTPS, car Varnish ne parle pas HTTPS.