动态可缓存的内容管理系统(CMS)

本文探讨了动态可缓存内容管理系统(CMS)的概念及其实现方法,对比静态页面发布方式,介绍了动态发布结合缓存技术的优势。通过具体实例展示了如何利用Squid和Memcached提高CMS性能。

关键词:cache squid 动态可缓存内容管理系统 内容管理系统 CMS

摘要:内容管理系统(CMS)在各大商业站点和门户站点中扮演着重要的角色,是内容有效组织和快速发布极为重要的基础平台。目前主流的内容发布系统都使用静态页面进行内容发布,在我们的实际使用过程中我们深切的感受到静态内容发布存在着很多弊端,本文讨论全搜索目前正在使用的基于动态可缓存内容发布系统的考虑和实现。

一、什么是内容管理系统?

内容发布系统也即CMS,英文全称为:Content management system,用于对企业业务数据进行组织、管理和发布,这里的内容不仅仅指文字内容,还包括图片、声音、视频、Flash等富媒体资源,CMS的应用极大的提高了站点的建设效率并降低了维护成本。目前市面上的CMS种类繁多,开源的内容管理系统主要有:

PHP:

国内PHPCMSVeryCMSDeDeCMSEmpireCMS,HBCMS

国外:MamboJoomla!XOOPSDrupal

更多见:http://www.php-open.com/9.htm

Java见http://www.open-open.com/39.htm

ASP主要考察使用过风讯,对其它ASPCMS感兴趣的可以查看这篇文章

http://hi.baidu.com/liberty88/blog/item/56e147fbd8271a176c22eb0e.html

商业CMS主要有:方正翔宇CMS,北方网CMSTRS WAS,其中方正翔宇CMS在媒体行业应用非常广泛,TRS在政府部门应用非常广泛,北方网CMS在一些媒体网站中也有些应用。

就目前的总体情况来看,开源类CMS和商业类CMS还存在很大的差距,商业CMS在工作流,权限控制,内容的编采发以及系统的性能,扩展和可维护性上已经非常成熟和完善;对比开源CMS,则在这些方面存在很大的差距。由于个人觉得国外的CMS不太符合国人的使用习惯和国情,所以对他们研究的比较少也不太清楚他们在国内的应用情况,就国内的CMS而言目前也还没有看到较大规模应用的案例(如果有请告诉我),我透露几个目前已知的商业CMS内容发布系统的应用情况关键性能指标,最大数据量千万级,同时最高终端用户数500,发布时间1-2秒,每日更新1-2万篇内容,相关内容自动更新。总之,开源CMS要走的路还长。

二、什么是动态可缓存的内容管理系统?

动态可缓存的内容管理系统是指前台页面动态解析执行并且动态解析执行的页面可被客户端和代理服务器进行缓存从而达到和生成静态页面同样的执行性能和效果的管理系统。

三、为什么使用动态可缓存的内容管理系统?

第一节面提供的内容发布系统包括商业类CMS基本都是以生成静态页面的方式进行内容发布,我们早期的系统也全部使用静态静态页面进行内容发布,在我们的实际使用过程中,生成静态页面的方式给我们带来了很多麻烦,主要有下面几个问题:

1、在设计、开发上,使用静态页面进行发布,系统需要很多额外的设计和开发,以静态页面的方式进行发布,涉及到生成规则,更新规则,发布规则等方方面面的事务,特别是当系统对内容的发布和更新有苛刻的性能要求时,这些规则更是需要进行仔细的设计和权衡。使用静态页进行发布主要是考虑到系统的执行性能,我当然同意静态页的执行性能是很高的,但是多数系统却远远大不到预想的访问量而引入了高度的系统复杂,也并非是系统一开始就有巨大的访问量,我也不认同动态执行页面就无法承受大访问量的说法,其实我看到的大多数CMS中都没有对静态页的处理规则进行很好的设计,比如:经常是在后台撤销了内容发现原始html没有删除,内容依然可以访问或者一篇内容更新时,相关引用的内容无法做到关联更新;静态发布方式并不是那样容易的,相反我觉得动态发布更容易开发和维护。

