2012-05-19 42 views
0

比方说,我有一个分配有10个IP的squid代理服务器(本地在我的gigE网络上)。使用代理服务器与本地主要IP

而且我们也可以说我有一个分配给它一个不同的IP地址10,运行的是运行10个线程C#应用程序在不同的服务器,使用每个线程抓取网站。每个线程使用不同的分配IP来发送其HTTP请求。

我的问题是,如果我在该应用程序中运行10个线程,其中每个线程使用来自代理服务器的代理IP来抓取网站。而且我还在该应用中尝试了10个线程,其中每个线程直接在服务器上使用本地分配的IP来爬网。哪种方法可以更快地抓取站点之间的网页,使用代理IP的线程,还是使用自己的服务器使用直接IP的线程?

我会想象服务器上的直接IP,因为代理服务器有固有的延迟,但它证明代理服务器速度稍快。所以我很困惑。也许是因为使用直接IP使用一些处理能力,通过使用代理服务器,它可以将该处理外包给代理服务器?非常感谢帮助。

+0

我们需要看到你的爬行代码 –

回答

0

你提到过10个不同的线程“抓取网站”,这听起来像你有10个线程抓取同一网站的不同页面。

在这种情况下,使用代理通常会更快。请记住,大多数HTML页面看起来像这样:

foo1.html 
    | 
    +--- Link: somefile01.xml 
    | 
    +--- Link: somestlyesheet.css 
    | 
    +--- Image: somepicture01.jpg 
    | 
    +--- Image: somepicture02.jpg 

foo2.html 
    | 
    +--- Link: somefile01.xml 
    | 
    +--- Link: somestlyesheet.css 
    | 
    +--- Image: somepicture01.jpg 
    | 
    +--- Image: somepicture03.jpg 

后一个真正的网络浏览器拉foo1.html,它执行HTTP获取somefile01.xmlsomestylesheet.csssomepicture01.jpgsomepicture02.jpg(通常是并行)。据推测,如果你从同一个网站上抓取页面,那么你会抓取内容有一些共同重叠的页面(如上面显示的foo1.htmlfoo2.html之间)。

如果您在代理上启用了http对象缓存,那么您的线程将更快,因为您将为这些文件的一小部分获取缓存命中。如果存在缓存命中,则文件将从局域网上的Squid缓存本地传送到您的代码,而不是每次都从远程服务器获取。

如果你有10个线程,所有抓取不同的网站,那么你应该会降低性能,除非它们包含的唯一文件是像jquery.js。顺便提一句,谷歌为网页开发者提供了一种使用他们的缓存来加载几个commmon javascript文件的方法。

+0

这仅当实际启用缓存成立,同一个文件被访问超过一次(例如,链接资源)等等。到目前为止,大多数代理似乎没有做任何缓存了。此外,它似乎并不像原始海报实际访问链接资源。 –

+0

@ Anony-Mousse,[Squid](http://www.squid-cache.org/)[默认缓存http对象](http://www.squid-cache.org/Doc/config/cache/) 。上面的观点是,*真实世界中的* most * html包含指向'.css'文件或图像的链接,因为同一网站上的网页被模板化为彼此相像。 –

+0

*大多数爬虫将不会跟随'.css'文件的链接或多次访问同一页面。 –

相关问题