2009-12-01 90 views
1

我在python中有一個大的線程提要檢索腳本。傳出的負載平衡器

我的問題是,我如何加載餘額傳出請求,以便我不經常碰到任何一個主機?

這對feedburner來說是個大問題,因爲很大一部分站點通過feedburner代理它們的RSS,並且進一步使許多站點將域名中的子域別名爲feedburner以掩蓋事實,即他們正在使用它(例如「mysite」將其RSS網址設置爲feeds.mysite.com/mysite,其中feeds.mysite.com會反饋到feedburner)。有時它會阻擋我一段時間,然後重定向到"automated requests" error page

+1

網站不會重定向到feedburner以隱藏他們正在使用它的事實,這樣做是爲了讓他們保留對其Feed的URL的控制權。 – 2009-12-01 16:25:29

回答

2

如果你的問題與「扼殺你」的Feedburner有關,它肯定會這樣做是因爲你的機器人的源IP。 「對Feedburner進行負載平衡」的方法是從多個不同的源IP開始。

現在有許多方法來實現這一點,2人是:

  1. 多宿主服務器:多個IP地址在同一臺機器上
  2. 多個分立機器

當然,你不要在他們前面放一個NAT盒子;-)


上面的t擔心可能的「節流問題」,現在是「調度部分」。您應該爲每個「目標」維護一個「虛擬調度程序」,並確保不超過相關Web服務(例如Feedburner)的參數。現在,棘手的部分是要掌握這些「限制」......有時他們會被廣告宣傳,有時候你需要通過實驗來解決這些問題。

我明白這是「高層建築的指導方針」,但我不是爲你準備好要編碼這個...我希望你能原諒我;-)

1

「我怎麼能負載平衡傳出請求,以便我不經常碰到任何一個主持人?「

一般來說,你可以通過設計一個更好的算法來做到這一點。

例如,隨機加擾您的請求。

或者對它們進行「相當」的混洗,以便循環播放源代碼。這將是一個簡單的隊列列表,您可以從每個主機出列一個請求。

+0

......如果另一端的服務「通過源IP節流」,絕不會對其有所幫助。 – jldupont 2009-12-01 15:51:55

+0

......任何明智的Web服務**都應該**做反正。 「總是管理你的外圍或其他...」 – jldupont 2009-12-01 15:52:58

+0

事情是我需要像在dns分辨率點攔截urllib來告訴每個主機的負載 – 2009-12-01 15:55:23

3

你應該做一次性請求(每週/每月,無論適合)。對於每個Feed並遵循重定向來獲取「真實」地址。無論您當時的限制情況如何,您都應該能夠解析所有供稿,保存該數據,然後只需爲添加到列表中的每個新供稿執行一次即可。您可以查看urllib's geturl(),因爲它會從您輸入的URL中返回最終的網址。在對源進行ping操作時,請確保使用原始文件(保留「真實」僅用於負載平衡),以確保在用戶移動它或類似文件時重定向正確。

一旦完成,您可以簡單地設計一個加載機制,比如每個小時只有X個請求,通過每個提要並跳過主機已達到限制的提要。如果feedburner保持公開(不太可能),你可以將它用於X,否則你只需要估計它,並粗略估計你知道低於極限。然而,知道谷歌,他們的限制可能會測量模式,並沒有一個具體的硬限制。

編輯:添加評論的建議。

+0

我會改變一次一次,每天。人們不時地改變他們的重定向。 – 2009-12-01 16:29:20