2010-02-05 47 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