如何在tomcat上处理2000多个请求/秒?

我正在用Java开发一个SMS应用程序。 我的客户通过短信发送查询,将通过短信网关以http请求的forms转发给我的服务器。 现在,我的应用程序处理请求,并通过SMS Gateway再次向客户端发回响应。 最多只能发送300个字符作为响应。 我期待非常高的流量(2000个请求/秒)。 我想与一些虚拟主机公司(考虑到mochahost)托管我的应用程序。 在托管(RAM,CPU等)之间我应该考虑哪些因素以及主要瓶颈是什么? 如果调整得当,专用的tomcat服务器可以处理如此高的流量吗? 你有什么建议?

没有数据库交互(我只使用Java堆内存)。 我用JMeter进行了测试(100个请求/秒)。 我的堆内存使用量是35MB,平均响应时间是532ms。而且我没有使用任何会话变量。

如果不知道你在servlet中了什么,就很难回答你的问题。 但简短的回答是它与tomcat没有任何关系。

我们目前使用戴尔R410s(双四核,32G内存)为我们的Tomcat服务器。 对于与后端的membase集群通信的REST服务,我们可以在单个服务器上轻松处理~15k req /秒(这是使用Jersey JAX-RS实现)。 我们目前有4个这样的F5负载均衡器。 这些请求中的每一个平均在大约10ms内得到服务。

真正归结为并发性; servlet需要多长时间才能完成对请求所需的操作。 你有一个线程用于每个并发请求,所以如果你尝试2000 req / sec并且一个请求需要500ms来处理……你将需要一些硬件。 问题不是tomcat,而是servlet的可用资源之一。

在适度硬件上使用默认设置的单个Tomcat服务器应该可以轻松处理2k请求/秒,假设每个请求没有太多工作要做。 如果处理一个请求需要500多毫秒,您可能需要提高线程池中的线程数,并且您可能会开始推动限制。 或者,如果您可以将某些工作卸载到其他一些线程,它将加快响应时间,并且您可以保留默认的200个线程。 然后,这只是一个问题,即您的工作线程是否能够跟上传入的请求。 这取决于您的负载是恒定还是突发,以及您在处理过程中可以接受多少延迟。 这甚至不能解决HA,DR以及您可接受的停机时间。 这是一个很大的平衡行为,并且有太多的变量可以给出一个简洁的答案。

看起来您可能必须实现集群/负载平衡方法。 看一下这个例子吧。