Web services 如何向负载平衡的HTTP Web服务添加持久连接支持
我们正在使用haproxy实现HTTP Web服务负载平衡。Web服务是通过SSL访问的。它是一个RESTful HTTP服务,只接受JSON,做一些工作,然后返回JSON。没有会话的概念 我们在一对冗余webservice服务器前面设置了冗余负载平衡器。每台服务器都位于Apache的后面,Apache被用作代理以处理SSL和日志记录。如果重要的话,我们的Web服务是一个Clojure(java)应用程序,使用compojure(jetty)处理HTTP 这是一个简图,显示了客户机请求通过现有系统的路径Web services 如何向负载平衡的HTTP Web服务添加持久连接支持,web-services,keep-alive,haproxy,persistent-connection,Web Services,Keep Alive,Haproxy,Persistent Connection,我们正在使用haproxy实现HTTP Web服务负载平衡。Web服务是通过SSL访问的。它是一个RESTful HTTP服务,只接受JSON,做一些工作,然后返回JSON。没有会话的概念 我们在一对冗余webservice服务器前面设置了冗余负载平衡器。每台服务器都位于Apache的后面,Apache被用作代理以处理SSL和日志记录。如果重要的话,我们的Web服务是一个Clojure(java)应用程序,使用compojure(jetty)处理HTTP 这是一个简图,显示了客户机请求通过现有系
client request->haproxy(负载平衡)->apache(ssl,日志)->webservice
我们希望到负载平衡器的任何连接都建立一个持久连接,然后由同一服务器为通过该持久连接发送的所有后续请求提供服务。换句话说,我们不希望与haproxy的持久连接向多个webservice服务器发出请求
你会建议我们如何让它工作?我们如何将负载平衡器的给定连接“固定”到特定的webservice服务器?我们如何防止意外加载具有多个密集请求的特定webservice服务器?在我们的HAProxy配置中,我们使用
cookie
选项在后端级别执行此操作。这是因为他有许多网站,其中一些我们确实想要持久性,而另一些我们不想要
在我们所做的工作中,后端在haproxy.cfg
中如下所示:
backend examplesite
cookie STK insert indirect nocache maxidle 30m maxlife 8h
server server1 192.168.0.1:80 cookie n1
server server2 192.168.0.2:80 cookie n2
这将在第一次请求时设置名为STK
的cookie。Haproxy将自动为此cookie分配一个值,然后使用该值向同一节点发送后续请求
我们还决定添加n1
和n2
cookie前缀。。。这意味着如果请求要发送到节点1,cookie值将以n1
作为前缀,如果请求要发送到节点2,cookie值将以n2
作为前缀。这在调试时非常有用
无论哪种方式,我都建议您看看周围的
cookie
选项
您可能还需要查看appsession
选项。这允许HAProxy将现有cookie(如ASPNetSessionId或PHPSESSIONID)用于相同目的
我以前在这方面有问题,但最近有一个服务器故障问题的答案,应该可以解决这个问题。您可以在请求中使用一个额外的cookie来尝试它 在
默认值
块中使用平衡源代码
,同时删除选项httpclose
条目,就达到了这个效果。谢谢。我们正在运行一个HTTP Web服务,它接受并返回JSON。连接到Web服务的客户端不是浏览器,所以我怀疑cookie在这种情况下是否有用。