27

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

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

4

3 回答 3

32

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

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

真正归结为并发性。您的 servlet 需要多长时间才能完成对请求所需的操作。每个并发请求都有一个线程,因此,如果您尝试以 2000 个请求/秒的速度处理单个请求,则需要 500 毫秒来处理……您将需要一些硬件。问题不在于 tomcat,而是您的 servlet 的可用资源之一。

于 2011-08-25T16:57:13.273 回答
7

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

于 2011-08-25T18:29:58.330 回答
1

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

于 2011-08-25T15:30:52.707 回答