2012-05-19 44 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'文件的鏈接或多次訪問同一頁面。 –

相關問題