redirect_to :future #思维驱动 » Blog Archive » Rails cache机制和SSI结合实现高性能内容发布系统

Rails cache机制和SSI结合实现高性能内容发布系统

实践出真理。。(呵呵,也深沉一把)

灵活性和高性能是所有web(不只是web)开发者的共同追求。动态页面呢是灵活,可是效率太低。。生成静态页面呢效率高了又不够灵活,SSI(.shtml)机制是一个非常好的解决方案,这个已经不需要论证了看看主要门户就知道了。。

在开发CF-CMS的过程中我们使用了非常复杂的生成机制(包括取数、碎片,队列、生成管理、实时预览等)来生成.shtml文件和inc文件,之所以说它复杂是因为核心代码主要就是生成机制了(当然除了生成外还有取数模块),而我的主要工作也集中在这里。但是。。但是由于需要定时/不定时大批量的生成效率并不是很高(我已经很努力的优化了,而且服务器性能绝对不差),特别是初始化系统的时候需要将系统中的数据全量生成更是让人郁闷的事情。

在开发的后期(5月份)我想到了通过rails的cache机制和ssi结合的办法来实现。这样的好处是
1)系统不需要全量初始化。页面等到有访问的时候才生成(虽然不是用在这里但是这个想法已经被我发扬光大了^_^)。2)更新或是删除实体的时候不需要进生成队列不需要管理,只要简单的将cache失效就可以了。3)不需要实现预览机制。4)不需要第四了,前面3点足够了。

比如一个博客程序(生成静态文件的实现):

原来的实现方式是:发表篇文章则需要,1)重新生成列表数据。2)生成发表的post的文件。3)如果你的模板的sidebar里面有”最新文章”列表这需要从新生成所有实体的文件。(当然了你可以用javascript,你喜欢吗?还有seo问题呢)

cache+ssi实现:发表文章,1)清除列表数据的cache,2)发表的post有人访问的时候自动生成,3)sidebar里面的”最新列表”我们可以在模板里面把最新列表定义为一个inc,这样写inc文件就好了.

这样比较下来 1)实现非常容易,不需要什么生成啊队列啊. 2)系统效率应该是高非常多的(具体数据没测试过)。而且不会发生突发的大批量生成的任务。对系统处理能力的压力减小很多。

关于生成队列:这个东西还是可以保留的,比如在你为文章加上统计啊,热点的时候每次访问重新生成一次是不合理的。可以有一个延迟规则,符合这个规则的时候触发cache的清除。

如何实现:实现起来很简单了。1)把mapping中的url全部改为.shml结尾。2).设置controller的cache和cache失效规则(Sweeping).

打字很累。。upulife.com保留所有权利。。转载请注明出处:http://www.upulife.com

关于CF-CMS:这个项目已经完成。但是我觉的可能刚开始的时候目标定的太高了虽然大部分目标都实现了。但是系统复杂性太高,可能不大适合个人用户或是小团队使用。所以在后来的一些空闲时间(大概2天)我又实现了一个简化版本基本符合个人要求(比如实现个新闻系统,博客系统啊,下载站啊游戏站啊)是没问题了。而且基本使用cache+ssi的方式,最近比较忙,还未完全实现,等整理一些准备开源(考虑中…)

看完啦?再看看我们最近的10条记录对您是否有用呢?

要不,再找找其它内容:




或者给我们留下些意见、建议,这将给我们莫大的鼓励,促使我们做得更好。