2、在系统维护上,生成的静态页面会占用很大的磁盘空间,我们所有的静态页面加起来应该有100-200G了。这样庞大的数据量备份,恢复都是很麻烦的,无形之中给系统的运维工作增加了很大的难度,但实际上CMS有个显著的特点就是发布多,修改少,越早的数据越少被访问,应该说这100200G的数据中有99%以上的数据是有效期过后很少或再也没被访问过的,所以磁盘几乎是白白的被浪费了。

所以,在我们的实际使用过程中我们更倾向于动态内容执行+多重cache的方式,新的系统中我们是这样做的,最后完成的系统非常简单并在Squid的帮助下达到静态页面的执行性能

四、如何实现动态可缓存的内容管理系统?

实现过程:

1. 所有前台页面使用URL rewrite重写成.html进行访问,方便搜索引擎收录。

2. WEB程序执行时,向Squid服务器发送Expires头,用于控制squid服务器的缓存时间。Expires用户设置Squid服务器和客户端的缓存时间。如:

PHP

 

Php代码   收藏代码
  1. header("Expires:" . gmdate("D, d M Y H:i:s", time() + 120). "GMT"); //缓存120秒  

 

Java

Java代码   收藏代码
  1. java.text.SimpleDateFormat format = new   
  2.   
  3. SimpleDateFormat("yyyy-MM-dd HH:mm:ss");  
  4.   
  5. java.util.Calendar cal = Calendar.getInstance(new SimpleTimeZone(0"GMT"));  
  6.   
  7.         format.setCalendar(cal);  
  8.   
  9.         java.util.Date expires = format.parse(format.format(new Date(System.currentTimeMillis() + 120 * 1000)));  
  10.   
  11.   
  12. response.setHeader('Expires: ' + expires);  

 3. 配置Squid服务器指向源服务器,并配置ignore-reloa来忽略no-cache和reload请求以提升Squid的命中率。

4. 将最新最热的数据缓存到Memcached服务器,减少数据库的查询。

至此整个过程已经完成,早期系统的访问量一般比较小,这时候可直接将WEB服务器对外提供服务,由于CMS所管理内容发布快,修改少的特性,最新最热的内容都将在Memcached中命中;当访问量增加到一定程度的时候就可以在前端加上squid服务器,这样就实现了和静态页面一样的效果,同时也兼备了系统的可维护性和灵活性。我们的全搜索首页,母婴频道,娱乐频道使用这种方法实现获得了很好的效果。

五、扩展

使用squid作为前端时,过期时间的设置就变得非常重要,如果设置得太长用户就很容易看到过期内容,如果设置得太短又降低了命中率不能有效发挥前端缓存的优势。那过期时间应该设置为多长比较合适呢?通常情况下首页的更新频道很高,内容页更新的频率较低,所以首页的过期时间应该设置得短一些,内容页可以设置的长一些。

新浪         

新浪首页60秒过期,内容页120秒过期

搜狐  

搜狐首页70秒过期,内容页120秒过期

163

163首页80秒过期,内容页120秒过期

经过测试成都全搜索的系统里首页设置60秒过期,内容页设置120秒过期,这样的设置经过长时间的运行没有收到任何编辑和用户的不良使用反馈,这样的设置使得每隔60秒钟首页去原始服务器执行一次;每隔120秒对内容页去原始服务器执行一次。由于后端使用memcached作为缓存,即使是突发流量也可以轻松自如的应对。

学习资料:

http://delicious.com/wuyong/cache

<!--EndFragment-->




