2019独角兽企业重金招聘Python工程师标准>>>

一、高并发和高负载的约束条件

  1. 硬件

  2. 部署

  3. 操作系统

  4. Web 服务器

  5. PHP

  6. MySQL

  7. 测试

二、解决之道——硬件篇

处理能力的提升:部署多颗CPU,选择多核心、具备更高运算频率、更大高速缓存的CPU;

处理能力的提升最直接的反应在于Web请求的处理效率和PHP程序的执行效率。

内存带宽与容量:更大的内存带宽和容量;

内存带宽与容量的提升最直接的反应在于应对数据库大量的数据交换。

磁盘搜索与I/O能力:选择更高的转速、更大的硬盘缓存、组件磁盘阵列(RAID);

磁盘搜索与I/O能力的提升最直接反应在于数据库大量的查询和读写以及文件的读写。

网络带宽的提升可考虑的因素包括: 更大带宽、多线路接入、独享带宽;

服务器在大负载的情况下,对网络带宽的占用是十分可观的。

策略:硬件设施是应对大负载的基础,硬件设施的投入可根据实际压力和预算量力而行。

三、解决之道——部署篇

3.1、服务器分离

32、数据库集群和库表散列

3.3、镜像

3.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效率的同时,极大增强了数据安全性。

四、解决之道——环境篇

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.3、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

1、加载尽可能少的模块;

2、安装加速器(都是通过缓存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.1、测试方法

6.2、测试用例

6.3、压力测试

压力测试是一种基本的质量保证行为,它是每个重要软件测试工作的一部分。压力测试的基本思路很简单:不是在常规条件下运行手动或自动测试,而是在计 算机数量较少或系统资源匮乏的条件下运行测试。通常要进行压力测试的资源包括内部内存、CPU 可用性、磁盘空间和网络带宽等。一般用并发来做压力测试。

压力测试工具:webbench,ApacheBench等

6.4、漏洞测试

在我们的系统中漏洞主要包括:sql注入漏洞,xss跨站脚本攻击等。安全方面还包括系统软件,如操作系统漏洞,mysql、apache等的漏洞,一般可以通过升级来解决。

转载于:https://my.oschina.net/angelangel/blog/338456

PHP高并发高负载系统架构相关推荐

  1. 每秒处理10万高并发订单支付系统架构

    一.库分表 在redis,memcached等缓存系统盛行的互联网时代,构建一个支撑每秒十万只读的系统并不复杂,无非是通过一致性哈希扩展缓存节点,水平扩展web服务器等.支付系统要处理每秒十万笔订单, ...

  2. 【高并发】秒杀系统架构解密,不是所有的秒杀都是秒杀(升级版)!!

    写在前面 很多小伙伴反馈说,高并发专题学了那么久,但是,在真正做项目时,仍然不知道如何下手处理高并发业务场景!甚至很多小伙伴仍然停留在只是简单的提供接口(CRUD)阶段,不知道学习的并发知识如何运用到 ...

  3. 程序员修神之路--高并发系统设计负载均衡架构

    点击上方"蓝字"关注,酷爽一夏 菜菜哥,上次你给我讲的分库分表策略对我帮助很大 有帮助就好,上次请我的咖啡也很好喝~ 呵呵,不过随着访问量的不断加大,网站我又加了nginx做负载均 ...

  4. 从宜人贷系统架构看互联网高并发对金融系统架构的挑战

    一.简介 随着互联网金融的持续火热,越来越多的银行纷纷发布了各自的互联网金融产品.但是互联网产品"高并发.大数据量"的特点却对于银行传统的核心系统架构带来了新的挑战. 1.互联网的 ...

  5. 谈谈高并发秒拍系统架构设计

    缓冲系统结构 今天谈谈电商秒杀抢购或者高并发集中访问情况下,如何设计稳定高效的缓冲系统.常用的做法是采取逻辑分离,将秒杀功能分化为不同的逻辑进行设计,降低耦合度同时增加缓冲队列降低访问压力. 可以将秒 ...

  6. 高并发 高负载 网站系统架构

    高并发 高负载 网站系统架构 注:我看到这篇文章写的太好了,可以没法转到CSDN上我就COPY了,看到下面激烈的评论,我也一并COPY了.不过还是要谢谢哪位作者了.这样的文章很少. 转自:http:/ ...

  7. 高并发高负载网站系统架构

    我在CERNET做过拨号接入平台的搭建,而后在Yahoo&3721从事过搜索引擎前端开发,又在MOP处理过大型社区猫扑大杂烩的架构升级等工作,同时自己接触和开发过不少大中型网站的模块,因此在大 ...

  8. 大型高并发高负载网站的系统架构

    转载请保留出处:俊麟 Michael's blog (http://www.toplee.com/blog/?p=71) Trackback Url : http://www.toplee.com/b ...

  9. 说说大型高并发高负载网站的系统架构 1

    转载请保留出处:俊麟 Michael's blog (http://www.toplee.com/blog/?p=71) Trackback Url : http://www.toplee.com/b ...

  10. [转载]说说大型高并发高负载网站的系统架构

    转载请保留出处:俊麟 Michael's blog (http://www.toplee.com/blog/?p=71) Trackback Url : http://www.toplee.com/b ...

最新文章

  1. Hinton获2021迪克森科学奖:他改变了AI,改变了世界
  2. asp.net模糊查询存储过程
  3. python意外缩进引发逻辑错误_如何编写 Python 程序
  4. 动手学无人驾驶(3):基于激光雷达3D多目标追踪
  5. Python(13)-函数,lambda语句
  6. Zabbix监控和分布式部署实施方案
  7. python规范模块和包
  8. 133. array_map()
  9. 5. Zend_Log
  10. Ubuntu学习 mkdir
  11. java基础8 构造函数和构造代码块
  12. List集合去重的常见几种方式
  13. 视频处理中各个分辨率/数字电视系统显示格式 的介绍(QCIF,CIF,4CIF,D1,720P,1080I,1080P等)
  14. 挑战性价比,刷新你对千元级投影仪的认知,这份详细评测送给你
  15. roundcube mysql_Roundcube Webmail 安装配置
  16. asus pc server + geforce titan xp + centos 7
  17. 自学Python笔记-第十六章>制作交易收盘价走势图:JSON格式
  18. Hardfault调试方法(调试技术)
  19. 用Facebook做广告和营销,你需要注意哪些问题?
  20. oracle创建本地表空间,本地管理表空间——大家继续讨论!

热门文章

  1. 华为鸿蒙系统是指芯片吗_华为首部鸿蒙手机P50——不再使用麒麟芯片,拍照系统再升级...
  2. 石家庄计算机专接本学校有哪些,河北省内的专接本学校都有哪些?
  3. java中随机数边界问题,java 简单Dice问题(随机数的运用)
  4. 艾默生变频器ev1000故障代码_国产变频器型号大全,梳理国产变频的前世今生!...
  5. 印度孟买机器人餐厅_2020,送餐机器人的海外市场爆发之年
  6. 1116: 删除元素
  7. 《软件需求分析(第二版)》第 4 章——需求分析员的职责 重点部分总结
  8. 数据库管理工具:如何使用 Navicat Premium 转储(导出)和运行(导入)*.sql 文件?
  9. MySQL考试复习(知识点、练习题)
  10. C语言从来都没有过时,你大爷终究是你大爷