变革后的论坛顺应了会员的需要和时代发展,出乎意料的顺利。才过半年时间,到2008年10月,网站的流量已经突破日IP20万,最高日发帖数超过了40万。我原计划能至少维持一年发展的服务器已经开始不稳定了,mysql的查询耗时越来越长[aceqq.com],php也频繁出现假死,100M的网卡流量已经被平均每秒80M以上的流量占满,只有不断的刷新[aceqq.com]才能挤进网站。我不得不面对一个恐怖的问题如何只花通过投放广告积累的2万多元去架构一个能支撑1000万PV,网卡下行流量大于200M的论坛! 我通过有偿请教一些网上认识的[aceqq.com]系统架构高手和专业DBA,选择了一个即经济实惠又[aceqq.com]有效的办法:增加新的服务器单独做web服务,目前正在使用的服务器单独做DB服务[aceqq.com]。由于1U的服务器一般只有2个网卡口子不能支持300M以上流量,我又从淘宝淘了2个USB网卡,Linux对硬件的支持比win强多了,USB网卡插上去就可以用。这样web服务器拥有了4个网卡口子,一个网卡口与DB服务器连接[aceqq.com],另外3个网卡口子做流量负载均衡连向外网。web服务器配置:2个4核至强CPU+12G内存+4个SAS做RAID0加速,DB服务器用的是原来的老服务器2个4核至强CPU+8G内存+2个SAS做RAID0加速[aceqq.com]。可是mysql查询的瓶颈还是[aceqq.com]没有解决,通过查找相关资料,我使用mysql的慢查询功能,发现原[aceqq.com]来这是由于通用的论坛程序没有对大负载量情况考虑周到造成的。我将原来直接使用limit start,num的分页代码更改成使用子查询的select * from table where col>(select col from table limit start,1) limit num,将原来的单列索引更换成符合Sql查询语句的复合索引,将频繁调用的sql用php写操作缓存,将like搜索转换成中文全文搜索。经过这样的优化,mysql勉强可以支撑1000万PV的论坛了,但还是有点慢,于是我安装了memcache,并将论坛的sql类改写为支持memcache的语句。虽然使用memcache会有一些延时,但相对于等待漫长的sql查询,这样[aceqq.com]的延时对浏览网站的会员是更容易忍受的选择。aceqq.com