PHP解决网站大数据大流量与高并发
1:硬件方面
普通的一个p4的服务器每天最多能支持10万左右的IP,如果访问量超过10W那么需要专用的服务器才能解决,如果硬件不给力软件怎么优化都是于事无补的。主要影响服务器的速度
有:网络-硬盘读写速度-内存大小-cpu处理速度。
2:软件方面
第一个要说的就是数据库,首先要有一个很好的架构,查询尽量不用*避免相关子查询,给经常查询的添加索引,用排序来取代非顺序存取,如果条件允许,一般MySQL服务器最好安装在Linux操作系统中。关于apache和nginx在高并发的情况下推荐使用nginx,nginx是apache服务器不错的替代品,nginx内存消耗少,官方测试能够支持5万并发链接,在实际生产环境中跑到2-3万并发连接数,php方面不需要的模块尽量关闭,使用memcached, Memcached是一个高性能的分布式内存对象缓存系统,不使用数据库直接从内存当中调数据,这样大大提升了速度,iis或apache启用GZIP压缩优化网站,压缩网站内容大大节省网站流量。
第二 禁止外部的盗链。
外部网站的图片或者文件盗链往往会带来大量的负载压力,因此应该严格限制外部对于自身的图片或者文件盗链,好在目前可以简单第通过refer来控制盗链,apache自己就可以通过配置来禁止盗链,IIS也有一些第三方的ISAPI可以实现同样的功能,当然,伪造refer也可以通过代码来实现盗链,不过目前蓄意伪造refer盗链的还不多,可以先不考虑,或者使用非技术手段来解决,比如在图片上增加水印。
第三 控制大文件的下载。
大文件的下载会占用很大的流量,并且对于非SCSI硬盘来说,大量文件下载会消耗CPU,使得网站影响力下降,因此,尽量不要提供超过2M的大文件下载,如果需要提供,建议将大文件放在另外一台服务器上。
第四 使用不同主机分流主要流量
将文件放在不同的主机上,提供不同的镜像供用户下载,比如如果觉得RSS文件占用流量大,那么使用FeedBurner或者FeedSKy等服务将Rss输出放在其他主机上,这样别人访问的流量压力就大多集中在FeedBurner的主机上,RSS就不占用太多资源了。
第六 使用流量分析统计软件。
在网站上安装一个流量分析统计软件,可以即时知道哪些地方耗费了大量流量,那些页面需要在进行优化,因此,解决流量问题还需要进行精确的统计分析才可以,比如:Google Analytics(Google分析)
高并发和高负载的约束条件:硬件 部署 操作系统 Web服务器 PHP Mysql 测试
部署:服务器分离, 数据库集群和库表散列 镜像 负载均衡
负载均衡分类: 1 DNS 轮询 2 代理服务器负载均衡 3 地址转换网关负载均衡 4 NAT负载均衡 6混合型负载均衡
部署方案1:
适用范围:静态内容为主体的网站和应用系统,对系统安全要求较高的网站和应用系统。
Main Server:主服务器
承载程序的主体运行压力,处理网站或应用系统中的动态请求;
将静态页面推送至多个发布服务器;
将附件文件推送至文件服务器;
安全要求较高,以静态为主的网站,可将服务器置于内网屏蔽外网的访问
DB Server:数据库服务器
承载数据库读写压力;
只与主服务器进行数据量交换 屏蔽外网访问,
File/Video Server:文件/视频服务器
承载系统中占用系统资源和宽带资源较大的数据流;
作为大附件的存储和读写仓库;
作为视频服务器将具备视频自动处理能力。
发布服务器组:
只负责静态页面的发布,承载绝大多数的web请求;
通过Nginx进行负载均衡部署。
部署方案2:
使用范围:以动态交互内容为主体的网站或应用系统;负载压力较大,且预算比较充足的网站或应用系统;
web服务器组:
web服务无主从关系,属平行冗余设计;
通过前端负载均衡设备或Nginx反向代理实现负载均衡;
划分专用文件服务器/视频服务器有效分离轻/重总线;
每台web服务器可通过DEC可实现链接所有数据库,同时划分主从。
数据库服务器组:
相对均衡的承载数据库读写压力;
通过数据库物理文件的映射实现多数据库的数据同步。
共享磁盘/磁盘阵列
将用于数据物理文件的统一读写
用于大型附件的存储仓库 通过自身物理磁盘的均衡和冗余,确保整体系统的IO效率和数据安全;
方案特性:
通过前端负载均衡,合理分配web压力;
通过文件/视频服务器与常规web服务器的分离,合理分配轻重数据流;
通过数据库服务器组,合理分配数据库IO压力;
每台web服务器通常只连接一台数据库服务器,通过DFC的心跳检测,可在极短时间内自动切换至冗余数据库服务器;
磁盘阵列的引用,大幅提升系统IO效率的同时,极大增强了数据安全性。
Web服务器:
Web服务器很大一部分资源占用来自于处理web请求,通常情况下也就是apache产生的压力,在高并发链接的情况下, nginx是apache服务器不错的替代品,nginx是俄罗斯人编写的一款高性能的HTTP和反向代理服务器。在国内,已经有新浪,搜狐通行证 网易新闻网易博客, 金山逍遥网 校内网 YUPOO相册 豆瓣 迅雷看看等多家网站,频道使用Nginx服务器。
Nginx的优势:
高并发链接:官方测试能够支撑5万并发链接,在实际生产环境中跑到2~3万开发连接数。
内存消耗少:在3万并发连接下,开启的10个Nginx进程才消耗150M内存(15M*10=150M)。
内置的健康检查功能:如果Nginx Proxy 后端的某台Web服务器宕机了,不会影响前端访问。
策略:相对于老牌的apache,我们选择Lighttpd和nginx 这些具有更小的资源占用率和更高的负载能力的web服务器。
mysql:
mysql本身具备了很强的负载能力,mysql优化是一项很复杂的工作,因为这最终需要对系统优化的很好理解,大家都知道数据库工作就是大量的,短时的查询和读写,除了程序开发是需要注意建立索引、提高查询效率等软件开发技巧之外,从硬件设施的角度影响Mysql执行效率最主要来自于磁盘搜索,磁盘IO水平 CPU周期 内存宽带
根据服务器上的硬件和软件条件进行MySQL优化,MySQL优化的核心在于系统资源的分配,这不等于无限制的给MySQL分配更多的资源。在MySQL配置文件中我们介绍几个最值得关注的参数:
改变索引缓冲区长度(key_buffer)
改变表长(read_buffer_size)
设定打开表的数目的最大值(table_cache)
对缓长查询设定一个时间限制(long_query_time)
如果条件允许,一般MySQL服务器最好安装在Linux操作系统中,而不是安装在FreeBSD中。
策略:MySQL优化需要根据业务系统的数据库读写特性和服务器硬件配置,指定不同的优化方案,并且可以根据需要部署MySQL的主从结构。
PHP:
1. 加载尽可能少的模块;
2. 如果是在window平台下,尽可能使用IIS或者Nginx来替代我们平常用的apache;
3 安装加速器(都是通过缓存php代码预编译的结果和数据库结果来提高php代码的执行速度)
eAccelerator eAccerator是一个自由开放源码php加速器,优化和动态内容缓存,提高了性能php脚本的缓存性能,使得PHP脚本在编译的状态下,对服务器的开销几乎完全消除。
Apc:Alternative PHP Cache(APC) 是PHP的一个免费公开的优化代码缓存,它用来提供免费,公开并且强健的架构来缓存和优化 PHP 的中间代码。
memcache:memcache 是由Danga Interactive开发的,高性能的,分布式的内存对象缓存系统,用于在动态应用中减少数据库负载,提升访问速度,主要机制是通过在内存例维护一个统一的巨大的hash表,Memcache能够用来存储各种格式的数据,包括图像,视频,文件以及数据库检索的结果等,
Xcache:国人开发的缓存器
策略:为PHP安装加速器
代理服务器(缓存服务器)
Squid Cache (简称Squid) 是一个流行的自由软件(GNU通用公众许可证)的代理服务器和Web缓存服务器。Squid有广泛的用途,从作为网页服务器的前置cache服务器缓存相关请求来提高web服务器的速度,到为一组人共享网络资源而缓存万维网,域名系统和其他网络搜索,到通过过滤流量帮助网络安全,都局域网通过代理网,squid主要设计用于在unxi一类系统运行。
策略:安装Squid 反向代理服务器,能够大幅度提高服务器效率。
压力测试:压力测试是一种基本的质量保证行为,它是每个重要软件测试工作的一部分,压力测试的基本思路很简单:不是在常规条件下运行手动或自动测试,而是在计算机数量较少或系统资源匮乏的条件下运行测试。通常要进行压力测试的资源包括内部内存 CPU可用性,磁盘空间和网络宽带等,一般用并发来做压力测试。
压力测试工具: webbench ApacheBench等
漏洞测试:在我们的系统中漏洞主要包括:sql注入漏洞,xss跨站脚本攻击等,安全方面还包括系统软件,如操作系统漏洞,mysql apache 等的漏洞,一般可以通过升级来解决。
漏洞测试工具:Acunetix Web Vulnerability Scanner
No Related content found.
PHP解决网站大数据大流量与高并发的更多相关文章
- PHP 网站大流量与高并发的解决方法
php 网站如何应对大流量与高并发呢? 首先,确认服务器硬件是否足够支持当前的流量. 普通的P4服务器一般最多能支持每天10万地理IP,如果访问量比这个还要大,则请配置一台更高性能的专用服务器. 否则 ...
- 高并发解决方案--负载均衡(HTTP,DNS,反向代理服务器)(解决大流量,高并发)
高并发解决方案--负载均衡(HTTP,DNS,反向代理服务器)(解决大流量,高并发) 一.总结 1.什么是负载均衡:当一台服务器的性能达到极限时,我们可以使用服务器集群来提高网站的整体性能.那么,在服 ...
- MySql计数器,如网站点击数,如何实现高性能高并发的计数器功能
MySql计数器,如网站点击数,如何实现高性能高并发的计数器功能 Clicks: Date: -- :: Power By 李轩Lane TagMysql计数器高性能 现在有很多的项目,对计数器的实现 ...
- 心知天气数据API 产品的高并发实践
心知天气数据API 产品的高并发实践 心知天气作为国内领先的商业气象服务提供商,天气数据API 产品从公司创立以来就一直扮演着很重要的角色.2009 年API 产品初次上线,历经十年,我们不断用心迭代 ...
- PHP如何解决网站大流量与高并发的问题
首先,确认服务器硬件是否足够支持当前的流量. 普通的P4服务器一般最多能支持每天10万独立IP,如果访问量比这个还要大, 那么必须首先配置一台更高性能的专用服务器才能解决问题 ,否则怎么优化都不可能彻 ...
- PHP如何解决网站大流量与高并发的…
首先,确认服务器硬件是否足够支持当前的流量. 普通的P4服务器一般最多能支持每天10万独立IP,如果访问量比这个还要大, 那么必须首先配置一台更高性能的专用服务器才能解决问题 ,否则怎么优化都不可能彻 ...
- PHP解决网站大流量与高并发
1:硬件方面 普通的一个p4的服务器每天最多能支持大约10万左右的IP,如果访问量超过10W那么需要专用的服务器才能解决,如果硬件不给力 软件怎么优化都是于事无补的.主要影响服务器的速度 有:网络-硬 ...
- PHP如何解决网站大流量与高并发的问题(一)
高并发的相关概念 在某个时间点,有多少个访问量 如果一个系统的日PV在千万以上,有可能是一个高并发的系统 QPS: 每秒钟请求或者查询的数量,在互联网领域,指每秒相应请求数(指HTTP请求) 吞吐量: ...
- PHP如何解决网站大流量与高并发的问题(四)
动态语言的并发处理 相关概念 什么是进程.线程.协程 什么是多进程.多线程 同步阻塞模型 异步非阻塞模型 php并发编程实践 什么是进程.线程.协程 进程 进程是一个执行中的程序 进程的三态模型:多道 ...
随机推荐
- 利用Google翻译成多国语言的见解
1.首先注意,英语句子中的 第一个单词的首字母要大写, 2.句子结尾了,要用句号. 3.英语中单词和前面的标点符号要留一个空格,如: you.Are 应该是 you. Are you..... ...
- [LeetCode] Level Order Traversal
题目说明 Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to r ...
- SpringMVC异常处理机制
SpringMVC异常处理机制 springMVC会将所有在doDispatch方法中的异常捕获,然后处理.无法处理的异常会抛出给容器处理. 在doDispatch()中调用processDispat ...
- CentOS探索之路3---安装python3
安装Python3 总述 一般来说Linux类型的操作系统都会自带安装python,但是系统默认安装的python都是2.x的版本.而现在一般使用的是python3.x版本,相比于python2. ...
- c# 获取应用程序exe文件路径及退出应用程序的几种方法
this.GetType().Assembly.Location; Application.ExecutablePath; Application.StartupPath:和上面的相比缺少可执行文件 ...
- c#基础学习(0627)之类型转换、算数运算符++、--
类型转换 我们要求等号两边参与运算的操作数的类型必须一致,如果不一致,满足下列条件会发生自动类型转换,或者称之为隐式类型转换 例如:int和double兼容(都是数字类型) 目标类型大于源类型 例如: ...
- vue常见知识点整理
什么是 mvvm? MVVM 是 Model-View-ViewModel 的缩写.mvvm 是一种设计思想.Model 层代表数据模型,也可以在 Model 中定义数据修改和操作的业务逻辑:View ...
- .net core 2.2 部署CentOS7(2)给虚拟机安装CentOS7
目录: .net core 2.2 部署CentOS7(1)安装虚拟机 .net core 2.2 部署CentOS7(2)给虚拟机安装CentOS7 .net core 2.2 部署CentOS7( ...
- EnyimMemcached(64位)使用实例
1.安装:http://www.cnblogs.com/dudu/archive/2009/07/19/1526669.html 2.使用 using Enyim.Caching.Configurat ...
- SpringMVC+MyBatis+MySQL 8小时链接断开
org.springframework.web.util.NestedServletException: Request processing failed; nested exception is ...