gpt4 book ai didi

java - 管理每个 Servlet 的 Tomcat 请求

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:47:14 24 4
gpt4 key购买 nike

我希望从社区获得一些最佳实践指导。

今天,我帮助管理一个 Java 网络应用程序。我们使用 Tomcat 作为容器,总共有大约 50 个 servlet。其中大部分是标准 HttpServlet 的扩展尚未更新以利用任何新的 asynchronous processing capabilities Servlet 3.X 规范。这些 servlet 为 UI 通信、客户端设备通信等提供支持。

我们希望缓解的问题是通过一个 servlet 的大量请求可能会导致其他 servlet 饿死。这是双重的。首先,过多的请求会消耗我们 100% 的系统资源并导致系统无响应。我们可以限制和调整这些请求,使它们消耗更少的资源,但这通常会导致连接池中堆积。无论哪种方式,我们最终都会遇到其他 servlet 没有响应的情况。

我们目前正在研究的解决方案包括利用 Servlet 3.0 的异步功能和线程池来支持应用程序的不同区域。首先,这将使我们能够更好地调整应用程序以适应不同类型的请求。其次,这将使我们能够评估请求的类型并相应地对其进行优先排序。我们总是会有资源限制,至少这种方法可以让我们处理最重要的工作。

我们正在讨论的一个理论上的困难是,在我们将所有内容都转换为这种新方法之前(可能需要一段时间),经典的 servlet 和请求仍然会使应用程序饿死。

我对 SO 社区的具体问题是......

  1. 在我们致力于此机制的同时,我们是否有任何方法可以逐个 servlet 限制请求以防止饱和?
  2. 是否有任何关于此类转化的“最佳实践”的资源?
  3. 我们想要的状态是否存在缺陷?如果是这样,您有什么建议来减轻它们?

最后,我确实意识到,在大规模情况下,这是处理大量不同类型请求的单一整体应用程序的副产品。我们目前正在努力将应用程序模块化,并可能使我们能够跨不同系统分发应用程序。

谢谢!

最佳答案

如果我能提出一个不太离题的答案,您可以为不同的 Executors 赋予不同的优先级.

需要对其进行测试以查看好处是否真实和良好,但如果您能够负担得起两次运行该应用程序(一次由 Executor 运行),这可能是一个临时解决方案。有罪的 servlet 将由最低优先级的执行器处理,而所有其余的将由最高优先级处理。

我看到了不同的实现方式。通过更改 web.xml 以隐藏应用程序 1 中的 servlet 并转发到应用程序 2,或者通过实现 filter拦截对这个有罪的 servlet 的调用,然后将其发送到第二个应用程序。

关于java - 管理每个 Servlet 的 Tomcat 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50974238/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com