PHP如何解决网站大流量与高并发的问题


Posted in PHP onJune 25, 2011

首先,确认服务器硬件是否足够支持当前的流量。

普通的P4服务器一般最多能支持每天10万独立IP,如果访问量比这个还要大,
那么必须首先配置一台更高性能的专用服务器才能解决问题

,否则怎么优化都不可能彻底解决性能问题。

其次,优化数据库访问。

前台实现完全的静态化当然最好,可以完全不用访问数据库,不过对于频繁更新的网站,
静态化往往不能满足某些功能。

缓存技术就是另一个解决方案,就是将动态数据存储到缓存文件中,动态网页直接调用
这些文件,而不必再访问数据库,WordPress和Z-Blog都大量使用这种缓存技术。我
自己也写过一个Z-Blog的计数器插件,也是基于这样的原理。

如果确实无法避免对数据库的访问,那么可以尝试优化数据库的查询SQL.避免使用
Select * from这样的语句,每次查询只返回自己需要的结果,避免短时间内的大
量SQL查询。

第三,禁止外部的盗链。

外部网站的图片或者文件盗链往往会带来大量的负载压力,因此应该严格限制外部对
于自身的图片或者文件盗链,好在目前可以简单地通过refer来控制盗链,Apache自
己就可以通过配置来禁止盗链,IIS也有一些第三方的ISAPI可以实现同样的功能。当
然,伪造refer也可以通过代码来实现盗链,不过目前蓄意伪造refer盗链的还不多,
可以先不去考虑,或者使用非技术手段来解决,比如在图片上增加水印。

第四,控制大文件的下载。

大文件的下载会占用很大的流量,并且对于非SCSI硬盘来说,大量文件下载会消耗
CPU,使得网站响应能力下降。因此,尽量不要提供超过2M的大文件下载,如果需要
提供,建议将大文件放在另外一台服务器上。

第五,使用不同主机分流主要流量

将文件放在不同的主机上,提供不同的镜像供用户下载。比如如果觉得RSS文件占用
流量大,那么使用FeedBurner或者FeedSky等服务将RSS输出放在其他主机上,这
样别人访问的流量压力就大多集中在FeedBurner的主机上,RSS就不占用太多资源了。

第六,使用流量分析统计软件。

在网站上安装一个流量分析统计软件,可以即时知道哪些地方耗费了大量流量,哪些页
面需要再进行优化,因此,解决流量问题还需要进行精确的统计分析才可以。我推荐使
用的流量分析统计软件是Google Analytics(Google分析)。我使用过程中感觉其
效果非常不错,稍后我将详细介绍一下Google Analytics的一些使用常识和技巧。

PHP 相关文章推荐
PHP无敌近乎加密方式!
Jul 17 PHP
php代码收集表单内容并写入文件的代码
Jan 29 PHP
解析yahoo邮件用phpmailer发送的实例
Jun 24 PHP
php使用curl存储cookie的示例
Mar 31 PHP
Codeigniter出现错误提示Error with CACHE directory的解决方案
Jun 12 PHP
浅析ThinkPHP的模板输出功能
Jul 01 PHP
PHP魔术方法__GET、__SET使用实例
Nov 25 PHP
php操作mongoDB实例分析
Dec 29 PHP
php读取文件内容到数组的方法
Mar 16 PHP
深入探究PHP的多进程编程方法
Aug 18 PHP
thinkPHP5实现数据库添加内容的方法
Oct 25 PHP
使用git迁移Laravel项目至新开发环境的步骤详解
Apr 06 PHP
session在PHP大型web应用中的使用
Jun 25 #PHP
php URL跳转代码 减少外链
Jun 25 #PHP
php session安全问题分析
Jun 24 #PHP
使用PHP实现二分查找算法代码分享
Jun 24 #PHP
PHP求最大子序列和的算法实现
Jun 24 #PHP
php中转义mysql语句的实现代码
Jun 24 #PHP
把1316这个数表示成两个数的和,其中一个为13的倍数,另一个是11的倍数,求这两个数。
Jun 24 #PHP
You might like
在smarty模板中使用PHP函数的方法
2011/04/23 PHP
ThinkPHP3.1新特性之对分组支持的改进与完善概述
2014/06/19 PHP
PHP迭代与递归实现无限级分类
2017/08/28 PHP
Prototype Date对象 学习
2009/07/12 Javascript
javascript 触发事件列表 比较不错
2009/09/03 Javascript
JQuery自适应IFrame高度(支持嵌套 兼容IE,ff,safafi,chrome)
2011/03/28 Javascript
JS常见算法详解
2017/02/28 Javascript
JavaScript实现三级联动菜单实例代码
2017/06/26 Javascript
原生javascript实现的全屏滚动功能示例
2017/09/19 Javascript
微信小程序使用radio显示单选项功能【附源码下载】
2017/12/11 Javascript
基于Vue+element-ui 的Table二次封装的实现
2018/07/20 Javascript
微信小程序实现简单表格
2019/02/14 Javascript
了解JavaScript函数中的默认参数
2019/05/30 Javascript
Vue项目打包压缩的实现(让页面更快响应)
2020/03/10 Javascript
python算法学习之基数排序实例
2013/12/18 Python
python动态监控日志内容的示例
2014/02/16 Python
连接Python程序与MySQL的教程
2015/04/29 Python
浅析Python中的for 循环
2016/06/09 Python
Python爬取十篇新闻统计TF-IDF
2018/01/03 Python
Python实现按中文排序的方法示例
2018/04/25 Python
python递归函数绘制分形树的方法
2018/06/22 Python
Python实现正则表达式匹配任意的邮箱方法
2018/12/20 Python
Python with标签使用方法解析
2020/01/17 Python
Python实现计算图像RGB均值方式
2020/06/04 Python
PyQt5 QDockWidget控件应用详解
2020/08/12 Python
Jimmy Choo美国官网:周仰杰鞋子品牌
2018/06/08 全球购物
c++工程师面试问题
2013/08/04 面试题
写演讲稿所需要注意的4个条件
2014/01/09 职场文书
迟到检讨书900字
2014/01/14 职场文书
培训研修方案
2014/06/06 职场文书
全民创业工作总结
2015/08/13 职场文书
《坐井观天》教学反思
2016/02/18 职场文书
教你解决往mysql数据库中存入汉字报错的方法
2021/05/06 MySQL
Mysql实现主从配置和多主多从配置
2021/06/02 MySQL
我去timi了,一起去timi是什么意思?
2022/04/13 杂记
详解CSS中postion和opacity及cursor的特性
2022/08/14 HTML / CSS