资讯专栏INFORMATION COLUMN

PHP 开发中的外围资源性能分析(二)

cod7ce / 3230人阅读

摘要:本文作为针对外围资源性的能分析,比较简单地设计了一些实验场景,看到了外部资源,包括中间件和数据库资源给程序性能带来的影响。有关影响程序性能的后端外围资源就到这里,在下一篇中,我们将分析前端或者前后端结合给页面延时带来的影响。

暂且不讨论「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 应用内部完成应用性能管理和监控,包括代码级别性能问题的可见性、性能瓶颈的快速识别与追溯、真实用户体验监控、服务器监控和端到端的应用性能管理。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/21170.html

相关文章

  • PHP 开发中的外围资源性能分析(一)

    摘要:而是说,程序的外部资源,往往是影响性能的重要因素,尤其是当外部资源的连接和数据获取本身速度达不到理想的结果时。 暂且不讨论「PHP 是不是最好的编程语言」,本文我们将分别分析一下在 PHP 程序的后端外围资源和前端外围资源,它们对整个 PHP Web 应用体验的影响,这往往比语言本身大得多。 首先,后端外围资源,是指跟 PHP 运行过程中与语言本身无关的网络与 IO 操作、存储服务、中...

    anquan 评论0 收藏0
  • PHP底层工作原理

    摘要:因此,我们需要性能优异的引擎合适的车轮正确的跑道三架构从下往上四层属于操作系统的底层服务器,属于次服务器,沟通和属于服务端编程语言,通过模块和关联和其他服务属于应用服务,通过的外挂模块和关联参考文档底层工作原理 一、简介 PHP总共有三个模块:内核、Zend引擎、以及扩展层 PHP内核用来处理请求、文件流、错误处理等相关操作 Zend引擎(ZE)用以将源文件转换成机器语言,然后在虚拟...

    mumumu 评论0 收藏0
  • Spring事务传播行为详解

    摘要:前言在接口中规定了种类型的事务传播行为。事务传播行为是框架独有的事务增强特性,他不属于的事务实际提供方数据库行为。本文对七种事务传播行为做详细介绍,内容主要代码示例的方式呈现。 前言 Spring在TransactionDefinition接口中规定了7种类型的事务传播行为。事务传播行为是Spring框架独有的事务增强特性,他不属于的事务实际提供方数据库行为。这是Spring为我们提供...

    cpupro 评论0 收藏0
  • 举个栗子看如何做MySQL 内核深度优化

    摘要:本文将为大家介绍腾讯云团队是如何对进行内核级优化的思路和经验。在腾讯云,因为用户数的不断增加,对提出越来越高的要求,腾讯云团队针对用户的需求和业界发展的技术趋势,对分支进行深度的定制优化。 本文由云+社区发表作者介绍:简怀兵,腾讯云数据库高级工程师,负责腾讯云CDB内核及基础设施建设;先后供职于Thomson Reuters和YY等公司,PTimeDB作者,曾获一项发明专利;从事MyS...

    BlackFlagBin 评论0 收藏0
  • 举个栗子看如何做MySQL 内核深度优化

    摘要:本文将为大家介绍腾讯云团队是如何对进行内核级优化的思路和经验。在腾讯云,因为用户数的不断增加,对提出越来越高的要求,腾讯云团队针对用户的需求和业界发展的技术趋势,对分支进行深度的定制优化。 本文由云+社区发表作者介绍:简怀兵,腾讯云数据库高级工程师,负责腾讯云CDB内核及基础设施建设;先后供职于Thomson Reuters和YY等公司,PTimeDB作者,曾获一项发明专利;从事MyS...

    zhaochunqi 评论0 收藏0

发表评论

0条评论

cod7ce

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<