大量拉取网络数据的策略总结

来源:互联网 发布:stl源码剖析 百度云 编辑:程序博客网 时间:2024/04/29 08:00

这两天在做需求的时候,遇到了一个难题,背景是这样的,

业务需要,我们要不停的抓取一个网址的数据,主要是通过两个参数A, B决定的结果。 下面来讨论一下,我遇到的问题:

1.  A大约有200种可能, B的集合数也有几百个,对于这样的程序,如果在本地运行,当然是很简单的,直接两个循环搞定(可能A在外,还是B在外,需要根据具体操作考量一下)。但是对于网络请求来说就麻烦了:

1. 有可能你f发的请求包会丢掉,2. 有可能回包会丢掉, 3 有可能对方服务繁忙拒绝掉。。。等等一系列问题。

这样的情况下,你怎么保证程序的稳定运行? 

一开始我想的很简单,程序直接退出了,但是问题时,这个可能要跑几十个小时的程序,即使程序可以从中断的位置开始继续执行,但我不可能一直盯着它吧?所以结果很自然就出来了,错误的就写个log了,回头的修复程序,重新读log,把每一条都执行完毕。这个的问题是,不会因为一个请求失败而卡住,但是可能log会非常大

另外一种解决方式,当一次请求失败后,重试几次,实在不行再写log,这个的好处是log会相对较小,但是问题是可能会多发请求。




第二个问题,比较头疼,上w个请求,如果对方的相应比较慢,每个请求可能要等个3,5秒,简单算一下,这个程序的执行将会以天为单位来计算了。

如果解决呢?  初步想法是,多线程并行,这样至少可以减少几倍的运行时间。而且公共处理逻辑可以是一样的,只需要花点心思吧初始集合划分好就好。

知易行难,这个还没有实现啊~>_<~

而且,万一对方的网站顶不住你这样的多线程访问咋办?泪奔啊,程序员的生命基本上 就耗在这样的等待中了



----------------------------------------分割线------------------------------

接下来准备去做LCD、IGBT、HMI方面的电商