java - 管理每个 Servlet 的 Tomcat 请求
问题描述
我希望从社区中获得一些最佳实践指导。
今天我帮助管理一个 Java Web 应用程序。我们使用 Tomcat 作为容器,总共有大约 50 个 servlet。其中大部分是标准HttpServlet的扩展,尚未更新以利用 Servlet 3.X 规范的任何新异步处理功能。这些 servlet 为 UI 通信、客户端设备通信等提供支持。
我们希望缓解的问题是通过一个 servlet 发出的大量请求会导致其他 servlet 饿死。这是双重的。首先,过多的请求会消耗我们 100% 的系统资源并使系统无响应。我们可以限制和调整这些请求,使它们消耗更少的资源,但这通常会导致连接池中的堆积。无论哪种方式,我们最终都会遇到其他 servlet 没有响应的情况。
我们目前正在研究解决方案,其中包括利用 Servlet 3.0 的异步功能和线程池来支持应用程序的不同区域。首先,这将使我们能够更好地调整应用程序以适应不同类型的请求。其次,这将使我们能够评估请求的类型并相应地对其进行优先级排序。我们总是会有资源限制,至少这种方法允许我们处理最重要的工作。
我们正在争论的一个理论上的困难是,在我们将所有东西都转换为这种新方法之前(可能需要一段时间),经典的 servlet 和请求仍然会使应用程序挨饿。
我对 SO 社区的具体问题是......
- 当我们朝着这个机制努力时,有没有办法让我们在一个 servlet 的基础上限制请求以防止饱和?
- 有没有关于这种类型转换的“最佳实践”的资源?
- 我们想要的状态有什么陷阱吗?如果是这样,你有什么建议来减轻它们?
最后,我确实意识到,在大规模范围内,这是处理大量不同类型请求的单个单体应用程序的副产品。我们目前正在努力将应用程序模块化,并可能使我们能够将应用程序分布在不同的系统中。
谢谢!