Pour voir le temps de réponse des différentes pages / backends, etc... tu peux activer les logs HTTP dans haproxy. Ca te donne le temps de connexion, le temps de réponse, etc... de chacun des serveurs en fonction de la requête.
ensuite, tu utilises halog, dispo dans le répertoire contrib des sources, et ça te compile tout ça tout proprement, en te listant les URLs les plus lentes, les backends les plus lents, etc.... => si une URL est systématiquement plus lentes que les autres peu importe le serveur, alors le code est optimisable.
En fonction de la capacité de traitement de tes serveurs d'appli, je te conseillerais de bien tuner con maxconn/fullconn. Il est possible d'améliorer les temps de réponses applicatifs sans rien changer d'autres que ces paramêtres.
Si tu ne caches que du statique non-généré par l'application, tu peux utiliser du content switching au niveau du haproxy. Un exemple de conf: http://blog.exceliance.fr/2011/06/17/smart_content_switching_for_news_websit...
Au niveau du Varnish, tu as la fonction grace qui est interessante, pour servir un contenu "pas frais" le temps que le serveur délivre le nouvel objet.
a+