免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 19452 | 回复: 80
打印 上一主题 下一主题

[性能] 个人观点,谈谈提高论坛性能的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-03-20 12:50 |只看该作者 |倒序浏览
这是对 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 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2004-03-20 14:00 |只看该作者

个人观点,谈谈提高论坛性能的问题

去掉了对session的支持


编译的时候去掉就可以了吧?

可以在此基础上改进用共享内存的方式来实现


PHP如何实现共享内存?对这个比较感兴趣
longnetpro 该用户已被删除
3 [报告]
发表于 2004-03-20 22:42 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
4 [报告]
发表于 2005-12-26 01:00 |只看该作者
顶一下

论坛徽章:
1
技术图书徽章
日期:2013-12-05 23:25:45
5 [报告]
发表于 2005-12-26 08:59 |只看该作者
因为一旦打开register_globals参数,其实每个用户连接都会为这个用户把$_SERVER,$_ENV等参数调入到内存


这个说法是不是需要纠正?
其实每个用户连接都会为这个用户把$_SERVER,$_ENV等参数调入到内存,这个本来就是这样子的情况的。
我想按照你的说法,应该是会把$_SERVER,$_ENV之中的元素作为独立的变量调入到内存。

论坛徽章:
0
6 [报告]
发表于 2005-12-26 10:14 |只看该作者
"session既消耗内存,也带来很多不安全的问题。"
session不安全?能否讲讲?

论坛徽章:
0
7 [报告]
发表于 2005-12-27 23:31 |只看该作者
讲讲我的经验,我前几天进行过dz4.0的缓存优化

就论坛特别是'现代'论坛这种大量功能和根据很多因素来决定显示内容的特殊应用来说,很难做到“完全静态”,能做到的仅仅是缓存一部分不因人而异的或者很少受到当前用户影响的数据。对于那些因人而异的信息比如访问控制、每个人每个组每个时段每个设置等等,这些都会影响到最终的呈现内容,这一部分就比较难处理,如果第一次访问就将这些信息缓存起来,并且把这些影响呈现内容的各个因素摘要(md5)作为缓存ID的话,产生的问题就是大量缓存文件但是使用的次数却很少,因为大多数人不会把同一个帖子看无数次,所以这样的缓存就失去了意义,而且会增加一些IO负担。

目前工作只进行了一点点,因为有其它事情。初步只完成了论坛信息和帖子列表的缓存,为了控制缓存不会太多,把个人因素的影响都去掉了,比如关闭了个人过滤,只保存组过滤等等。现在的效果是第二次访问 index 和 forumdisplay 分别减少了5和4个查询(原来分别是9个和8个,没有用任何有数据库查询的插件),观察了一段时间发现,数据库的压力确实小了,但是相反IO和apache的内存压力反而提升,特别是apache的内存压力,升高了接近10%,当然不排除最近有人疯狂下载附件(我把附件部分完全重新弄了一遍,不是dz原装的,否则死得很惨)。整个机器负载没发现什么变化。仅仅表现为执行时间减少了0.02s左右。

这一段没有时间,有时间的时候优化一下缓存,再测试一下瓶颈在哪里,优化优化。最终的结果我希望会是全部缓存。

论坛徽章:
0
8 [报告]
发表于 2005-12-28 18:02 |只看该作者
使用 memcached?

英文:http://www.danga.com/memcached/

中文:http://yudunde.blogchina.com/2537951.html

[ 本帖最后由 showsa 于 2005-12-28 18:05 编辑 ]

论坛徽章:
0
9 [报告]
发表于 2005-12-28 18:51 |只看该作者
刚才查了点资料

发现vbb3.5支持 memcached 的
可以将缓存数据存在内存中

vbb那么优秀为什么不用vbb呢?
diz~从功能上还没法和vbb比

论坛徽章:
1
技术图书徽章
日期:2013-12-05 23:25:45
10 [报告]
发表于 2005-12-29 10:28 |只看该作者
原帖由 showsa 于 2005-12-28 18:51 发表
刚才查了点资料

发现vbb3.5支持 memcached 的
可以将缓存数据存在内存中

vbb那么优秀为什么不用vbb呢?
diz~从功能上还没法和vbb比



vbb好象没有免费版本的
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP