今天凌晨1点左右, 在进行一个晚上的性能优化后,准备睡觉时, 我突然想:这么晚了,看还有哪些忠实的用户在访问博客园?打开性能监视器,Current Connections竟然有200-300, 高的时候会达到400左右,这么晚了还有这么多用户,我有点怀疑,是不是有什么软件不停地在爬网站的数据, 而且Current Connections一直在200以上,有必要记录一下这些访问来自何方?
连续一个多星期的奋战已经让我很累,真想早点睡觉,明天再说。可是如果明天白天进行处理,会对网站的运行带来更大的影响,而且网站的性能问题一定要尽快解决,不能再拖下去了。这时,我心里已经在猜测搜索引擎可能是很大的嫌疑对象。
于是,我打起精神,写了点代码,记录所有访问博客园的客户端IP地址及UserAgent。在记录的过程中,我就发现果然有搜索引擎在不停地访问博客园,进行了半小时的记录后,我对记录数据进行了分析,大家先看看数据:
测试时间:1:05-1:35
最大访问来自(UserAgent):sohu agent
访问次数:8439
平均每分钟访问次数:287
好狠的搜索引擎!在肆无忌惮地爬博客园的数据,难怪这么晚还有那么多链接。如果它整天都在这样爬博客园的数据, 那对网站的性能会带来很大的影响,它也许是博客园最近性能问题的凶手之一。没办法,为了网站性能,只能对这样的搜索引擎说“不”,我立即修改代码,拒绝了这个爬虫(sohu agent)! 效果要到早上上班才能看出来。
今天早上,为了防止还有其他疯狂的爬虫,我又对网站访问进行了记录,对记录数据进行分析后又发现了一个疯狂的爬虫:
测试时间:7:19-7:30
最大访问来自(UserAgent): Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)
访问次数:2906
平均每分钟访问次数:264
继续对它说“不”,拒绝它对博客园的访问。
你可能要问:Google是 爬虫的情况怎么样?在记录数据中,Google排名第二,但访问次数不多,只有459, 少好几倍。
虽然这样的分析数据不全面,但对于搜索引擎来说,这样疯狂爬一个网站的数据是不妥的。当它在疯狂地吸取一个网站的数据时,是否考虑会给对方造成影响。Google网站上有这样的说明:“对大多数网站来说,Googlebot 的平均访问频率不会高于数秒钟一次。” 看来Google还是考虑到这个问题了。而发现的这两个疯狂的爬虫,竟然达到了4次/秒。如果它们不停地这样访问一个网站,一般网站的性能会很受影响。看来,博客园最近的性能问题的罪魁祸首可能就是它们了。
拒绝了这两个爬虫(sohu agent与Yahoo! Slurp) 对博客园的访问后,从早上到现在的网站运行情况看,网站性能有了明显的提高,CPU占用明显降下来,平均只有50%, 前几天,CPU占用率几乎就是一条直线。
现在,垃圾广告、垃圾邮件是互联网很头疼的问题,也许以后“垃圾爬虫”也会加入它们的行列。
博客园的性能问题是否能真正解决,还要看今天一天网站的运行情况,希望今天晚上能睡个好觉。
posted @ 2005-10-27 10:33
dudu 阅读(4490)
评论(83) 编辑 收藏
发表评论
通过防火墙、iis、还是asp.net程序里面进行的?
dudu辛苦了:)
cnblogs已经成为我们的精神家园,一定要保护我们的家园。:)
@郑彬
在程序中进行的。
@深渊野鱼
我一定会好好地保护!
有一个建议,在目前的很多论坛里面有一种机制,就是不允许某一个连接在很短的时间内反复打开本论坛中的页面,哪怕是不同的页面也不允许,这种方式基本上可以限制一些搜索引擎的爬虫。
不过这种做法也有弊端,因为得要维护一个当前的连接的列表(session,时间,访问的页面等等),这也是一个负担。。。。。
dudu看看能否参照这个思路来控制一下?
google的爬虫一般不只一个
我曾经再一个站点记录每天的访问量,发现google抓取页面的爬虫(不同IP数目)最多,MS,Baidu也有
不过那个网站访问量没有博客圆那么大,影响不是很明显
我申请了一个站点技术器,可以分析每天访问我的站点的链接,大多数都是BaiDu和Google的,这个分析是分析duiker.cnblogs.com,我自己二级域名的,所以我认为根本原因就在这个二级域名上.
因为每个用户都有自己的二级域名,而且很多都在Google或者BaiDu上进行了注册,以提高自己Blog的知名度,因此,Google等爬虫不仅要爬主域名,而且还要爬目前10000多个二级域名,这样目前服务器的负载就可想而知了,因此,目前拒绝访问不是好的办法,而是如果避免google爬二级域名才是正道,其实目前的情况我想Google也是不想的,二级域名还是少爬最好,所以我想这才是根本原因呀。
今天上午记录了博客园的访问情况(不包含两个拒绝的爬虫,UserAgent不为空):
时间段: 2005-10-27 7:19:48 ~ 2005-10-27 10:37:05
访问次数: 333179
我觉得是一个双刃剑,拒绝搜索引擎固然会提高速度,但是妨碍了大家使用高品质的查询服务。dudu可以折中一下,考虑限制而不是拒绝搜索爬虫。
1。通过分析得到访问的高峰时间,高峰时间可以限制搜索爬虫的访问速率,比如1次每秒,在访问低峰时间可以考虑完全放开爬虫的访问。通过相关加权算法来进行判断。
2。对于google,baidu,yahoo等用户量大的,可以限制,除此之外的可以考虑拒绝,或者权值更低。
3。拒绝信息的处理,不要返回404页面不存在这种类型的错误,返回的错误类型应该是“页面忙,请稍候访问”,这样搜索爬虫应该会有相应的处理机制的。
@Duiker
没有拒绝Google啊! 从目前看, Google的爬网没给性能带来多大的影响。
从Google网站说明上看,Google爬网时会注意不在很短的时间内进行大量的访问。
几年前大家都想自己的网站被Google,Baidu访问和做到索引中,现在有了明显的变化:)
Dudu 用这个了吗
robots 添加这个就行了.这样比较方便
@老翅寒暑
谢谢你的建议。
拒绝搜索爬虫是采取的临时解决方法。
可以只在访问的高峰期拒绝搜索爬虫。
目前拒绝时,只是终止请求, 返回的是空页面, 应该返回“页面忙,请稍候访问”比较好, 但不知这个错误的代码是什么?
要是robots.txt能自定义爬虫的访问频繁就好了。
希望大家提更多的建议, 找到真正解决爬虫问题的方法。
物极必反,也不知google、baidu等是否考虑过,如果大家都拒绝了他们,他们还有存在的意义吗
@lovebanyi
如果在robots.txt中定义, 会拒绝几乎所有的搜索引擎。
现在只是要描绘不规距的爬虫。
毕竟dudu是私人架设得服务器...
若是企业,公司,一般是整套上线的...
硬件防火墙,vlan配置,服务器群集...等等.
想提升分析,程序仅仅是一方面
dudu辛苦了:)
真是人怕出名,猪怕壮,网站也是一样。
现在该是我们出手的时候了.
大家都想想办法.多提意见啊.
拒绝搜索引擎的搜索不就得了。
大家要搜就到BLOG里搜(自己做个)。^o^反正又不以访问量和广告代理来赚钱的!
dudu
小弟报告一下,现在比较长的评论不能浏览了,点击“浏览全文”也无法看到……
可以考虑些一个Robot协议文件,放在网站根目录下,据说搜索引擎都遵守该协议
DUDU是通过程序的方式来拒绝网络爬虫的吧?
我想请教一下你是怎么样来拒绝的????写一两句代码看看好吗??嘻`~~
@想学
在Global.cs中
protected void Application_BeginRequest(Object sender, EventArgs e)
{
if(是拒绝的爬虫)
{
Context.ApplicationInstance.CompleteRequest();
}
}
@Tony Qu
robots文件对所有搜索引擎有效, 我只想拒绝会带来性能问题的搜索引擎。
在Global.cs中
protected void Application_BeginRequest(Object sender, EventArgs e)
{
if(request == robot协议)
{
if(不是需拒绝的爬虫)
{
Context.ApplicationInstance.CompleteRequest();
}
else
{
传送
}
}
}
说不定真的是因为二级域名的原因,不过不管怎么样比CSDN的稳定多了
robots文件中可以指定不允许特定的User-agent检索的
@不知道这样行不行
"request == robot协议",这样怎么比较?
@垃圾猪
如果是二级域名的问题, 那么Google与百度在爬网时怎么没引起这个问题呢?
dudu 辛苦了!!
dudu,能不能请教一下用什么工具可以监视到爬虫??
@KKKKK
“写了点代码,记录所有访问博客园的客户端IP地址及UserAgent”。
看着性能监视器中CPU漂亮的曲线, 好开心!
那恼人的直线曾经困扰了我一个多星期,为它愁眉苦脸、为它废寝忘食,现在终于战胜了它, 感觉浑身的轻松。
@wddavid
该问题会在晚上更新程序之后解决。
老大,没有了google你让我怎么活?
我自己搜索资料都是用google的站内搜索的功能
你禁用了它,咋找cnblogs里面的资料?
还往三思呀!!!!
dudu 你好,
你那个拒绝爬虫的代码是怎么写的,能贴出来么?谢谢!
robot文件搜索引擎一般都会处理的。但爬得这么狠,会不会是有人采集而冒充爬虫?
@wddavid
你所发现的问题已经解决。
@七匹狼111
评论中有。
@Web Hosting Review
有这个可能,所以至少在访问高峰期拒绝它。
谢谢dudu 前两天我都有点郁闷 觉得人太多 打开页面也慢 现在好多拉
谢谢拉
真的应该保证广大网民的利益 真的我觉得他们太过分拉
dudu, thanks, 偶爱你
但是好像还有个一直都存在的问题啊,就是在评论中 插入代码 常常会没有那种代码格式出来。比如在这个帖子里回复用高级评论插入代码就和输入一样,不成……
dudu不好意思,一直提问题,不过一直困扰很久了……
拒绝不是办法吧?如果你拒绝了,那么就无法在google/baidu里搜索cnblogs里的好文章了!!!!
想点别的办法~~~~~~~辛苦了~~~~~~~~
原来如此!真是恍然大悟啊。
有点牛顿被苹果砸到的刹那感觉。呵呵。
我们再想办法,不过不管是baidu还是google是不能够拒绝的,现在cnblogs访问量大,几乎没分钟都有新的文章,谁都不可能一直关注cnblogs发表什么新文章
如果禁用baidu/google,就没有办法查找新的文章
或者,我们自己做一个cnblogs站内搜索引擎
@猪头
@god
晕呀!dudu都说了不是拒绝 baidu和google了!
@猪头
@god
我真的很晕!文章中不是清楚地写着: “拒绝了这两个爬虫(sohu agent与Yahoo! Slurp) ”, 而且这两个爬虫只是在访问高峰期拒绝。
如果拒绝搜索引擎,很多cnblogs个人博客的访问量就会少很多,
我想问问:
搜索引擎爬数据,应该是爬更新的数据吧,总不会定期把整个网站都爬一遍吧?
robots.txt是可以针对每个搜索引擎定制规则的,至于搜索引擎是否遵守就不知道了,好象baidu就不遵守,
我们公司网站来源最大的bot是baidu,
@wddavid
在高级评论中插入代码的问题, 我会尽快解决。
呵呵,我都是晚上来园子里,白天根本打不开呀
拒绝搜索引擎也不是长久之计策,咱们的园子越来越壮大了,dudu可以学习一下大型网络的经验,看看他们是如果处理这些问题的。
robots.txt中也可以按照爬虫的名字来禁止
其实博客园留下google和baidu的爬虫 就可以了
还有可以制作googleSiteMap 让 google 来订阅博客园
那么它只爬新的内容
很多爬虫的效率很低,我都不知道他们到底是干什么的,他们爬了半天对我的站 一点帮助都没有
dudu:
robot有专门的协议吗?
(request == robot协议 ) 具体含义是什么?
to:xili 我想应该是
if Request.ServerVariables("HTTP_USER_AGENT").tolower.indexof("googlebot")>-1 then
'它是google
end if
@被遗弃的小指
你的想法一点不现实,很傻很天真 HTTP是无状态的协议,你无法区分是不是同一个机器在访问你,唯一能做为判断条件的就是IP地址,但是搜索引擎有的是抓取阵列机器,万百上千万抓取阵列,每台机器访问你一次就是几千次,达到目的了,所以没办法防范,友善的爬虫会表明身份,如果多次有意意被拒绝后遇到强硬的爬虫,模拟浏览的HTTP请求你是没法分辨的.
不要说SESSION 维持SESSION COOKIES需要客户端配合,访问都可以故意丢弃你的SESSION_ID 和COOKIES 每次访问都以新请求身份出现,看你怎么防