2010-06-02 46 views
0

我試圖更好地瞭解後臺作業的內部工作原理以及它們如何提高性能。澄清...如此背景作業不捆綁應用程序資源(在Rails中)?

我知道我們的目標是讓應用程序儘可能快地向用戶返回響應,因此您不希望解析需要10秒的巨大饋送,因爲它會阻止應用程序能夠處理任何其他請求。

因此,建議將執行時間超過500ms的任何操作放入排隊的後臺作業中。

我不明白的是,這不就是延遲了同樣的問題嗎?我知道調用該後臺作業的用戶會立即得到響應,但如果在後臺作業開始時又有另一個用戶正確完成(並且需要10秒鐘才能完成),那麼用戶不得不等待?

還是主要問題requests是唯一可以一次發生的事情另一方面請求可以在一個+後臺作業正在運行的時候啓動?

這是正確的嗎?

回答

1

後臺進程的想法是它負責所有長時間運行的進程。

基本上,它是一個外部應用程序,它運行在具有一個或多個處理請求的進程的web服務器之外。

因此,如果有另一個用戶請求一個頁面並不重要,因爲它的作業並不佔用Web服務器,用戶不必等待任何事情完成。

如果這個用戶也做了一些放在後臺隊列中的東西,那麼它會在那裏堆積起來,直到第一個完成(或者在有多個進程處理它時,只要有一個可用)。

希望這個解釋能讓它更清晰:)

+0

越來越清晰:)。一個更明確的問題,是不是一些後臺作業隊列(如[DelayedJob](http://github.com/tobi/delayed_job))在Web服務器上運行?所以這讓我覺得它會導致性能問題。也許我錯過了那裏的東西。謝謝 – 2010-06-02 19:43:10

+0

是的,但不一定。它所需要的只是應用程序的副本和與數據庫的連接,因此它也可以位於單獨的服務器上。 但是,它可能會影響性能,因爲它需要應用程序單獨運行(使用更多內存),所有處理都將使用CPU,而不管它是什麼。儘管如此,它在用戶請求中運行它並不會有所不同。 – 2010-06-02 19:49:54