PHP 开发中的外围资源性能分析(二)
暂且不讨论「PHP 是不是最好的编程语言」,本文我们将分别分析一下在 PHP 程序的后端外围资源和前端外围资源,它们对整个 PHP Web 应用体验的影响,这往往比语言本身大得多。
上一篇中我们分析了后端外围资源中 IO 操作和中间件服务对整个 PHP Web 应用体验的影响。今天我们分析数据库给整个应用性能带来的影响。
数据库
首先直观地看两张图,一张是来自 OneAPM 后台的 Web 事务吞吐量图,也就是每分钟有多少次 Web 事务被触发、多少次数据库事务被触发,如图所示。


如上可以看到,Web 事务,每分钟在 150-200 次上下浮动,而相应的数据操作,也达到了相应的量。

以上是从直观的感受看到数据库的请求总量,与总请求量的一个比重,可以看到数据库的使用是非常重的。而众所周知,这种平均的分析思路是不对的。因为在计算流量高峰时,我们可能只计算 30% 的时间为高峰时间,同时,也只关注 20% 的主要请求的性能问题。所以,从具体的某个页面来看,一个普通的 Web 应用页面,数据库使用在其中的占比。

从以上 XHProf 报表可以看出,这一个页面,总共数据库请求达 89 次,耗费了页面总时间的 44.5%,这还是一个正常的页面和正常的请求,如此之多的请求次数,可以很容易地想到,如果远程数据库慢一点,网络卡一点,每个请求所耗费的平均时间达到3-5ms,则整体页面速度就会从 208ms 延时向 500ms 逼近。
总结
PHP 语言本身的优化虽然显著,但是这始终是可控的,而性能的瓶颈,往往出现在不可控的外部资源之上。比如每年一度的 12306 崩溃,也不是语言本身的性能导致的崩溃,而是外部资源的不足和架构问题导致的问题。当然,我们也不能否认,语言与语言之间的巨大差别为资源带来的节省,比如滴滴出行的后台服务,就正在由 PHP向 Go 切换中,就是 PHP 本身的资源消耗是 Go 的数倍。
本文作为针对 PHP 外围资源性的能分析,比较简单地设计了一些实验场景,看到了外部资源,包括 IO、中间件和数据库资源给程序性能带来的影响。这些场景的瓶颈又如何消除和优化呢?这其实是一个很大的课题,本文不再细致地深入讨论,但是也向大家介绍外部资源优化总的原则。下图是笔者所欣赏的一张图,非常形象且非常全面精要地概括了数据库优化的法则,这些法则对于其他外部资源的优化也同样适用,如图所示。

这张图可以看出几点:
1、对于外部资源的使用,最大的优化就是减少资源的使用。也就业务逻辑的优化和缓存,这两者带来的性能提升往往是数量级级别的提升
2、而所有的优化都是一个综合的工程,不会是从某个单点下手而一劳永逸。上图中,分别考虑到对磁盘、网络、CPU 和内存等各方面的优化下手。
3、增加资源,也就是增加硬件配置是优化的最末方案。在可能的情况下,尽可能地使用软件优化,带来的性能提升,相比硬件带来的提升,既廉价又高效。
有关影响 PHP 程序性能的后端外围资源就到这里,在下一篇中,我们将分析前端或者前后端结合给页面延时带来的影响。
OneAPM for PHP 能够深入到所有 PHP 应用内部完成应用性能管理 能够深入到所有 PHP 应用内部完成应用性能管理和监控,包括代码级别性能问题的可见性、性能瓶颈的快速识别与追溯、真实用户体验监控、服务器监控和端到端的应用性能管理。
PHP 开发中的外围资源性能分析(二)的更多相关文章
- PHP 开发中的外围资源性能分析(一)
		暂且不讨论「PHP 是不是最好的编程语言」,本文我们将分别分析一下在 PHP 程序的后端外围资源和前端外围资源,它们对整个 PHP Web 应用体验的影响,这往往比语言本身大得多. 首先,后端外围资源 ... 
- Android开发中常见的设计模式(二)——Builder模式
		了解了单例模式,接下来介绍另一个常见的模式--Builder模式. 那么什么是Builder模式呢.通过搜索,会发现大部分网上的定义都是 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建 ... 
