9 月 172010
 

开源的LAMP (linux/Apache/Mysql/PHP) 平台是流行的web application platform,不少网站,包括海归网都是建立在此平台上.

在帮助海归网正式转移到LAMP平台之前, 笔者虽然长期做网站设计和开发方面的工作,但主要是在J2EE 或者 ASP.NET /ASP方面的应用, 具体是在application 层面, 架构设计主要考虑功能/可扩充性和scalability, 而网站反应速度/性能方面一般不是问题–或者流量不大,或者硬件架构足够强(hardware load balancer, cluster, dedicated web/middle tier/DB tier/team等). 在海归网, 让我有机会在LAMP环境下接触和学习到许多以前做应用或自己玩操作系统时难以接触到的问题– 除了系统和网络管理外, 有许多是关于性能优化和scalability方面的.

在这篇里分享一点积攒的LAMP环境下PHP网站的性能优化经验. (谢谢老狼和海归网提供的给我一个发挥点业余爱好的机会); 以后有时间谈谈scalability/availability等.

有许多中小网站都和海归网一样只有一台服务器(海归网有一台dedictaed的dell, 更多更差的网站shared hosting的则是几十几百个网站公用一台server), 而这台服务器需要身兼web server, application server,database server, firewall等等所有一切功能…在网站建设的初期只能在有限的硬件条件下最大限度地进行优化充分利用所有的资源保证基本的功能/性能和稳定性.

1. 编译php/apache/mysql 时的优化选项

一般来说, 用不着自己编译这些东西,直接下载binary packages就可以了–无论是debian 的apt-get 还是redhat的rpm /yum. 但是这些现成的安装包编译时一般并未根据你的服务器硬件配置做优化, 而通过选择合适的C编译器 flags 和其他选项,自己编译往往能使总体性能提高几个到几十个百分点. Continue reading »

9 月 162010
 

1.顽固坚持php4,迟迟不愿拥抱php5

其实这是我最不能理解的一点,Discuz现在的代码竟然还是以php4.3.0为最低标准的。

这种做法虽然说可以做到最大限度的兼容,php4的运行效率也确实比php5高不少。可是为了向下兼容,不得不牺牲很多高版本php的优秀特性。事实上,php5已经在各方面非常完善,面向对象方面的支持全面提升,PDO, json等类和函数相比php4强大太多了。

在CPU并行性能空前强大,内核数量4个8个12个递增的今天,php运行效率真的有那么重要吗?要知道现在web2.0网站的第一瓶颈是数据库服务器,而不是php服务器,即使php服务器压力较大,也有反向代理、动态DNS等各种各样简单有效的负载均衡方法解决。真的有必要为了些许的php运行效率,而放弃高版本php的强大功能吗?

2.代码架构混乱,不采用MVC框架,不面向对象

说实话,写了12年程序,Discuz代码我是下了十几次决心才敢开始阅读的。因为这套代码实在非常丑陋。

和我一起创业的同伴一直和我有一个争论,他坚持认为discuz发布出来的代码一定是生成出来的,内部开发的时候一定是另外一种结构。因为他认为discuz代码的可读性已经远远超过了正常人理解能力。

虽然康盛一直试图改进代码结构,在最新的Discuz!X中,我们看到他整齐的把function, class, plugins放在各自的目录里,但由于它不采用php5,也不采用MVC框架,因此代码中仍然充斥着global, require_once等等,和系统底层紧耦合且效率低下的糟糕写法。

由于没有运用MVC框架,也不面向对象,导致了插件机制难以实现,二次开发举步维艰。其实这对Comsenz自己开发团队成员,也造成了单元测试的困难。

3.缺乏国际化的眼光,偏爱gbk而不选择utf8 Continue reading »

9 月 162010
 

3月28日,戴志康释出了传说以久的内部代号为UltraX的体验版。大概是希望借用discuz已有的巨大号召力,UltraX在发布之前还是改成了discuz!X。

我在第一时间去discuz.org注册体验了一下,体验感受和我之前预计的相差无几,整理一下写出来,大家讨论:
SNS、门户、论坛互相冲突

X项目的最本质目的,应该是把Comsenz旗下的三大项目:Discuz、SuperSite和UCenter Home进行融合,减小项目和项目之间的隔阂,使之能更好地融合成为一个网站。

这一定是广大站长向Comsenz反应的一个共同心声。可是,站长们真的明白自己需要什么吗?融合了之后真的能让网站更好吗?Comsenz在大刀阔斧之前想清楚了吗?

一般来说,网站的内容质量从高到低可以分成三个档次:

   1. 媒体型,内容质量很高,有高水平的,固定成员的编辑团队。访问者到网站来大多数为了看内容,用户群结构上是一群读者围绕着一个牛人。这种类型适合建CMS型站点或者是博客。
   2. 草根型,虽然没有明确的编辑团队,但是大部分用户都有创造内的能力,用户有时候会创造内容,有时候也会阅读评论内容。内容水平虽然够不上出版,但还不错,有信息量有价值,以垂直主题为核心。这种类型适合BBS形式。
   3. 灌水聊天型,用户的文化程度不高,讨论漫无边际,并且常会出现小圈子,用户和用户之间通过人际关系维系。这种用户类型适合建SNS站点。

不管是网站的哪一个板块,都大抵是同一批人在访问。同一批访客,就有相似的需求,具有相似的特性。基本上,个人站点都只能属于上述三种情况之一,而很少会出现媒体型和灌水型混合的情况。 Continue reading »

8 月 262010
 

目前RBL服务器一般采用DNS查询或DNS区域传输的方法.国内的RBL服务器比较少,而且数据库比较小.国外的RBL服务器维护的数据库比较大,但使用起来由于国际网络原因经常有超时现象发生.企业应该根据自己收到的垃圾邮件的种类来选择合适的RBL.下面说几个常用的:

国内的:
国内的实时黑名单服务(RBL)做的最大的就是anti-spam. 它的官方网站是: http://www.anti-spam.org.cn
它提动的实时黑名单服务(RBL)主要包括四个部分:CBL、CDL和CBL+、CBL-。
CBL包含近期中国国内的主要垃圾邮件发送源。
CDL包含中国国内动态分配地址。
CBL+为CBL和CDL的合集。
CBL-是CBL+中去除了中国邮件服务运营商白名单服务(CML)的内容后的黑名单,该黑名单方便于既想使用实时黑名单,而又要保证在任何情况下都能收到来着他们的邮件的用户。

我们可以根据自己的实际情况选择下面的四种模式中的任意一种。
CBL: cbl.anti-spam.org.cn
CDL: cdl.anti-spam.org.cn
CBL+: cblplus.anti-spam.org.cn
CBL-: cblless.anti-spam.org.cn Continue reading »

8 月 242010
 

在APACHE的httpd.conf中,KeepAlive指的是保持连接活跃,类似于Mysql的永久连接。换一句话说,如果将KeepAlive设置为On,那么来自同一客户端的请求就不需要再一次连接,避免每次请求都要新建一个连接而加重服务器的负担。    

KeepAlive的连接活跃时间当然是受KeepAliveTimeOut限制的。如果第二次请求和第一次请求之间超过KeepAliveTimeOut的时间的话,第一次连接就会中断,再新建第二个连接。  

所以,一般情况下,图片较多的网站应该把KeepAlive设为On。但是KeepAliveTimeOut应该设置为多少秒就是一个值得讨论的问题了。  

如果KeepAliveTimeOut设置的时间过短,例如设置为1秒,那么APACHE就会频繁的建立新连接,当然会耗费不少的资源;反过来,如果KeepAliveTimeOut设置的时间过长,例如设置为300秒,那么APACHE中肯定有很多无用的连接会占用服务器的资源,也不是一件好事。  

所以,到底要把KeepAliveTimeOut设置为多少,要看网站的流量、服务器的配置而定。   Continue reading »

8 月 182010
 

Apache的模块选择是加固Apache的关键步骤之一。 我们所遵循的规则无非是老生常谈的:越少越好. 为了实现我们的功能和安全要求,以下模块必须启用:

模块名称           描述
httpd_core   Apache的核心模块,在Apache的每个拷贝中都必须有
mod_access   提供基于客户端主机名、IP或者其他客户端特征的访问控制。 由于本
模块对需要使用'order'、'allow'、'deny'等指令来说是必须的,所有启用
mod_auth   提供用户认证功能 (HTTP Basic Authentication)
mod_dir   提供查找并发送”index.html”, “default.htm”,这些index文件功能
mod_log_config   实现Web服务器的日子功能
mod_mime   用来设置HTML文档的字符集、内容编码、处理句柄 和MIME 类型等功能

除此之外所有的Apache模块都予以禁用。因为我们不需要它们。禁用那些模块后,进一步避免因为那些模块出现问题而导致服务器出现危险。

另外单独注一笔的是另外两个Apache的模块: mod_autoindex和mod_info .
前者给目录提供自动索引,默认情况下是启用的,这导致没有index文件的服务器目录(比如http://server_name/icons/)内容很容易就被泄漏,
而后者:mod_info , 由于它的作用就是报告apache的配置,也不能启用。

以上资料基于 apache 1.3.x 写于2005年,供参考.