- 论坛徽章:
- 0
|
这是对 http://bbs.chinaunix.net/forum/27/20040311/278473.html (【改造cu,大家帮忙】php如何生成html文件 )帖子的回复,可能对一些别的朋友在开发php应用时有所帮助,所以单独发表了出来,望斑竹不要当作重复帖子给删除了!
我个人认为论坛要动静结合,当然,从大型的信息发布系统来看,基本都采用了一个思路,就是内存数据库,但是对论坛这样信息更新频率比较高的应用来看,这是不能完全采用的,但是我感觉有些思路可以用到论坛的部分地方,我有下面几个建议:
1、对于缓存,我看discuz其实也就是在类似ipb的基础上进行了一些处理,在我看来也不算什么,并且并不是效果很好,不过就是把一些论坛的基本信息,比如论坛的基本设置、风格、参数什么的通过维护和修改的时候实时的生成到一个静态文件里面,在文件里面存放这一些数组,当用户来访的时候,有关这些公用信息就不用查询数据库了,而是通过包含这些所谓的cache文件来获取到公用信息,这样从表面上来看,就是减少了数据库的连接和查询次数(也是他们一直鼓吹的改进),这样做肯定能在数据量大的时候提高一定的性能,但是不是最终的解决方案,因为php在require或者include一个文件的时候,会在系统上造成四个线程,这其实在用户在线人数大的时候也是有瓶颈的,一方面的系统的瓶颈,一方面是其实对每个用户请求来说,都会把这部分数据为此用户单独调入内存一次,在我看来,可以在此基础上改进用共享内存的方式来实现,目前在下正在进行这方面的开发和改进phpbb2。
2、对应数据库连接池一事,我有这样的观点,从我公司的情况来看,我们当时有个系统后端用的mysql数据库,前段的QPS达到100以上以后,数据库在数据量大的情况下,很容易就死掉了,这就是Mysql的连接数是不能太高的,所以楼上一些朋友提到的使用类似java的连接池的方式是不错的想法,但是php本身的支持并不是很好,我们当时的解决方案是自己用c写了一个apache的handle扩展,用来专门处理数据库方面的请求,然后后面在扩展里面打开和数据库的固定数量的连接,比如100个,所有的数据库操作都用这个扩展来进行调度和处理,这个和keep alive的思路基本一致。当然,如何在php程序中改进代码,优化对数据库的操作也是非常重要的,比如批量提交、查询时候的字段优先级排序都是要考虑的。
3、对应生成静态页面的想法,我还是比较赞同的,其实我看楼主的意思不是要讨论要不要生成和数据库什么的问题,而是如何生产的问题,这个我要借鉴一些信息发布系统的思路了,信息发布系统一般来说是定期进行一次生成并,但是在检索的时候就使用内存数据库了,在内存数据库里面建立到文件名的索引,目前我感觉cu在生产静态页面方面已经做得不错了,但是还是有很多地方没有办法完全实现,比如收藏夹什么的,其实可以考虑这样来处理,就是后台用四台服务器,一台用于提供用户数据的提交,一台用于数据库,一台用于处理生产静态页面,并将静态页面的索引及时更新,一台用于显示静态页面,可能很多人会认为这样投入太大,其实很多部分是必须分开的,相信一些接触过大型平台的人都明白这一点。
4、另外我要说的是有关对php的优化问题,就像坛子里面很多人讨论过的register_globals的问题,我建议这些都用off的方式,因为一旦打开register_globals参数,其实每个用户连接都会为这个用户把$_SERVER,$_ENV等参数调入到内存,有些系统配置比较复杂,这些全局的参数其实是很占用内存的,同时要注意xxxx_gpc的参数的配置,建议就打开$_GET和$_POST参数就可以了,这样可以省掉很多内存,也可以提高系统安全性。据在yahoo工作的php创始人说到,yahoo目前使用的部分应用里面使用的php语言版本都是经过定制的,除了上面的设置外,去掉了对session的支持,session既消耗内存,也带来很多不安全的问题。
个人观点,不带对任何人的攻击,大家重在交流!如有不妥,敬请指点!
[ 本帖最后由 HonestQiao 于 2005-12-26 08:56 编辑 ] |
|