Scenario setup
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. }
Cases:
现在如果我直接使用机器ip命中这个servlet,使用一个非常慢的客户端(2 KB下载速度)
我在tomcat中的工作线程将在 println(VERY_LONG_JSON_200KB);
行停留约100秒 . 因为 VERY_LONG_JSON_200KB
不适合套接字缓冲区而线程要等待 .
在这种情况下,由于客户端连接速度慢,我的tomcat线程卡住了 .
NOW
而不是直接连接到tomcat机器的ip . 我在tomcat前添加了一个Google负载均衡器 .
现在使用慢客户端,我通过负载均衡器连接到tomcat .
现在 println
行在 1 ms
中执行 .
这意味着load Balancer会快速消耗tomcat的响应,然后将其提供给客户端 . 这很好,因为我的tomcat线程没有卡住 .
Question 现在出现的问题是,负载均衡器会有多少请求快速消耗并按照客户端的速度运行 .
例如:假设1000个并发慢速客户端进来,Google负载均衡器将为所有1000个请求快速消耗来自tomcat的响应 .
1 回答
正如您可以在此处阅读[1]:“(...)它支持每秒1百万次查询,具有始终如一的高性能和低延迟 . ”
所以,是的,Google Cloud Load Balancer将能够快速请求tomcat后端的响应速度高达每秒100万个请求 .
[1] https://cloud.google.com/load-balancing/