如何阻止漫游器超载我的performance不佳的Web应用程序?

我们有这样一种情况,即僵尸程序占据了低性能Web应用程序页面请求的40%。

短期救济

作为即时救济,我想到了以下几点:

  • 设置应用程序的另一个实例指向数据库的从属副本。 调用这个“服务器B”,而主应用程序是“服务器A”)
  • 将所有botstream量转发到“服务器B”,将所有其他请求转发到主应用“服务器A”

通过服务器将“botstream量”从“用户stream量”中分离出来,会给服务器端更精确的分析带来额外的好处(即知道所有stream量来自“真实用户”而不是来自机器人)。 另外,我们可以使用较慢的服务器来处理“botstream量”,并将更多的资源投入到“真正的客户”

上下文

  • 目前使用Apache 2.2与mod_proxy前端。
  • 后端是jboss / tomcat
  • 我们有一个手动维护的机器人头部列表(例如baidu,bingbot,googlebot,msnbot等)

题:

  • apache(或者mod_proxy)可以根据头文件转发请求(例如,将所有的请求都用baidu,googlebot,msnbot等转发到ServerB,所有其他的都转发到Server A)

请考虑任何其他build议

提前致谢

几点build议:

  • 看看使用User-Agent将机器人(或类似的东西)路由到一个静态页面,所以你的应用程序不会花费周期来响应机器人。 看到有一些例子的mod重写指南
  • 是使用robots.txt一个选项? 这可能是缓解服务器负载的最简单的select。 添加另一台服务器可能是“昂贵的”(及时和维护),并不会是我的第一select。

有可能因为没有真正回答你的问题而陷入低谷。

  1. 您可以使用Google网站pipe理员工具中的设置来减慢Googlebot的速度。

  2. 大多数主要抓取工具都支持robots.txt中的Crawl-delay指令来减缓抓取速度。 雅虎的机器人可能特别具有侵略性。

  3. 在robots.txt中完全禁用百度等。 他们对你没有什么好处

  4. 将攻击性僵尸视为DOS攻击,并使用IPTABLES或Apache的mod_security插件来限制来自每个IP的请求频率。