安装说明: 上传upload文件夹下所有文件,然后运行install.php,根据系统提示把要求设置为777属性的文件或者文件夹设置为可写。根据空间提供商提供的数据库资料填写安装信息来完成安装即可。安装完成之后,建议删除install.phpinstall_htm.php,另外,推荐修改admin.php为其他名称,譬如a.phpb.php之类来隐藏后台网址提高安全性——之后便通过a.phpb.php之类修改后的名称来访问后台即可。 环境要求: PHP4以上版本,建议使用PHP5环境 数据库推荐MySQL4.1以上版本 空间必须支持GD库,否则图片的缩略将会出现异常。 空间的PHP环境建议打开了allow_url_fopen选项,否则获取远程图片以及图片本地化将会失败。 部分空间因为无法对gif图片进行操作会导致严重错误,请后台选择忽略gif图片 VeryCMSv3.0正式版(php+mysql)高速论坛程序 VeryCMS是一套采用php+mysql数据库方式运行并可生成html页面的全新且完善的强大系统.我们希望作为一个开源.共享的软件,VeryCMS可以以其流畅的速度与高负载能力激起各位加入PHPWind阵营的热情!共同打造专业品牌PHPWind.Net 1,VeryCMSv3.0既是一款能独立运行的系统,又能与论坛/博客完美整合。提供了简易的整合设置接口,能轻易打造社区门户。 2,强大的内容管理、发布以及文章编辑器。能非常方便调用论坛/博客中的帖子/日志等信息,功能强大、操作简易、方便整合,深度发掘系统价值。 3,采用面向对象的方式全新架构系统。在前后台的代码中开始大量使用类封装数据,提高代码的可维护性。 4,精简后台管理功能,强化用户体验。摈弃了以往集成大量可能对普通站长毫无用处模块功能——这些模块使得站长搭建自己的站点并充实内容非常累赘和异常艰难。 5,加入Ajax无刷新技术,方便用户使用和管理。例如,站点栏目管理创新使用鼠标右键进行常用功能管理,极大提高管理手续和效率。 6,实现所有页面真正的静态化,大大降低服务器负担。每一个栏目均可自由定义所使用的列表模板以及内容模板。同时对于动态页面,也加入了伪静态支持。 7,系统集成强大的自定义模版功能。用户可在后台灵活、自由创建或修改自定义模版,制作个性风格更是随心所欲,做你所想。 8、系统内嵌各类流行BBS/Blog调用,增加了verycms的通用性和扩展性。系统后台能设置远程数据整合, 9,强大的附件管理、上传功能。可自定义上传图片附件是否自动生成缩略图,并可自定义缩略图格式,保持原图比例,自动从原图按照缩略图的高宽比例进行截取;应用Ajax技术进行附件的管理,方便快捷,让您的网站附件内容管理更加井井有条! 10,VeryCMSv3.0引入了内容模型的概念,且支持无限扩展。用户可以根据自己的需求,自由增加各种内容模型——比如下载,新闻等等,摆脱以往用音乐、下载、商店等这些固化模块的局限,更加便捷。 11,首页内容完全自定义,更具人性添个性。VeryCMSv3.0充分考虑了每一个用户的个性需求,强大的首页内容自定义调用管理,方便、迅速、实用的让你瞬间打造一个专门站点。 12,栏目首页可自动更新,允许栏目首页自动更新静态页,省去站长频繁的站点内容首页更新工作,后台也可以设置更新的时间。 13,支持栏目RSS生成,根据内容模型指定的摘要字段等信息生成一个栏目的RSS输出,方便用户订阅,更增添站点人性化用户体验。 14,内容模型的自由导入/导出功能,加强会员间自定义模型分享。利用XML导入导出的设计使得这种分享方式更加安全,交流更加方便。 15,完善的广告管理功能。前台采用js调用,即使生成HTML文件也能随时更换广告内容;后台采用灵活多样的广告形式,帮助站长实现站点盈利。该功能位于扩展功能栏目中。 16,完全自定义的Tag关键字功能,发布文章设置Tag关键字,可在前台显示相关文章,让网站用户更具粘性。 17,独有创始人机制与人性化的权限分级管理功能。后台可自定义管理帐号,并可自由分配网站各栏目管理权限,满足站点多人管理的需求,同时保障网站信息安全。 18,自定义导航功能。登陆后台即可添加或删除网站前台头部或底部的自定义导航菜单,无须改动模板,即可轻松管理网站导航栏,实现网站建设后台管理化; 19,新版CMS以栏目为中心,不同的栏目可以使用不同的内容模型,也可以读取BBS/Blog信息,栏目纵深允许无限延伸,从此不再受只能创建二级子栏目的限制。 20,新增强大的采集功能。所需要采集的字段可自定义,所有的内容模型均可自由采集——无论系统内嵌模型还是自定义模型。采集规则简单,容易上手。 21,精心搭建的管理后台,充分应用javascript、Ajax无刷新等技术特性改善用户体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值