1、高并发和高负载的约束条件php
硬件前端
部署mysql
操做系统web
Web 服务器ajax
PHPsql
MySQL数据库
测试apache
2、解决之道——硬件篇后端
处理能力的提高:部署多颗CPU,选择多核心、具有更高运算频率、更大高速缓存的CPU;缓存
处理能力的提高最直接的反应在于Web请求的处理效率和PHP程序的执行效率。
内存带宽与容量:更大的内存带宽和容量;
内存带宽与容量的提高最直接的反应在于应对数据库大量的数据交换。
磁盘搜索与I/O能力:选择更高的转速、更大的硬盘缓存、组件磁盘阵列(RAID);
磁盘搜索与I/O能力的提高最直接反应在于数据库大量的查询和读写以及文件的读写。
网络带宽的提高可考虑的因素包括: 更大带宽、多线路接入、独享带宽;
服务器在大负载的状况下,对网络带宽的占用是十分可观的。
策略:硬件设施是应对大负载的基础,硬件设施的投入可根据实际压力和预算量力而行。
3、解决之道——部署篇
3.一、服务器分离
3二、数据库集群和库表散列
3.三、镜像
3.四、负载均衡
分类:
1)、DNS轮循
2)代理服务器负载均衡
3)地址转换网关负载均衡
4)NAT负载均衡
5)反向代理负载均衡
6)混合型负载均衡
策略:根据硬件投入和业务需求,选择合理的部署方案。
部署方案1:
适用范围:静态内容为主体的网站和应用系统;对系统安全要求较高的网站和应用系统。
Main Server:主服务器
承载程序的主体运行压力,处理网站或应用系统中的动态请求;
将静态页面推送至多个发布服务器;
将附件文件推送至文件服务器;
安全要求较高,以静态为主的网站,可将服务器置于内网屏蔽外网的访问。
DB Server:数据库服务器
承载数据库读写压力;
只与主服务器进行数据量交换,屏蔽外网访问。
File/Video Server:文件/视频服务器
承载系统中占用系统资源和带宽资源较大的数据流;
做为大附件的存储和读写仓库;
做为视频服务器将具有视频自动处理能力。
发布服务器组:
只负责静态页面的发布,承载绝大多数的Web请求;
经过Nginx进行负载均衡部署。
部署方案2:
适用范围:以动态交互内容为主体的网站或应用系统;负载压力较大,且预算比较充足的网站或应用系统;
Web服务器组:
Web服务无主从关系,属平行冗余设计;
经过前端负载均衡设备或Nginx反向代理实现负载均衡;
划分专用文件服务器/视频服务器有效分离轻/重总线;
每台Web服务器可经过DEC可实现链接全部数据库,同时划分主从。
数据库服务器组:
相对均衡的承载数据库读写压力;
经过数据库物理文件的映射实现多数据库的数据同步。
共享磁盘/磁盘阵列
将用于数据物理文件的统一读写
用于大型附件的存储仓库
经过自身物理磁盘的均衡和冗余,确保总体系统的IO效率和数据安全;
方案特性:
经过前端负载均衡,合理分配Web压力;
经过文件/视频服务器与常规Web服务器的分离,合理分配轻重数据流;
经过数据库服务器组,合理分配数据库IO压力;
每台Web服务器一般只链接一台数据库服务器,经过DEC的心跳检测,可在极短期内自动切换至冗余数据库服务器;
磁盘阵列的引入,大幅提高系统IO效率的同时,极大加强了数据安全性。
4、解决之道——环境篇
41、操做系统
操做系统的选择,关注点在于
•是否适应于搭建SiteEngine所须要的环境程序?
•系统自己占用的资源比;
•系统安全性;
•系统是否易于操做?
策略:咱们选择FreeBSD,并且是最小化安装之后的FreeBSD。
4.2、Web服务器
Web服务器很大一部分资源占用来自于处理Web请求,一般状况下这也就是Apache产生的压力,Apache是世界使用排名第一的Web服务器软件。它能够运行在几乎全部普遍使用的计算机平台上。
在高并发链接的状况下,Nginx是Apache服务器不错的替代品。Nginx (“engine x”) 是俄罗斯人编写的一款高性能的 HTTP 和反向代理服务器。在国内,已经有新浪、搜狐通行证、网易新闻、网易博客、金山逍遥网、金山爱词霸、校内网、YUPOO相册、豆瓣、迅雷看看等多家网站、 频道使用 Nginx 服务器。
Nginx的优点:
高并发链接:官方测试可以支撑5万并发链接,在实际生产环境中跑到2~3万并发链接数。
内存消耗少:在3万并发链接下,开启的10个Nginx 进程才消耗150M内存(15M*10=150M)。
内置的健康检查功能:若是 Nginx Proxy 后端的某台 Web 服务器宕机了,不会影响前端访问。
策略:相对于老牌的Apache,咱们选择Lighttpd和Nginx这些具备更小的资源占用率和更高的负载能力的web服务器。
4.三、Mysql
MySQL自己具有了很强的负载能力,MySQL优化是一项很复杂的工做,由于这最终须要对系统优化的很好理解。数据库工做就是大量的、短时的查询 和读写,除了程序开发时须要注意创建索引、提升查询效率等软件开发技巧以外,从硬件设施的角度影响MySQL执行效率最主要来自于磁盘搜索、磁盘IO水 平、CPU周期、内存带宽。
根据服务器上的硬件和软件条件进行MySQl优化。MySQL优化的核心在于系统资源的分配,这不等于无限制的给MySQL分配更多的资源。
在MySQL配置文件中最值得关注的参数:
l 改变索引缓冲区长度(key_buffer)
l 改变表长(read_buffer_size)
l 设定打开表的数目的最大值(table_cache)
l 对缓长查询设定一个时间限制(long_query_time)
若是条件容许 ,通常MySQL服务器安装在Linux操做系统中,而不是安装在FreeBSD中。
策略: MySQL优化须要根据业务系统的数据库读写特性和服务器硬件配置,制定不一样的优化方案,而且能够根据须要部署MySQL的主从结构。
4.4、PHP
一、加载尽量少的模块;
二、安装加速器(都是经过缓存php代码预编译的结果和数据库结果来提升php代码的执行速度)
eAccelerator
eAccelerator是一个自由开放源码php加速器,优化和动态内容缓存,提升了性能php脚本的缓存性能,使得PHP脚本在编译的状态下,对服务器的开销几乎彻底消除。
Apc
Alternative PHP Cache(APC)是 PHP 的一个免费公开的优化代码缓存。它用来提供免费,公开而且强健的架构来缓存和优化 PHP 的中间代码。
memcache
memcache是由Danga Interactive开发的,高性能的,分布式的内存对象缓存系统,用于在动态应用中减小数据库负载,提高访问速度。主要机制是经过在内存里维护一个统 一的巨大的hash表,Memcache可以用来存储各类格式的数据,包括图像、视频、文件以及数据库检索的结果等
策略: 为PHP安装加速器。
4.5、代理服务器(缓存服务器)
Squid Cache(简称为Squid)是一个流行的自由软件(GNU通用公共许可证)的代理服务器和Web缓存服务器。Squid有普遍的用途,从做为网页服务 器的前置cache服务器缓存相关请求来提升Web服务器的速度,到为一组人共享网络资源而缓存万维网,域名系统和其余网络搜索,到经过过滤流量帮助网络 安全,到局域网经过代理上网。Squid主要设计用于在Unix一类系统运行。
策略:安装Squid 反向代理服务器,可以大幅度提升服务器效率。
5、解决之道——SiteEngine篇
SiteEngine(网站引擎)是指针对应用系统程序的架构设计的一套程序化语言框架。目前最主流的是基于多层架构,分级处理,模块化设计的框架,支持mvc动态页面展现,核心程序分层处理,增长静态化引擎,借助ajax 异步高效处理请求。
6、解决之道——测试篇
6.一、测试方法
6.二、测试用例
6.三、压力测试
压力测试是一种基本的质量保证行为,它是每一个重要软件测试工做的一部分。压力测试的基本思路很简单:不是在常规条件下运行手动或自动测试,而是在计 算机数量较少或系统资源匮乏的条件下运行测试。一般要进行压力测试的资源包括内部内存、CPU 可用性、磁盘空间和网络带宽等。通常用并发来作压力测试。
压力测试工具:webbench,ApacheBench等
6.四、漏洞测试
在咱们的系统中漏洞主要包括:sql注入漏洞,xss跨站脚本攻击等。安全方面还包括系统软件,如操做系统漏洞,mysql、apache等的漏洞,通常能够经过升级来解决。