动态可缓存的内容管理系统(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代码

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

Java

Java代码

 
java.text.SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
java.util.Calendar cal = Calendar.getInstance(new SimpleTimeZone(0, "GMT"));
format.setCalendar(cal); 
java.util.Date expires = format.parse(format.format(new Date(System.currentTimeMillis() + 120 * 1000)));
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

   - 点击:15次

转载于:https://www.cnblogs.com/codecrazy/archive/2010/10/15/1851933.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/378949.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

反转字符串中的元音字符_C程序消除字符串中的所有元音

反转字符串中的元音字符Given a string and we have to eliminate/ remove all vowels from the string using C program. 给定一个字符串,我们必须使用C程序从字符串中消除/删除所有元音。 To eliminate/remove the vowels 消除/删除元音 We will traverse (reac…

mysql 自动化 安装_mysql自动化安装

MySQL安装一般使用RPM或者源码安装的方式。RPM安装的优点是快速,方便.缺点是不能自定义安装目录.如果需要调整数据文件和日志文件的存放位置,还需要进行一些手动调整。源码安装的优点是可以自定义安装目录,缺点是编译时间长,过程复杂其实还有一种方式,定制RPM包.它相当于用源码…

hls协议分析

目录1、简介1.1、 综述1.2 、HLS 协议编码格式要求1.3 、HLS 协议优势1.4 、HLS 协议劣势1.5 、框架图2、m3u8文件2.1 、单码率适配流m3u8文件2.2 、多码率适配流m3u8文件2.3 、Playlist file2.4 、Tags3、ts文件3.1 、ts文件结构3.2、ts文件结构部分截图3.3、ts层(…

OpenGL 学习笔记(1)初始化窗体

前言 学习OpenGL只是兴趣爱好,因为对图形比较感兴趣.将以OpenGl的红宝书(7)和蓝宝石书(4)为基础,虽然手头有红宝书书,但感觉没蓝宝石书写的好 准备工作 首先要下载一个工具库(GLUT) http://www.opengl.org/resources/libraries/glut/ 只要把相应文件放在…

基于云平台的家居综合监测管理系统的设计与实现

时间过得飞快,转眼间大四即将毕业,有点留恋和不舍。可能是越是到了离别的时候,越开始珍惜吧。大一开始,通过考核进入了学校院系实验室开始学习,这期间自学了很多东西,很充实,也参加过很多比赛&a…

小白学数据分析-----留存率分析_I[次日留存率突然下降了50%?]

最近在做留存分析时,遇到了不少的情况,也经常会有人问我,为什么我的游戏突然次日留存率降了一半。如果留存率是单单作为一个简单的指标的话,那对你价值还是蛮有限的,今天就和大家说说一个case,这是不久前解…

mysql映射mapper_SQL映射器Mapper接口(MyBatis)

SQL映射器Mapper接口MyBatis基于代理机制,可以让我们无需再写Dao的实现。直接把以前的dao接口定义成符合规则的Mapper。注意事项:1.接口必须以Mapper结尾,名字是DomainMapper2.mapper.xml文件要和Mapper接口建立关系,通过namespac…

计算机图形学画线_在计算机图形学中直接使用线方程

计算机图形学画线计算机图形学| 直接使用线方程 (Computer Graphics | Direct Use of Line Equation) The standard line equation, as we all know is used for drawing a line. It is given by: y mx c. 众所周知,标准线方程式用于绘制线。 由下式给出&#xff…

Request.ServerVariables (server environment variable)

参数 服务器环境变量指定要检索的服务器环境变量名。可以使用下面列出的值。 变量说明ALL_HTTP客户端发送的所有 HTTP 标题文件。ALL_RAW检索未处理表格中所有的标题。ALL_RAW 和 ALL_HTTP 不同,ALL_HTTP 在标题文件名前面放置 HTTP_ prefix,并且标题名称…

c/c++ 编程试题

c/c 编程试题 带*号为选作题&#xff0c;给出代码截屏和编译运算结果截屏 1.编程:选取M个最大的数 编程实现从N个无序数中选取M个最大的数(0 < M < N ) 思路&#xff1a;通过冒泡排序或者选择排序对N个数进行递减排序&#xff0c;然后输入前M个数即可。这里我想到的是通…

Java String startsWith()方法与示例

字符串startsWith()方法 (String startsWith() Method) startsWith() method is a String class method, it is used to check whether a given string starts with specific character sequences or not. startsWith()方法是一个String类方法&#xff0c;用于检查给定的字符串…

mysql inception web_基于Inception搭建MySQL SQL审核平台Yearing

Inception1. Inceptionj简介Inception是一款针对MySQL的SQL语句审核自动化运维工具。使用Inception&#xff0c;将会给DBA带来更大的便利性&#xff0c;将DBA从繁冗的工作中解放出来&#xff0c;做更多的自动化工作&#xff0c;或者从架构方面研究如何更大程度地保证数据库的高…

C---日常练习

若有以下定义语句&#xff1a;int a5;printf("%d\n",a);则输出结果是&#xff08;&#xff09; 解析&#xff1a;a 即先使用再自增&#xff0c;a的初始值即为5&#xff0c;则先使用&#xff0c;输出结果为5 举个例子&#xff1a; int a5,b; ba;//等价于 ba;aa1 prin…

VS2010 运行库设置

如下图所示&#xff0c;当在一个EXE工程中调用lib或dll时&#xff0c;2个工程的下面选项一定要一致&#xff0c;否则会导致exe工程编译不过。 原则&#xff1a; Debug下&#xff0c;默认是MTd&#xff1b; Release下&#xff0c;默认是MT。 转载于:https://www.cnblogs.com/lgh…

算法中的Strassen矩阵乘法

Introduction 介绍 Strassen in 1969 which gives an overview that how we can find the multiplication of two 2*2 dimension matrix by the brute-force algorithm. But by using divide and conquer technique the overall complexity for multiplication two matrices i…

零拷贝、mmap、sendfile

目录零拷贝mmapsendFile总结零拷贝 要了解零拷贝&#xff0c;首先得先了解一下传统 IO 的执行流程&#xff0c;这里举个例子&#xff0c;通过传统的 IO 进行网络传输来传输一个文件。 先上一张图&#xff0c;这张图就代表了传统 IO 传输文件的流程。 读取文件的时候&#xf…

网页服务器和mysql服务器_实现Web服务器之间使用同一个MYSQL和相同的网页配置文件的方法...

实现Web服务器之间使用同一个MYSQL和相同的网页配置文件的方法发布时间&#xff1a;2020-04-15 16:42:41来源&#xff1a;亿速云阅读&#xff1a;133作者&#xff1a;三月栏目&#xff1a;数据库亿速云负载均衡(Cloud Load Balancer)是对多台云服务器进行流量分发的服务。亿速云…

传128GB版iPad4售价为799/929美元

外媒9to5mac报道&#xff0c;苹果将推出一款升级版iPad4&#xff0c;外观和iPad 4相同&#xff0c;还是黑白两色的&#xff0c;只加入了新的SKU。 据报道&#xff0c;这款升级版iPad4还有128GB版&#xff0c;随着这条消息传出&#xff0c;不久关于128GB版iPad4的售价信息也传出…

(西工程-金花)小米路由器连接哆点设置WiFi保姆式教程

小米路由器连接电源,用根网线一端插入寝室的网口处,另一端插入小米路由器的WAN口手机或者电脑连接WiFi,我这里是通过手机浏览器打开192.168.31.1进入无线路由器管理页面进行配置小米路由器&#xff0c;配置WiFi的一些基本参数,例如:WiFi名称,密码之类的信息 进入无线路由器管理…

基于MINA框架快速开发网络应用程序

1&#xff0e;MINA框架简介 Netty、Mina、Cindy都是不错的NIO开源框架&#xff0c;后两者都是在Netty的基础上演化出来的。MINA(Multipurpose Infrastructure for Network Applications)是用于开发高性能和高可用性的网络应用程序的基础框架。通过使用MINA框架可以可以省下处理…