2010-02-05 59 views
1

好吧,不是真正重塑,但是,我們有一個大型的基於內容的網站,它負責處理負載(在我們修復了SQL池問題之後)到某個點,然後我們就完全沒有了。很多這是由於我們試圖修復的錯誤代碼,但很多隻是由於請求的水平等。混合Rails的緩存選項,我重新發明了什麼?

我們正在考慮頁面緩存,因爲好吧,它該死的快(是的... :D)但這不起作用,因爲我們在頁面內有特定於登錄用戶的特定片段。但是,並不是所有的希望都失去了......

我在想,如果這將是理想的做到以下幾點:

  1. 頁級高速緩存,具有清掃車清理出的網頁時,內容更新。
  2. 用佔位符替換用戶特定的片段(也可能是通用內容,如'查看您的帳戶或在此註冊')
  3. 當用戶頁面加載異步請求(AJAX或某些將其稱爲AJAH),其中請求「動態」片段,然後將該片段置於內容佔位符處。

我能看到的主要問題是,關閉JS的用戶看不到內容,但我真的不認爲我們會受到這種影響,恕我直言,禁用javascript的人大部分都是白癡(是的,我說過!)。

我也有興趣知道我是否(無疑)重新創造了一些東西,如果任何人都可以指向我已經在做這樣的事情的網站,我將不勝感激。

謝謝真棒SO社區!

回答

3

瑞安貝茨在Railscast 169: Dynamic Page Caching中涵蓋了這項技術。值得一看。

+0

是的,這是一個非常酷的技術。此外,您可以將長時間運行的db工作負載分解爲單獨的ajax請求,以使工作負載並行化。我們在一個應用程序中這樣做,它真的開始飛行。 – hurikhan77 2010-02-05 18:02:28

+0

當然 - 我認爲我的大腦本週已經太油炸了。爲什麼我沒有先看Railscasts?!? 啊,謝謝! – 2010-02-06 11:30:29

0

你有沒有想過服務器端的片段緩存?我已經廣泛使用它,它不可能更好。您可以簡單地緩存內容的「片段」並正常呈現,而不管取決於登錄用戶。

有用於片段緩存很多很好的資源,我會在文檔開始: http://api.rubyonrails.org/classes/ActionController/Caching/Fragments.html

而且從縮放的Rails系列非常好: http://railslab.newrelic.com/2009/02/09/episode-7-fragment-caching

+0

這是一種有效的技術,但值得指出的是,片段緩存比動作緩存或頁面緩存帶來的好處更少。 – 2010-02-05 15:21:47

+0

真相,真相,只是想確保它被考慮。 – Ben 2010-02-05 15:45:40

0

當提供靜態內容或緩存的內容開始放慢服務真正的工作流程,將逆向代理作爲前端應用程序。它將釋放進程以完成實際工作,並減少由於文件系統緩存變得效率低下而造成的減速。它將幫助您將「客戶端緩存」分享給多位訪問者。看看NewRelic關於緩存和縮放的夢幻般的屏幕播放系列:http://railslab.newrelic.com/scaling-rails