优秀的轻量级内容管理系统: CMS Made Simple
CMS Made Simple (简称CMSMS) 是一款轻量级的内容管理系统,旨在为静态内容为主的小型门户网站提供最简单最轻松的架站体验。
CMSMS 以不限深度的树型结构来组织内容,符合大部分场合的信息结构。这些内容通常是相对静态的,其内容、结构和访问方式不随着时间的推移而改变。相 比于早期的 HTML 静态页面组织方式,采用CMS系统可以把它们方便组织起来,便于维护。而且采用 CMS 可以将内容和表现分离,便于更新界面。CMSMS 还大量采用了缓冲机制,使得管理静态内容更加高效。CMSMS 的结构非常清晰,使用扩展模块或者模版主题等非常方便。同时,它的 news 模块可以用来组织新闻等基于时间排序的信息,支持分类。
正如 CMS Made Simple 所说,让内容管理变得简单。它的网站中的一句话也相当有意思:“So easy, it feels like take a holiday”,让网站建设像度假一样愉快。我觉得简单是它最重要的特性。不要小看了这个“简单”,很多曾经很优秀的软件在不断发展过程中失去了它的简单性,日趋复杂,让人望而生厌,比如RealPlayer和UltraEdit。最近在看的 Lua 语言就是一个很好的正面例子,它在不断变得强大的同时,始终保持着简单性,非常不容易。核心简单,同时可灵活扩展,是很多优秀软件的共同特征。
相比于现在几大主流的 CMS,比如 Joomla!、Drupal、Xoops、Plone 等,CMSMS在做小型门户方面更有优势,比如公司、团体或者某种机构的门户。之前考虑用Joomla! 来搭建山野协会的网站,但对它的单元和分类相当困惑,这种固定的三层结构很不适合表达协会的那些信息。虽然它也支持静态内容,却是没有结构的。多次觉得不爽之后,终于找到了 CMSMS 这个更加的构建平台,相见恨晚。
CMS Made Simple 的一些特点列举如下:
- 简单的用户和组管理
- 基于组的权限管理
- 只能缓冲机制使得只需要从数据库中获取必须的信息
- 完全的模版支持,不需改变任何内容就可以获得不限的表现形式
- 简单的安装向导和升级
- 最小的系统需求
- 支持多语言的管理面板
- 集成可选的所见即所得编辑器
- 不限深度和大小的内容层次
- 可选的自动生成目录
- 集成文件上传和管理功能
- 模块API支持无限扩展
- 集成审查日志
- 包括新闻模块
- 包括RSS模块
- 可以用简单的PHP代码来扩展管理功能
- 友好的论坛和IRC支持
davies 发表于 2006 年 12 月 23 日 | 1 条留言
Gmail和Orkut注册再次升级
这两天把GMail和Orkut注册服务做了重要更新,主要在以下几方面:
- 将后台程序改进为多进程和多线程安全的,提高了并发请求下的稳定性。之前的程序未考虑并发情况,会导致文件读些冲突而文件损坏和丢失数据。
- 改进了验证GMail邀请有效性的算法,使得更新邀请和获取邀请更快捷。快速检验模式下,使用多线程进行并发测试,速度是原来的几十倍,但准确性降低,在批量检查的时候使用。
- 添加了反机器人测试(CAPTCHA),防止GMail邀请被爬虫误取走。用PyCAPTCHA实现,很好用。
- 对页面和后台程序做了改进,使得页面响应速度更快,为用户提供更好的体验。
- 改变了服务的地址,现在统一用域名 http://www.daviesliu.net/ 进行访问,原来的地址仍然有效,但会重定向到 http://www.daviesliu.net/share/,做了友情链接的朋友麻烦更新。
- 更改了提交GMail邀请的信箱为:gmail@daviesliu.net,这个更短更友好一些。它是使用Google Domain Mail 服务,本质上跟Share.Invitation@gmail.com是一样的。
现在系统的资源比较充足,感谢过去这一段时间内一直给本站发送邀请的朋友们,见页面的致谢。很可惜的是,早期的原始数据丢失,在此向那些朋友表示歉意,但邀请大部分已找回。
现在新注册的用户可能可以有50个邀请名额,对个人已经是足够了,希望在这里注册的用户能够将富余部分回馈本站,谢谢。如果以后GMail邀请资源紧张,可能会采取凭GMail邀请注册Orkut的方式,希望广大GMail用户多多支持。
davies 发表于 2006 年 09 月 15 日 | 13 条留言
Lighttpd+Squid+Apache搭建高效率Web服务器
架构原理
Apache通常是开源界的首选Web服务器,因为它的强大和可靠,已经具有了品牌效应,可以适用于绝大部分的应用场合。但是它的强大有时候却显得笨重,配置文件得让人望而生畏,高并发情况下效率不太高。而轻量级的Web服务器Lighttpd却是后起之秀,其静态文件的响应能力远高于Apache,据说是Apache的2-3倍。Lighttpd的高性能和易用性,足以打动我们,在它能够胜任的领域,尽量用它。Lighttpd对PHP的支持也很好,还可以通过Fastcgi方式支持其他的语言,比如Python。
毕竟Lighttpd是轻量级的服务器,功能上不能跟Apache比,某些应用无法胜任。比如Lighttpd还不支持缓存,而现在的绝大部分站点都是用程序生成动态内容,没有缓存的话即使程序的效率再高也很难满足大访问量的需求,而且让程序不停的去做同一件事情也实在没有意义。首先,Web程序是需要做缓存处理的,即把反复使用的数据做缓存。即使这样也还不够,单单是启动Web处理程序的代价就不少,缓存最后生成的静态页面是必不可少的。而做这个是 Squid的强项,它本是做代理的,支持高效的缓存,可以用来给站点做反向代理加速。把Squid放在Apache或者Lighttpd的前端来缓存 Web服务器生成的动态内容,而Web应用程序只需要适当地设置页面实效时间即可。
即使是大部分内容动态生成的网站,仍免不了会有一些静态元素,比如图片、JS脚本、CSS等等,将Squid放在Apache或者Lighttp前端后,反而会使性能下降,毕竟处理HTTP请求是Web服务器的强项。而且已经存在于文件系统中的静态内容再在Squid中缓存一下,浪费内存和硬盘空间。因此可以考虑将Lighttpd再放在Squid的前面,构成 Lighttpd+Squid+Apache的一条处理链,Lighttpd在最前面,专门用来处理静态内容的请求,把动态内容请求通过proxy模块转发给Squid,如果Squid中有该请求的内容且没有过期,则直接返回给Lighttpd。新请求或者过期的页面请求交由Apache中Web程序来处理。经过Lighttpd和Squid的两级过滤,Apache需要处理的请求将大大减少,减少了Web应用程序的压力。同时这样的构架,便于把不同的处理分散到多台计算机上进行,由Lighttpd在前面统一把关。
在这种架构下,每一级都是可以进行单独优化的,比如Lighttpd可以采用异步IO方式,Squid可以启用内存来缓存,Apache可以启用MPM 等,并且每一级都可以使用多台机器来均衡负载,伸缩性很好。
实例讲解
下面以daviesliu.net和rainbud.net域下面的几个站点为例来介绍一下此方案的具体做法。daviesliu.net域下有几个用 mod_python实现的blog站点,几个php的站点,一个mod_python的小程序,以后可能还会架设几个PHP和Django的站点。而服务器非常弱,CPU为Celeron 500,内存为PC 100 384M,因此比较关注Web服务器的效率。这几个站点都是采用虚拟主机方式,开在同一台机器的同一个端口上。
Lighttpd服务于80端口,Squid运行在3128端口,Apache运行在81端口。
Lighttpd的配置
多个域名采用/var/www/domain/subdomain 的目录结构,用evhost模块配置document-root如下:
evhost.path-pattern = var.basedir + "/%0/%3/"
FtpSearch中有Perl脚本,需要启用CGI支持,它是用来做ftp站内搜索的,缓存的意义不大,直接由lighttpd的mod_cgi处理:
$HTTP["url"] =~ "^/cgi-bin/" { # only allow cgi's in this directory
dir-listing.activate = "disable" # disable directory listings
cgi.assign = ( ".pl" => "/usr/bin/perl", ".cgi" => "/usr/bin/perl" )
}
bbs使用的是phpBB,访问量不大,可以放在lighttpd(fastcgi)或者apache(mod_php)下,暂时使用 lighttpd,设置所有.php的页面请求有fastcgi处理:
fastcgi.server = ( ".php" => ( ( "host" => "127.0.0.1", "port"=> 1026, "bin-path" => "/usr/bin/php-cgi" ) ) )
blog.daviesliu.net 和 blog.rainbud.net 是用mod_python编写的blogxp程序,所有静态内容都有扩展名,而动态内容没有扩展名。blogxp是用python程序生成XML格式的数据再交由mod_xslt转换成HTML页面,只能放在Apache下运行。该站点采用典型Lighttpd+Squid+Apache方式处理:
$HTTP["host"] =~ "^blog" {
$HTTP["url"] !~ "\." {
proxy.server = ( "" => ( "localhost" => ( "host"=> "127.0.0.1", "port"=> 3128 ) ) ) #3128端口为
}
}
share中有静态页面,也有用mod_python处理的请求,在/cgi/下:
$HTTP["host"] =~ "^share" {
proxy.server = (
"/cgi" => ( "localhost" => ( "host"=> "127.0.0.1", "port"=> 3128 ) )
)
}
Squid的配置
只允许本地访问:
http_port 3128
http_access allow localhost
http_access deny all
启用反向代理:
httpd_accel_host 127.0.0.1
httpd_accel_port 81 #apache的端口
httpd_accel_single_host on
httpd_accel_with_proxy on #启用缓存
httpd_accel_uses_host_header on #启用虚拟主机支持
此方向代理支持该主机上的所有域名。
Apache的配置
配置/etc/conf.d/apache2,让其加载mod_python、mod_xslt、mod_php模块:
APACHE2_OPTS="-D PYTHON -D XSLT -D PHP5"
所有网站的根目录:
<Directory "/var/www">
AllowOverride All #允许.htaccess覆盖
Order allow,deny
Allow from all
</Directory>
基于域名的虚拟主机:
<VirtualHost *:81>
ServerName blog.daviesliu.net
DocumentRoot /var/www/daviesliu.net/blog
</VirtualHost>
这里明显没有lighttpd的evhost配置方便。
blog.daviesliu.net下的.htaccess设置(便于开发,不用重启Apache):
SetHandler mod_python
PythonHandler blogxp.publisher
PythonDebug On
PythonAutoReload On
<FilesMatch "\.">
SetHandler None #静态文件直接由Apache处理
</FilesMatch>
<IfModule mod_xslt.c>
AddType text/xsl .xsl #防止对xsl文件进行转化
AddOutputFilterByType mod_xslt text/xml
XSLTCache off
XSLTProcess on
</IfModule>
Header set Pragma "cache"
Header set Cache-Control "cache"
在blogxp.publisher里面,还需要设置返回的文档类型和过期时间:
req.content_type = "text/xml"
req.headers_out['Expires'] = formatdate( time.time() + 60 * 5 )
经过这样的配置,所有站点都可以通过80、3128、81三个端口进行正常访问,80端口用作对外的访问,以减少负荷。81端口可以用作开发时的调试,没有缓存的困扰。
性能测试
由于时间和精力有限,下面只用ab2做一个并不规范的性能对比测试(每项都测多次取平均),评价指标为每秒钟的请求数。
测试命令,以测试lighttpd上并发10个请求 scripts/prototype.js 为例:
ab2 -n 1000 -c 10 http://blog.daviesliu.net:80/scripts/prototype.js
静态内容:prototype.js (27kB)
| Con | Lighttpd(:80) | Squid(:3128) | Apache(:81) |
| 1 | 380 | 210 | 240 |
| 10 | 410 | 215 | 240 |
| 100 | 380 | 160 | 230 |
可见在静态内容上,Lighttpd表现强劲,而Squid在没有配内存缓存的情况下比另两个Web服务器的性能要差些。
动态页面:/rss (31kB)
| Con | Lighttpd(:80) | Squid(:3128) | Apache(:81) |
| 1 | 103 | 210 | 6.17 |
| 10 | 110 | 200 | 6.04 |
| 100 | 100 | 100 | 6.24 |
在动态内容上,Squid的作用非常明显,而Lighttpd受限于Squid的效率,并且还要低一大截。如果是有多台Squid来做均衡的话,Lighttpd的功效才能发挥出来。
在单机且静态内容很少的情况下,可以不用Lighttpd而将Squid置于最前面。
davies 发表于 2006 年 09 月 9 日 | 15 条留言
掏宝网购物
早就听说掏宝网是个不错的网上购物方式,尤其是它的支付宝比较可靠,这几天终于实践了一下。
想买几本有关登山的书《北大山鹰社登山手册》和《中国登山圣经》,这种书发行量有限,一般的书店没有,某些网上商城有卖,却价格不菲。想到了掏宝,搜了一把,果然有人卖这两本书,《中国登山圣经》的最低售价是18元,加上5元邮费也就4折(原价58元),相对于一般书店的8.8折已经相当不错了。另外一本最低不到7折,包括邮费。
8号下了订单,第二天通过网上支付从中国工商银行的卡里往支付宝付费,这时候自己的钱花出去了,但对方并没有收到,暂存在支付宝那里。三天后收到了用快递方式送来的《北大山鹰社登山手册》,在网上确认之后,对方才真正拿到货款。如果没有收到货或者货不满意,可以要求退货,在卖家同意后可以拿回自己的钱,否则可以投诉。交易完成后,买卖双方还要互相做信用评价。
通过支付宝作为中介,很好地解决了网上交易的信用问题,使得互不相识的人也可以放心地进行网上交易了,尽情享受网上购物或者网上开店的便利。
,网上购物更方便更安全
davies 发表于 2006 年 05 月 16 日 | 396 条留言
第 1 / 1 页