【问题标题】:Designing a web-application: where should business logic reside?设计一个 Web 应用程序:业务逻辑应该驻留在哪里?
【发布时间】: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


【解决方案1】:

我同意你的看法。这是一个瓶颈和糟糕的设计。如果第二个 TCP 服务器可以是多线程的并且一次处理多个客户端,那么您当然应该以这种方式实现它,就像另一个 TCP 服务器(例如 Tomcat 本身)一样,并使用多个连接到它。

【讨论】:

  • 1)如果第二台服务器接受多个连接而不是只有一个,正如您所指出的那样,如果后端处理直接从 Web 应用程序完成可能会更好 in首先是 tomcat 而不是作为委托向其他进程发送请求? 2)@irreputable 的评论在某种意义上似乎是合理的,认为在物理层消息无论如何都会按顺序发送,但你认为这样的理由可以证明这样的设计选择是合理的吗?
  • :我误解你的答案了吗?你是说要在 Tomcat 中处理所有事情?不知道你说的 second TCP server 是什么意思
猜你喜欢
  • 2023-04-03
  • 2010-12-22
  • 1970-01-01
  • 2011-06-28
  • 1970-01-01
  • 2011-04-20
  • 1970-01-01
  • 2012-10-06
  • 2016-12-18
相关资源
最近更新 更多