- 开发中常用js记录(二)
		(1)获得asp.net控件的value值 document.getElementById('<%=SUKid.ClientID %>').value (2)获得选中值 $('#selec ... 
- 开发中常用的sql语句二
		sql 数字全角半角转换 create FUNCTION dbo.ConvertWordAngle ( ), --要转换的字符串 @flag bit --转换标志,0转换成半角,1转换成全角 )) A ... 
- 安卓开发中使用ZXing生成解析二维码
		编码示例 package com.wolf_pan.qrcodesample; import android.graphics.Bitmap; import android.graphics.Colo ... 
- iOS开发UI篇—iPad开发中得modal介绍
		iOS开发UI篇—iPad开发中得modal介绍 一.简单介绍 说明1: 在iPhone开发中,Modal是一种常见的切换控制器的方式 默认是从屏幕底部往上弹出,直到完全盖住后面的内容为止 说明2: ... 
- 前端开发:面向对象与javascript中的面向对象实现(二)构造函数与原型
		前端开发:面向对象与javascript中的面向对象实现(二)构造函数与原型 前言(题外话): 有人说拖延症是一个绝症,哎呀治不好了.先不说这是一个每个人都多多少少会有的,也不管它究竟对生活有多么大的 ... 
- iOS开发中的4种数据持久化方式【二、数据库 SQLite3、Core Data 的运用】
		在上文,我们介绍了ios开发中的其中2种数据持久化方式:属性列表.归档解档.本节将继续介绍另外2种iOS持久化数据的方法:数据库 SQLite3.Core Data 的运 ... 
- 二、Cocos2dx概念介绍(游戏开发中不同的坐标系,cocos2dx锚点)
		注:ccp是cocos2dx中的一个宏定义,#define ccp(__X__,__Y__)CCPointMake((float)__X__, (float)__Y__),在此文章中表示坐标信息 1. ... 
随机推荐
- 15个web前端的美轮美奂的 jQuery 图片特效
			jQuery是一个非常优秀的 JavaScript 框架,使用简单灵活,同时还有许多成熟的插件可供选择.其中,jQuery 最令人印象深刻的应用之一就是对图片的处理,它可以让帮助你在你的项目中加入各种 ... 
- 配置FTP服务
			配置FTP服务 1.安装FTP服务器(默认已安装) 服 务:vsftpd 位 置:光盘1 软 件:vftpd-2.0.1-5.i386.rpm 配 置:/etc/vsftpd/vsftpd.conf ... 
- mplayer-for-windows change color scheme in win 7
			Q: When I play movie on Windows7, always comes this message: The color scheme has been changed The f ... 
- 【风马一族_Android】适合你 --- 大概的描述
			适合你:专注于解决毕业生,离校所遗留的闲置教材的去向问题的一款APP. 目前的现状:毕业生的闲置教材,被清理宿舍的阿姨.大叔所清理到垃圾场,或拿到收破烂的地方,卖掉. 在毕业季中,存在的闲置物品不只有 ... 
- 《samba服务搭建》RHEL6
			Samba服务不仅可以实现linux和win之间的文件共享,也可以实现linux和linux之间的共享,samba的用户只限服务端本地用户使用. 本文的环境是selinux开启的情况下配置 Samba ... 
- 一款仿PBA官网首页jQuery焦点图的切换特效
			一款仿PBA官网首页jQuery焦点图的切换特效,非常的简单大方, 在对浏览器兼容性的方面做了不少的功夫.IE6也勉强能过去. 还是一款全屏的焦点图切换特效.大气而清新.很适合简介大方的网站. 下图还 ... 
- WPF 类型“System.ComponentModel.ISupportInitialize”在未被引用的程序集中定义。
			问题:类型“System.ComponentModel.ISupportInitialize”在未被引用的程序集中定义.必须添加对程序集“System, Version=4.0.0.0, Cultur ... 
- windows不能在本地计算机启动apache
			今天,配置eclipse PHP studio 3.0的时候更改了apache http server 中的httpd.conf文件: 将DocumentRoot 的路径设错了,为一个不存在目录 .更 ... 
- 让ImageView可以使用gif的方法
			在自己的包中添加MyGifView.java(直接复制,粘贴),读取gif资源在MyGifView中第20行读取: MyGifView.java: package com.zzw.testgifuse ... 
- vs2008中使用Newtonsoft.Json
			异常:找不到方法:“Boolean System.Runtime.Serialization.DataContractAttribute.get_IsReference()” 在使用Newtonsof ... 
