需求分析:
由于种种问题,导致蜘蛛访问和抓取量大的的时候,后台数据库高负载,影响正常的用户访问和英文平台的访问!比较推荐的做法是写robot.txt文件,但seo方面又希望对蜘蛛访问不做速度和页面方面的限制,典型的僧多粥少场景,或者使用oracle的资源计划来限制数据库用户的会话连接数,但可能对正常的用户造成影响!所以想做一个相对智能的脚本对爬虫进行适当的限制,保证数据库服务器负载正常的情况下,最大限度的允许爬虫访问,当然这只是治标不治本的方法,临时解决下,正常还是要去优化数据库的SQL,或者用缓存等手段做静态化的页面,再不然就做数据库的读写分离,hiberinate框架生成的SQL不是人看的;

策略原则:
利用防火墙,临时限制蜘蛛访问,降低oracle数据库的负载量,每隔3分钟自动关闭防火墙,尽量减少对蜘蛛访问的影响

一:前端web设置任务计划和相关脚本

[root@server195 ~]# crontab -l
*/3  *  * * *  /usr/local/scripts/flush_iptables.sh

[root@server195 ~]# cat /usr/local/scripts/flush_iptables.sh
#!/bin/sh
/sbin/iptables -F
/sbin/iptables -X
/sbin/iptables -Z
/sbin/iptables -t nat  -F
/sbin/iptables -t nat  -X
/sbin/iptables -t nat  -Z

防火墙脚本进行蜘蛛IP 60秒动态抽取,该脚本由oracle服务器端来调用,web服务器和oracle服务器之间需要配置ssh密钥信任

[root@server195 ~]# cat /usr/local/scripts/deny_spider.sh
#!/bin/sh
#function: deny some spider to protect oracle server
#author:lw.yang
#modify_time:2011-12-20

DATE=$(date +%Y%m%d)

rm -rf /tmp/soso_spider_ip.txt /tmp/youdao_spider_ip.txt /tmp/sogou_spider_ip.txt /tmp/baidu_spider_ip.txt
service iptables stop

tail -f /data/apache_logs/access_log_$DATE |grep -i 'spider'|grep -i 'soso' |awk -F ' ' '{print

$3}' >> /tmp/soso_spider_ip.txt &

tail -f /data/apache_logs/access_log_$DATE |grep -i 'spider'|grep -i 'youdao' |awk -F ' '

'{print $3}' >> /tmp/youdao_spider_ip.txt &

tail -f /data/apache_logs/access_log_$DATE |grep -i 'spider'|grep -i 'sogou' |awk -F ' '

'{print $3}' >> /tmp/sogou_spider_ip.txt &

tail -f /data/apache_logs/access_log_$DATE |grep -i 'spider'|grep -i 'baidu' |awk -F ' '

'{print $3}' >> /tmp/baidu_spider_ip.txt &

sleep 60

killall -9 tail

for i in $(cat /tmp/soso_spider_ip.txt /tmp/youdao_spider_ip.txt /tmp/sogou_spider_ip.txt

/tmp/baidu_spider_ip.txt|uniq);

do

iptables -A INPUT -s $i/32 -p tcp --dport 80 -j DROP

done

二:数据库端的任务计划和相关脚本

[root@server199 ~]# crontab -l
*/1 *  *             *  *  /usr/local/scripts/check_load.sh

[root@server199 ~]# cat /usr/local/scripts/check_load.sh
#!/bin/sh
#function: trigger deny spider scripts on web server
#author:lw.yang
#modify_time:2011-12-20

LOAD=$(uptime |awk -F ',' '{print $4}' |awk -F  '.' '{print $1}'  |cut -d ':' -f 2)

if [ -f /tmp/begin_deny_spider.txt ];then
      exit
      elif  [ $LOAD -gt 18 ];then
      date > /tmp/begin_deny_spider.txt
      ssh -p 2007 192.168.1.195 /usr/local/scripts/deny_spider.sh &
      elif [ $LOAD -lt 10 ];then
      rm -rf /tmp/begin_deny_spider.txt
      else
      exit
  fi

三:效果
限制前

限制后

web端防火墙列表

四:robot.txt文件和apache配置限制方法参考

# cat robots.txt
User-agent: *
Robot-version: 2.0
Crawl-delay: 10
Request-rate: 90/1m

Disallow: /WEB-INF/

apache配置:

SetEnvIfNoCase User-Agent "^Sogou"          bad_bot
    SetEnvIfNoCase User-Agent "^Sosospider"     bad_bot
    SetEnvIfNoCase User-Agent "^qihoobot"       bad_bot
    SetEnvIfNoCase User-Agent "^CollapsarWEB"   bad_bot

<Directory "/data/">
        Options FollowSymLinks
        AllowOverride None
        Order deny,allow
        Deny from env=bad_bot
        Allow from all
</Directory>

2011年12月22日更新check_load脚本,采用后台常驻进程运行,取消crontab

[root@server199 ~]# cat /usr/local/scripts/check_load.sh
#!/bin/sh
#function: trigger deny spider scripts on web server
#author:lw.yang
#modify_time:2011-12-22

while true
 do
    LOAD=$(uptime |awk -F ',' '{print $4}' |awk -F  '.' '{print $1}'  |cut -d ':' -f 2)

if [ $LOAD -gt 8 ];then
        ssh -p 2007 192.168.1.195 /usr/local/scripts/deny_spider.sh &
    fi

