我正在用Java开发一个SMS应用程序。我的客户通过短信发送查询,将通过短信网关以http请求的形式转发给我的服务器。现在我的应用程序处理请求并通过SMS Gateway再次向客户端发回响应。最多只能发送300个字符作为响应。我期待非常高的流量(2000个请求/秒)。我想与一些虚拟主机公司(考虑到mochahost)托管我的应用程序。在托管(RAM,CPU等)之间我应该考虑哪些因素以及主要瓶颈是什么?如果调整得当,专用的tomcat服务器可以处理如此高的流量吗?你有什么建议吗?
没有数据库交互(我只使用Java堆内存)。我用JMeter进行了测试(100个请求/秒)。我的堆内存使用量是35MB,平均响应时间是532ms。而且我没有使用任何会话变量。
答案 0 :(得分:26)
如果不知道你在servlet中做了什么,就很难回答你的问题。但简短的回答是它与tomcat没有任何关系。
我们目前在我们的Tomcat服务器上使用Dell R410s(双四核,32G内存)。对于与后端的membase集群通信的REST服务,我们可以在单个服务器上轻松处理~15k req /秒(这是使用Jersey JAX-RS实现)。我们目前有4个这样的F5负载均衡器。这些请求中的每一个平均在大约10ms内得到服务。
真正归结为并发性; servlet需要多长时间才能完成对请求所需的操作。你有一个线程用于每个并发请求,所以如果你尝试2000 req / sec并且一个请求需要500ms来处理......你将需要一些硬件。问题不是tomcat,而是servlet的可用资源之一。
答案 1 :(得分:6)
单个Tomcat服务器在适度硬件上具有默认设置应该可以轻松处理2k个请求/秒,假设每个请求没有太多工作要做。如果处理一个请求需要500毫秒以上,您可能需要增加线程池中的线程数,并且您可能会开始推动限制。或者,如果您可以将某些工作卸载到其他某个线程,它将加快响应时间,并且您可以保留默认的200个线程。然后,这只是一个问题,即您的工作线程是否可以跟上传入的请求。这取决于您的负载是恒定还是突发,以及您在处理过程中可以接受多少延迟。这甚至不能解决HA,DR以及您可接受的停机时间。这是一个很大的平衡行为,并且有太多的变数可以给出一个简洁的答案。
答案 2 :(得分:1)
看起来您可能必须实施群集/负载平衡方法。请查看this示例。