慢客户端期间的Google负载均衡器行为

时间:2018-04-04 05:49:06

标签: java tomcat google-compute-engine load-balancing

场景设置
1.假设我有一个在谷歌计算机上运行的tomcat。 我有一个简单的hello world servlet,如下面的

1. public void doGet(HttpServletRequest req, HttpServletResponse res)
2.  throws ServletException, IOException {
3.  sysout("request IN")
4.  PrintWriter out = res.getWriter().println(VERY_LONG_JSON_200KB);
5.  sysout("request OUT")
6. }

例:

现在,如果我直接使用机器ip命中这个servlet,使用非常慢的客户端(2 KB下载速度)
tomcat中的工作线程将在println(VERY_LONG_JSON_200KB);行停留约100秒。因为VERY_LONG_JSON_200KB不适合套接字缓冲区而线程不适合等待。

在这种情况下,由于客户端连接速度慢,我的tomcat线程卡住了。

立即

而不是直接连接到tomcat机器ip。我在tomcat前添加了一个Google负载均衡器 现在使用慢速客户端,我通过负载均衡器连接到tomcat 现在,println行已在1 ms中执行。

这意味着load Balancer会快速消耗tomcat的响应,然后将其提供给客户端。 这很好,因为我的tomcat线程没有卡住。

问题 现在出现的问题是,负载均衡器会有多少请求快速消耗并按照客户端的速度运行。

例如:假设1000个并发慢速客户端进来,Google负载均衡器将为所有1000个请求快速消耗tomcat的响应。

1 个答案:

答案 0 :(得分:0)

正如您可以在此处阅读[1]:"(...)它支持每秒100万次查询,具有始终如一的高性能和低延迟。"。

所以,是的,Google Cloud Load Balancer将能够快速请求tomcat后端的响应速度高达每秒100万次。

[1] https://cloud.google.com/load-balancing/