if   [ $LOAD -lt 4 ];then
         ssh -p 2007 192.168.1.195 /usr/local/scripts/flush_iptables.sh &
    fi

sleep 3
done

蜘蛛,爬虫多,代码质量差下的相对供求平衡策略相关推荐

  1. 代码质量差,啥都干不好!丨技术大牛:你的代码正在毁掉你!

    最近一年来,听到很多的工程师说: 每次面试都会因为设计原则和设计模式被问的灰头土脸: 面试时现场敲代码,功能都实现了,但还是被别人吐槽代码质量差: 工作中一遇到增加需求或者需求变更,就头皮发麻,只能把 ...

  2. 聊聊代码质量 - 《学得会,抄得走的提升前端代码质量方法》前言

    点击一键订阅<云荐大咖>专栏,获取官方推荐精品内容,学技术不迷路! <聊聊代码质量> 代码质量对公司和个人都很重要.但提升代码的方式有很多,在时间和资源有限的情况下,我们该做哪 ...

  3. 【笔记】编程的原则:改善代码质量的101个方法

    代码必然被修改 Code will be changed 代码不是写完就结束了,它在日后必然会被修改.没有写完就扔的一次性代码. 在编写代码的时候,我们应将"代码会被修改"这一点作 ...

  4. 怎么提高代码质量?-来自Google的研发经验总结

    你的团队有没有过这样的经历:开发效率低,招了很多人,天天加班,出活却不多,线上bug频发,领导发飙,中层束手无策,工程师抱怨不断,查找bug困难.其实这些都是代码质量差惹的祸.代码质量是研发质量管理的 ...

  5. 程序员如何提升自己的代码质量?

    本文转载至:http://www.zhoudev.com/?p=19 文章只针对有一定语言基础的人. 写本文的原因,其实很简单:团队的代码质量实在是太差了,而我又是一个在代码方面有很强洁癖的人,所以经 ...

  6. 代码质量与规范,那些年你欠下的技术债

    提到"质量"二字时,我们的第一反应往往是"有多少BUG?""性能好不好?"这样的问题.我们对软件产品或服务的质量定义看其能不能满足用户的需求 ...

  7. php 判断爬虫程序,php判断搜索引擎蜘蛛爬虫还是人为访问代码

    php判断搜索引擎蜘蛛爬虫还是人为访问代码. function checkrobot($useragent=''){ static $kw_spiders = array('bot', 'crawl' ...

  8. 某外包程序员炫耀:不用管绩效和代码质量,工作摸鱼,从不加班,没有pua,外包是真的舒服!...

    业界都说外包员工苦,但一个外包员工却用亲身经历 证明:外包员工完胜正式员工! 他说:外包不用管绩效和代码质量,有活就慢慢做,到点下班.工作时间刷手机,聊天,一个单表的crud做一周,不用排查线上问题. ...

  9. 提高 Android 代码质量的4个工具

    在这篇文章中,我将通过不同的自动化工具如CheckStyle,FindBugs,PMD以及Android Lint来介绍(如何)提高你的安卓代码质量.通过自动化的方式检查你的代码非常有用,尤其当你在一 ...

最新文章

  1. 分享一个针对触摸设备优化的图片幻灯jQuery插件 - touchtouch
  2. systemback-----做你折腾的后盾
  3. 从零入门 Serverless | 教你 7 步快速构建 GitLab 持续集成环境
  4. 后面的参数_常用的JVM参数,你现在就记好
  5. BundleFusion
  6. 线程函数的设计以及MsgWaitForMultipleObjects函数的使用要点
  7. 机器学习 凝聚态物理_机器学习遇到了凝聚的问题
  8. 李飞飞:阿里云数据库已做好全面服务政企市场的准备
  9. mysql-bin日志文件清理
  10. linux如何安装网卡驱动6,详解CentOS 6.5如何安装Realtek无线网卡驱动
  11. for..of 循环
  12. STL中vector介绍
  13. (五)谷歌地图坐标转换:经纬度如何实现转换成谷歌地图平面坐标
  14. 不同范数下的余弦定理_平行四边形法则与勾股定理–内积与范数
  15. python 作图:heatmap
  16. 计算机算法在生物信息学中的应用,生物信息学在系统发育分析中的应用(自己原创) - 生物科学 - 小木虫 - 学术 科研 互动社区...
  17. 171230 编程-井字棋(逆)的先手必胜策略
  18. 使用Ansj实现分词
  19. CloudFlare系列--使用第三方来自定义CDN的IP(笨牛简洁版)
  20. 用js做一个简单的论坛发布

热门文章

  1. python词频云图_python安娜卡列妮娜词云图制作
  2. 关于python字典以下选项中描述错误的是_关于 Python 对文件的处理,以下选项中描述错误的是_学小易找答案...
  3. docker 安装nginx_Docker18安装Nginx和Apache实验
  4. python argvparser_Python命令行参数argv和argparse该如何使用
  5. hmr webpack 不编译_一文搞懂 webpack HMR 原理
  6. HealthKit开发快速入门教程之HealthKit框架体系创建健康AppID
  7. 等于x分之a的平方的导数_数学漫谈导数
  8. canvas 嵌套_canvas初探
  9. 电大本科计算机考试题库及答案,电大计算机考试题题库及答案.doc
  10. 2天训练出15亿参数大模型,国产开源项目力克英伟达Megatron-LM,来自LAMB作者团队...