【问题标题】:A single servlet for all server request types vs multiple servlets -- one for each request type所有服务器请求类型的单个 servlet 与多个 servlet - 每个请求类型一个
【发布时间】:2014-08-28 20:38:18
【问题描述】:

假设在一个高流量的网络服务器上,有来自客户端的不同类型的请求。例如:用户请求与内部/管理类型。 而且,在用户请求中, 有你想更及时服务的人 (因为它们对时间更紧迫,更频繁等)。

处理这些请求的单个 servlet 是“轻量级的”——它看到 每个请求是关于什么的,并立即调用后端进程来处理它。

因此,如果您想对这些请求进行优先级排序,请在服务器上对这些后端进程进行优先级排序——给它们更多的 CPU 时间,为它们分配多个服务器实例,等等。

这里的问题是:是否做同样的事情 servlet 以及这些后端进程是否是一个问题。 我知道 servlet 容器(在本例中为 Tomcat) 有一些机制——虽然我不知道具体是什么/如何。

在这个讨论的一方面——:编写不同的 servlet 针对不同的客户请求,以便您可以 在服务器级别管理他们的优先级/执行时间。

另一方面——没有,根本没有: servlet(s) 正在处理请求并分派它们 到相应的进程而不消耗执行时间。 后端流程对时间至关重要。 事实上,这正是 Spring 正在做的事情—— 将DispatcherServlet 作为所有传入请求的前端控制器。 作为所有请求的前端控制器的单个 servlet 是健全的架构。

这个讨论是几天前提出的。直到那时, 我站在“不”一边——就在上面的那一段。 但是,我现在还不是很清楚。 我想知道什么是对声称的合理反驳 "管理 servlet 类型的优先级 提高了服务客户端请求的时间性能。”

TIA。

//=============================================== =====

编辑:

如果上面的情况“是”,那么 Spring 是如何判断的 servlet 容器了解不同类型的请求,以便 s.container 可以对它们进行优先级排序?

【问题讨论】:

  • servlet 容器和DispatcherServlet 都不会区分您的请求的语义。容器调度一个线程,该线程将调用DispatcherServletservice 方法,该方法最终将到达您的处理程序。此外,Servlet API 没有指定任何有关请求优先级的行为。

标签: java spring tomcat servlets


【解决方案1】:

我认为请求优先级不会对线程时间执行产生巨大影响,除非在单个 Web 服务器上谈论像数百万个线程这样的巨大流量。但如果这是你想要的,你可以配置 tomcat 来确定优先级线程。 Tomcat 允许你指定执行器线程池中每个线程的优先级:tomcat thread pool

【讨论】:

  • Spring 如何告诉 Tomcat 线程——哪个是哪个? Spring 只有一个 servlet,即 DispatcherServlet。
  • spring 处理指定 url 模式的请求,例如 spring/krams/*spring-djasper-hibernate-hql 在这个例子中,spring 将处理每个包含 /krams/* 的 URL 的请求,其他的一切都不会由 Spring 处理,所以我猜tomcat会处理其他请求。不过我从来没有尝试过。
  • 处理程序将选择后端进程。它仍然是 Spring 中的单个 servlet,并且该 servlet 管理处理程序、进程、视图等之间的所有传递。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-02
相关资源
最近更新 更多