厨师炒菜与网站反爬虫问题

上周部门同事中午一起吃饭时,有同事提到一个问题。具体这个问题干啥的忘记了,只记得是要你设计一个餐馆的工作流程。工作流程就啥也不说了,只是那天中午,我想到到的是合并炒菜。合并炒菜就是指,当某段时间内,如果有人要了同样的菜,那个这个菜就优先炒。当时就想,这在编程中和连接池很相似。

 

而12月份在公司的挖宝任务中,就有一个关于反某IP在单位时间内访问次数的任务。当时想到的方法是在内存中建立一个列表,每次访问都会根据这个列表的数据确定该IP是否有响应。一直觉得这个方案对高访问量来说不太妥当。

 

而今天突然想到,要是在原方案的基础上引入异步机制,可以极大改善性能。而这个性能是访问的性能,不是总体性能。

 

如果在内存中建立一张表A,这张表有多大,是否需要分布式,由访问量决定。每当有访问时,往该表插入数据。同时由另外一个线程或者进程,来对该表的数据进行分析。把分析结果更新到另外一张内存表 B。B表的数据量一般来说是小于A表。

 

比如,当A表存在某个IP,并且记录数大于3条,而且是在5秒钟以内。那么就会在B表中增加一条记录。

 

在访问时,如果B表中存在访问者IP的记录,那么就会中断响应。当然如何从B表中移除记录,还需要设计一套方案。

 

而上面的关于5秒内3条记录这种方式过于简单一些。完全可以任务,在10分钟内,如果请求数超过某个值,将出现一个手动输入的验证码。这样就可以规避掉很大的性能问题。我记得google的搜索,在一些条件下,也会需要输入验证码的。而完全中断响应的不太近人情,呵呵。

转载于:https://www.cnblogs.com/birdshover/archive/2010/02/07/1665570.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值