我希望能从社区中获得一些最佳实践指导。
今天我正在管理一个Java Web应用程序。我们使用Tomcat作为容器,总共有大约50个servlet。其中大部分是标准的HttpServlet的扩展,并且没有更新以利用Servlet 3.X规范的任何新异步处理能力。这些servlet驱动着各种UI通信、客户端设备通信等等。
我们希望解决的问题是:一个servlet的请求过多可能会使其他servlet无法响应。这有两个方面。首先,过多的请求可能会消耗100%的系统资源,并使系统无响应。我们可以对这些请求进行限流和调整,使其消耗更少的资源,但这通常会导致连接池积压。无论哪种情况,我们最终都会发现其他servlet无响应。
我们目前正在研究的解决方案包括利用Servlet 3.0的异步功能和线程池来支持应用程序的不同领域。首先,这将使我们能够更好地调整应用程序以适应不同类型的请求。其次,这将使我们能够评估请求的类型并根据需要设置优先级。我们总是会有资源限制,至少这种方法可以让我们处理最重要的工作。
我们正在讨论的一个理论难点是,在我们将所有内容转换为这种新方法之前(可能需要一段时间),传统的servlet和请求仍然可能导致应用程序饱和。
我对SO社区的具体问题是...
- 在我们朝着这个机制努力的同时,是否有任何方法可以按servlet分别限制请求以防止饱和?
- 有关此类转换的“最佳实践”是否有任何资源可用?
- 我们期望达到的状态是否存在任何陷阱?如果存在,你有什么建议来减轻它们?
最后,我确实意识到,在大规模的情况下,这是处理许多不同类型请求的单个单块应用程序的副产品。我们目前正在进行一项努力,即将应用程序模块化,并可能使我们达到一个可以在不同系统之间分配应用程序的点。
谢谢!