2011-12-21 94 views
0

我正在開發一個網頁抓取網站以查找可用的遞送餐館。網站搜索最流行的傳遞門戶網站,並將結果顯示在一個頁面中。使用node.js縮放web刮取網站

該網站託管在Heroku與4 dynos。

http://deliveria.net/#05409-002

當用戶在網站上的要求,它使大約30 HTTP請求來檢索結果。

問題是性能,請求不是很快,每個搜索都可以使其中的30個鎖定應用程序,同時爲單個用戶執行搜索。

我試圖增加Heroku的DYNOS:

heroku scale web=10 

而且我不覺得可察覺的增益。

擴展這種應用程序的最佳方法是什麼?

(我不能使用高速緩存,作爲搜索需要在實時)

當前堆棧:

  • Heroku的
  • Node.js的
  • 表達
  • 請求模塊
  • EJS
  • 推動器
  • Redis的

回答

0

這裏最重要的是要有工人,因爲你必須避免阻斷您的主應用程序事件循環。

嘗試委託可用工作人員之間的30個http請求。也許Kue可以幫助你解決這個問題(你把新的工作推到隊列中,並由工作人員逐一執行)。例如,如果你在Heroku上有10個dynos,那麼使用9代表工作者(即進行30次http搜索)。從用戶的角度來看,重要的是要知道應用程序對他的搜索做出了快速反應(並且不會給他「凍結」的印象),所以也許你想盡快更新他初步結果(例如從30頁中搜索10頁)。你可以通過WebSockets(Socket.IO)做到這一點,甚至顯示一個不錯的圖形化進度條或類似的東西。

+0

我之前試過socket.io,但在heroku上工作不太好,現在我正在使用Pusher爲用戶提供響應。關於工作人員...這可能是一個好主意,我可以創建工作人員來網上抓取並維護主要的測試版,僅供網站使用。韓國社交協會。 – 2011-12-22 01:18:09

+0

是的,這是最重要的。如果你只是產生主應用程序,你不會感覺到有所改進。爲此產卵的工作人員將確保更好的性能,並且不會阻止您的主應用程序。 – alessioalex 2011-12-22 06:32:37

+0

如何在Heroku上ping(ajax調用)工作人員?我可以在工作人員中運行快遞服務器嗎?它是否可見? 我正在使用推動器。現在,當用戶提交搜索請求時,瀏覽器ping(發出ajax調用)以表示應用程序開始將消息發送到頻道/事件(私人聊天室)。用戶瀏覽器正在監聽相同的頻道/事件。 我需要將此「ping」重定向到工作人員,它是否可行? – 2011-12-22 11:32:21