use*_*196 6 java servlets request
我有一个Java servlet,在高峰时段因客户端请求而过载.一些客户端跨越并发请求.有时每秒的请求数量太多了.
我应该实现应用程序逻辑来限制客户端每秒可以发送的请求数吗?这是否需要在应用程序级别完成?
处理此问题的两种最常见的方法是在服务器太忙时拒绝请求,或者减慢处理每个请求的速度。
拒绝请求很容易;只需运行固定数量的实例。操作系统可能会也可能不会对一些连接请求进行排队,但通常用户将无法连接。一种更优雅的方法是让服务返回一个错误代码,指示客户端应稍后重试。
较慢地处理请求会需要更多工作,因为它需要将处理请求的 servlet 与在不同线程中执行工作的类分开。您可以拥有比工蜂数量更多的 Servlet。当请求到来时,它接受它,等待工蜂,抓取它并使用它,释放它,然后返回结果。
两者可以通过java.util.concurrent中的类之一进行通信,例如LinkedBlockingQueue或ThreadPoolExecutor。如果您想真正变得更奇特,您可以使用PriorityBlockingQueue之类的东西来先为某些客户提供服务。
我,我会像 Anon 所说的那样投入更多硬件;)
| 归档时间: |
|
| 查看次数: |
3521 次 |
| 最近记录: |