高并发高负载系统架构-php篇
首先呢,我罗列一下文章的目录,让大家有个整体轮廓的了解!
1、为什么要进行高并发和高负载的研究
2、高并发和高负载的约束条件
3、解决之道——硬件篇
4、解决之道——部署篇
5、解决之道——环境篇
6、解决之道——SiteEngine篇
7、解决之道——测试篇
8、结尾
1、为什么要进行高并发和高负载的研究
1.1、产品发展的需要
1.2、公司发展的需要
1.3、当前形式决定的
2、高并发和高负载的约束条件
2.1、硬件
2.2、部署
2.3、操作系统
2.4、Web 服务器
2.5、PHP
2.6、MySQL
2.7、测试
3、解决之道——硬件篇
处理能力的提升:部署多颗CPU,选择多核心、具备更高运算频率、更大高速缓存的CPU;
处理能力的提升最直接的反应在于Web请求的处理效率和PHP程序的执行效率。
内存带宽与容量:更大的内存带宽和容量;
内存带宽与容量的提升最直接的反应在于应对数据库大量的数据交换。
磁盘搜索与I/O能力:选择更高的转速、更大的硬盘缓存、组件磁盘阵列(RAID);
磁盘搜索与I/O能力的提升最直接反应在于数据库大量的查询和读写以及文件的读写。
网络带宽的提升可考虑的因素包括: 更大带宽、多线路接入、独享带宽;
服务器在大负载的情况下,对网络带宽的占用是十分可观的。
策略:硬件设施是应对大负载的基础,硬件设施的投入可根据实际压力和预算量力而行。
4、解决之道——部署篇
4.1、服务器分离
4.2、数据库集群和库表散列
4.3、镜像
4.4、负载均衡
分类: 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效率的同时,极大增强了数据安全性。
5、解决之道——环境篇
5.1、操作系统
操作系统的选择,关注点在于
策略:我们选择FreeBSD,而且是最小化安装以后的FreeBSD。
5.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服务器。
5.3、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的主从结构。
5.4、PHP
1、加载尽可能少的模块;
2、如果是在windows平台下,尽可能使用IIS或者Nginx来替代我们平常用的Apache;
3、安装加速器(都是通过缓存php代码预编译的结果和数据库结果来提高php代码的执行速度)
eAccelerator
eAccelerator是一个自由开放源码php加速器,优化和动态内容缓存,提高了性能php脚本的缓存性能,使得PHP脚本在编译的状态下,对服务器的开销几乎完全消除。
Apc
Alternative PHP Cache(APC)是 PHP 的一个免费公开的优化代码缓存。它用来提供免费,公开并且强健的架构来缓存和优化 PHP 的中间代码。
memcache
memcache是由Danga Interactive开发的,高性能的,分布式的内存对象缓存系统,用于在动态应用中减少数据库负载,提升访问速度。主要机制是通过在内存里维护一个统一的巨大的hash表,Memcache能够用来存储各种格式的数据,包括图像、视频、文件以及数据库检索的结果等
Xcache
国人开发的缓存器,
策略: 为PHP安装加速器。
5.5、代理服务器(缓存服务器)
Squid Cache(简称为Squid)是一个流行的自由软件(GNU通用公共许可证)的代理服务器和Web缓存服务器。Squid有广泛的用途,从作为网页服务器的前置cache服务器缓存相关请求来提高Web服务器的速度,到为一组人共享网络资源而缓存万维网,域名系统和其他网络搜索,到通过过滤流量帮助网络安全,到局域网通过代理上网。Squid主要设计用于在Unix一类系统运行。
策略:安装Squid 反向代理服务器,能够大幅度提高服务器效率。
6、解决之道——SiteEngine篇
7、解决之道——测试篇
7.1、测试方法
7.2、测试用例
7.3、压力测试
压力测试是一种基本的质量保证行为,它是每个重要软件测试工作的一部分。压力测试的基本思路很简单:不是在常规条件下运行手动或自动测试,而是在计算机数量较少或系统资源匮乏的条件下运行测试。通常要进行压力测试的资源包括内部内存、CPU 可用性、磁盘空间和网络带宽等。一般用并发来做压力测试。
压力测试工具:webbench,ApacheBench等
7.4、漏洞测试
在我们的系统中漏洞主要包括:sql注入漏洞,xss跨站脚本攻击等。安全方面还包括系统软件,如操作系统漏洞,mysql、apache等的漏洞,一般可以通过升级来解决。
漏洞测试工具:Acunetix Web Vulnerability Scanner
高并发高负载系统架构-php篇的更多相关文章
- JAVA构建高并发商城秒杀系统——架构分析
面试场景 我们打算组织一个并发一万人的秒杀活动,1元秒杀100个二手元牙刷,你给我说说解决方案. 秒杀/抢购业务场景 商品秒杀.商品抢购.群红包.抢优惠劵.抽奖....... 秒杀/抢购业务特点 秒杀 ...
- PHP高并发高负载系统架构
PHP高并发高负载系统架构 1.为什么要进行高并发和高负载的研究 1.1.产品发展的需要 1.2.公司发展的需要 1.3.当前形式决定的 2.高并发和高负载的约束条件 2.1.硬件 2.2.部署 2. ...
- java处理高并发高负载类网站的优化方法
java处理高并发高负载类网站中数据库的设计方法(java教程,java处理大量数据,java高负载数据) 一:高并发高负载类网站关注点之数据库 没错,首先是数据库,这是大多数应用所面临的首个SPOF ...
- [转]java处理高并发高负载类网站的优化方法
本文转自:http://www.cnblogs.com/pengyongjun/p/3406210.html java处理高并发高负载类网站中数据库的设计方法(java教程,java处理大量数据,ja ...
- 高并发&高可用系统的常见应对策略 秒杀等-(阿里)
对于一个需要处理高并发的系统而言,可以从多个层面去解决这个问题. 1.数据库系统:数据库系统可以采取集群策略以保证某台数据库服务器的宕机不会影响整个系统,并且通过负载均衡策略来降低每一台数据库服务器的 ...
- 高并发解决方案--负载均衡(HTTP,DNS,反向代理服务器)(解决大流量,高并发)
高并发解决方案--负载均衡(HTTP,DNS,反向代理服务器)(解决大流量,高并发) 一.总结 1.什么是负载均衡:当一台服务器的性能达到极限时,我们可以使用服务器集群来提高网站的整体性能.那么,在服 ...
- 高并发高可、O2O、微服务架构用学习网站
高并发高可.O2O.微服务架构用学习网站 https://www.itkc8.com 非常感谢http://www.cnblogs.com/skyblog/p/5044486.html 关于架构,笔者 ...
- Java生鲜电商平台-高并发的设计与架构
Java生鲜电商平台-高并发的设计与架构 说明:源码下载Java开源生鲜电商平台以及高并发的设计与架构文档 对于高并发的场景来说,比如电商类,o2o,门户,等等互联网类的项目,缓存技术是Java项目中 ...
- Java 18套JAVA企业级大型项目实战分布式架构高并发高可用微服务电商项目实战架构
Java 开发环境:idea https://www.jianshu.com/p/7a824fea1ce7 从无到有构建大型电商微服务架构三个阶段SpringBoot+SpringCloud+Solr ...
随机推荐
- 自动化测试-1.selenium简介
1. selenium一个自动化测试工具,适用于测试web系统2. selenium支持多种编程语言:python .java .c#.ruby3.selenium支持多浏览器,selenium脚本可 ...
- 自动化测试-18.selenium之bugFree代码注释
#encoding=utf-8 import xlrd,time,os from xlutils.copy import copy from selenium import webdriver def ...
- es6学习日记4
数组的扩展 扩展运算符是三个点(...).它好比 rest 参数的逆运算,将一个数组转为用逗号分隔的参数序列. console.log(...[1, 2, 3]) // 1 2 3 console.l ...
- export 和import使用
在JavaScript ES6中,export与export default均可用于导出常量.函数.文件.模块等,你可以在其它文件或模块中通过import+(常量 | 函数 | 文件 | 模块)名的方 ...
- C++ 值传递、指针传递、引用传递详解
C++ 值传递.指针传递.引用传递详解 最近写了几篇深层次讨论数组和指针的文章,其中提到了“C语言中,所有非数组的形式参数传递均以值传递形式” 数组和指针背后——内存角度 语义"陷阱&quo ...
- oracle database 11g 如何正确卸载
如在使用过程中,遇到oracle database 的疑难问题,需要重装的时候,就需要我们先将老的oracle 做完全的卸载删除,这样才能安装新的oracle database. 下面看一下具体的卸载 ...
- $\mathcal{OI}$生涯中的各种数论算法的证明
嗯,写这个是因为我太弱了\(ORZ\). #\(\mathcal{\color{silver}{1 \ \ Linear \ \ Sieve \ \ Method \ \ of \ \ Prime}} ...
- PythonStudy——函数的使用 Use of functions
# print(a) # a = 10 # 注意:函数必须先定义,后使用 # print(get_water) def get_water(water, money): print('收入你的%d元钱 ...
- find查找文件的时间问题
很多细节方面的东西没有到真正用的时候,是觉察不出来的,因为这个时间的问题出了问题,现在好好理一下,这个find的时间很容易就搞混了,一段时间不用,也忘了,也反映出来了自己的基础知识不是很牢固啊 f ...
- python制作模块
自己写的函数,为了下一次方便用,做成模块 主要有这几个步骤: 1:准备发布 2:构建发布 3:导入模块并使用 1:准备发布 首先,我自己写的一个打印出列表(含嵌套列表),打印出列表中的每个数据项,文件 ...