java – 防止客户端重载服务器?

我有一个Java servlet,在高峰时段因客户端请求而过载.一些客户端跨越并发请求.有时每秒的请求数量太多了.

我应该实现应用程序逻辑来限制客户端每秒可以发送的请求数吗?这是否需要在应用程序级别完成?

最佳答案
处理此问题的两种最常见方法是在服务器太忙时关闭请求,或者更慢地处理每个请求.

转移请求很容易;只运行固定数量的实例.操作系统可能会也可能不会排队一些连接请求,但通常用户将无法连接.更优雅的方法是让服务返回错误代码,指示客户端应该稍后再试.

处理请求的速度要慢一些,因为它需要将处理请求的servlet与在不同线程中执行工作的类分开.您可以拥有比工蜂更多的servlet.当一个请求进来时,它接受它,等待一个工蜂,抓住它并使用它,释放它,然后返回结果.

两者可以通过java.util.concurrent中的一个类进行通信,例如LinkedBlockingQueueThreadPoolExecutor.如果你想真正看中,你可以使用像PriorityBlockingQueue这样的东西来为其他客户提供服务.

我,我会像Anon说的那样抛出更多的硬件;)

转载注明原文:java – 防止客户端重载服务器? - 代码日志