【发布时间】:2012-09-20 15:51:44
【问题描述】:
有一个 Web 应用程序的设计,我不确定如何评估它的好坏。
思路如下:
您在 Tomcat 中部署了一个 Web 应用程序(非常重要),它接受客户端请求。我猜这个负载可能是 Tomcat 可以处理的。
现在实际处理不在容器内完成,而是委托给另一个进程,它通过单个TCP 连接进行连接。所以这里基本上发生的是多路复用。
IE。客户端请求由客户端同时发送,这些请求作为消息发送到另一个进程以处理(我猜该进程本身将是多线程的),但通过一个连接。
我从一位同事那里听过类似的设计(在另一个平台上),性能非常好,但从我的角度来看,这在使用单个 TCP 连接方面存在瓶颈。
虽然我在多线程方面经验丰富,但我并不真正了解或使用过异步方法(nio 等),我想知道这是否属于这一类。
有没有人使用多路复用作为大型项目的一部分(至少是这种方式)?这是一个不错的选择吗?
【问题讨论】:
-
我不认为在两台机器之间打开更多的tcp连接会增加吞吐量;它可能会损害吞吐量。所以一个连接更好。当然,这需要精心设计。
-
@irreputable:您说得有道理。但是如果您的客户端负载非常大,在同一连接上进行多路复用会节省资源,但响应速度是否足够快?
-
@irreputable:另外,好吧,不是 1,但是 3 呢?还是正好4?这样的数字怎么在设计时确定?显然你不能在实现完成后进行性能测试和重构,在这种情况下
-
如果它是连接数据库的好选择 - 准确调整后 - 我不明白为什么连接池在您的架构中不是一个好主意
-
...如果我说 tcp 连接是一种消息总线是正确的,那么它的实现实际上应该隐藏在 api 后面的库中,并且可以与其他库互换
标签: java multithreading performance tomcat