我有一个简单的 Web 应用程序,对该应用程序的所有请求都是基于 HTTP 的(RESTfull API 和标准 ajax)
我的 tomcat 集群之前有一个 haproxy。
所以现在我有客户端从我的负载均衡器发出 http 请求,然后负载均衡器将其转发到我的 Web 服务器(tomcat)
我的问题是:
是否可以使负载均衡器 (haproxy) 和我的 tomcat 之间的通信协议比 http 快得多?也许是 tcp?并且仍保持 http 请求流将我的客户端直接导向我的负载均衡器。
编辑
如果我没记错的话,协议图看起来像这样:
客户端-(HTTP)----> Haproxy-(HTTP)---> tomcat
我想使用 tcp 来获得更快的性能,如下所示:
客户端-(HTTP)----> Haproxy-(TCP)---> tomcat
第二张地图不是比第一张地图快得多吗?但这可能吗?
答案1
无论您将 HAProxy 设置为 HTTP 还是 TCP,传输的数据几乎都是相同的。
您是否认为 HAProxy 不会解释 HTTP 流量,因此速度会更快?如果您不使用 ACL 或以其他方式提供额外处理(无论如何,使用 TCP 时您都会放弃这些处理),我怀疑您是否能够察觉到性能上的任何差异,即使如此,我也会感到惊讶。
我认为唯一的区别是,在 TCP 模式下,HAProxy 不会添加标X-Forwarded-For
头,因此您将丢失该信息,而在 HTTP 模式下,它可以阻止无效或格式错误的请求,因此您通过传递这些请求会增加一些风险。
intel C2D E8200/2.66GHz
每秒 82702 个 HTTP 请求,剩余大约 20% 的 CPU 可用
如果您遇到性能问题,我认为您可能需要在设置中查找其他位置或提供有关您所看到的问题的更多详细信息。