我们正在开发一个使用 haproxy 负载均衡的 HTTP Web 服务。通过 SSL 访问 Web 服务。它是一个 RESTful HTTP 服务,只接受 JSON,做一些工作,然后返回 JSON。没有会话的概念。
我们在一对冗余 Web 服务服务器前设置了冗余负载平衡器。每台服务器都位于 Apache 后面,其中 Apache 用作代理以处理 SSL 和日志记录。如果重要的话,我们的 web 服务是一个 Clojure (java) 应用程序,它使用 compojure (jetty) 来处理 HTTP。
这是一个简短的图表,显示了通过我们现有系统的客户端请求的路径。
client request -> haproxy (load balancing) -> apache (ssl, logging) -> webservice
我们希望任何到负载均衡器的连接都建立一个持久连接,然后由同一台服务器为通过该持久连接发送的所有后续请求提供服务。换句话说,我们不希望 haproxy 的持久连接向多个 Web 服务服务器发出请求。
你会如何建议我们让这个工作?我们如何将给定的负载均衡器连接“固定”到特定的 Web 服务服务器?我们如何防止意外加载具有多个密集请求的特定 Web 服务服务器?