PHP网站千万级&百万级&亿级别数据量生成静态HTML的困扰
上一篇讲到:phpcms千万级网站架构必备插件(phpcms Mysql表分区插件)(百万千万大数据量网站必备) 今天讲讲大数据量网站静态生成困扰。
很多种主流的CMS。生成速度是大家公认的很慢,虽然通过网上的教程可以修改的稍微快一点,但是解决不了根本问题,在一个站采集到10万数据的时候无论怎么修改都会很慢。像phpcms、帝国CMS虽然生成速度稍微强那么一点,但是也依然还是10万数据要生成好几个小时才OK,更别说百万、千万级别的网站了。
经过到处查资料,希望能找到一种能在生成百万数据的时候也能很快的方法。但是找来找去也没有找到什么能治根本的方法。
后来就在想,是不是数据量大于10万的网站就不适合生成真静态了,因为每修改一次页面都要重新生成一次十分麻烦,费这个功夫还不如直接伪静态了,然后增加硬件来解决瓶颈。
引用:浪迹天涯
生成100万个页面,这个本身工作量就不小,而且是一次性生成,速度慢是正常的,因为瓶颈主要在于CPU,再者还有磁盘IO和内存,而且还与服务器的性能硬件环境等有关系。所以再怎么优化也快不到哪去。
对于你腾讯、新浪这种新闻门户网站都是在发布一条新闻时就生成静态页面并发布到静态池,而用户访问则会通过前端SQUID来访问页面。由于这种新闻的网站在页面上所能浏览到的页面一般不会超过100个分页,所以当一个模板改版或者是修改了页面元素,它们并不会生成所有的页面,而是只生成这100个分页里的新闻,其它的新闻页面就不去生成,因为访问的人很少,而查看这些人的用户都是来自于搜索引擎,这样的用户不多,而且这些没有重新生成新版页面的内容也是可以查看的,并不影响用户的体验,也减轻了网站的压力。
如果当改版时,你一定要重新生成所有页面,那么建议你手动生成,可以单独拿出一台服务器来跑这个页面生成程序,甚至可以使用多线程来跑,并在用户访问低期(如:凌晨2:00等)时重新生成,这样就不会影响用户的使用。而对于搜索引擎来说,并不冲突,只要页面的URL没有变,其它的不重要。个人的解决方案是这样的。
引用:alexlee
如果一次性生成100个页面,但是实际上只有1w个页面是有用户访问的,那就浪费了很多磁盘空间和CPU资源,可以按需索取。以前我们公司的项目就是所有的缓存页面是由人工手动生成,在生成期间,其他操作就会很卡,由用户去触发生成静态页面是首选
总结:看来,无论是file_put_content还是fwrite还是smarty。受限于服务器硬件资料撸的起撸不起的因素,都不能仅仅通过一种方法或者一个函数就能解决这个问题了。
现在只能把生成静态页的这个动作交给用户去触发,当用户访问了这个页面才告诉PHP去执行生成静态页,这样就不用一次性生成这么多啦。只不过,第1个访问这个页面的用户有点卡。
以上就是针对php 十万级、百万级、千万级网站的解决思考。
延伸阅读:phpcms千万级网站架构必备插件(phpcms Mysql表分区插件)(百万千万大数据量网站必备)
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/tech/courses/262988.html