PHP 開發中的外圍資源性能分析(二)

上一篇中咱們分析了後端外圍資源中 IO 操做和中間件服務對整個 PHP Web 應用體驗的影響。今天咱們分析數據庫給整個應用性能帶來的影響。php

##數據庫html

首先直觀地看兩張圖,一張是來自 OneAPM 後臺的 Web 事務吞吐量圖,也就是每分鐘有多少次 Web 事務被觸發、多少次數據庫事務被觸發,如圖所示。 Web事務吞吐量圖前端

數據庫吞吐量圖

如上能夠看到,Web 事務,每分鐘在 150-200 次上下浮動,而相應的數據操做,也達到了相應的量。數據庫

數據庫吞吐量

以上是從直觀的感覺看到數據庫的請求總量,與總請求量的一個比重,能夠看到數據庫的使用是很是重的。而衆所周知,這種平均的分析思路是不對的。由於在計算流量高峯時,咱們可能只計算 30% 的時間爲高峯時間,同時,也只關注 20% 的主要請求的性能問題。因此,從具體的某個頁面來看,一個普通的 Web 應用頁面,數據庫使用在其中的佔比。後端

XHProf頁面性能分析報表

從以上 XHProf 報表能夠看出,這一個頁面,總共數據庫請求達 89 次,耗費了頁面總時間的 44.5%,這仍是一個正常的頁面和正常的請求,如此之多的請求次數,能夠很容易地想到,若是遠程數據庫慢一點,網絡卡一點,每一個請求所耗費的平均時間達到3-5ms,則總體頁面速度就會從 208ms 延時向 500ms 逼近。緩存

##總結服務器

PHP 語言自己的優化雖然顯著,可是這始終是可控的,而性能的瓶頸,每每出如今不可控的外部資源之上。好比每一年一度的 12306 崩潰,也不是語言自己的性能致使的崩潰,而是外部資源的不足和架構問題致使的問題。固然,咱們也不可否認,語言與語言之間的巨大差異爲資源帶來的節省,好比滴滴出行的後臺服務,就正在由 PHP向 Go 切換中,就是 PHP 自己的資源消耗是 Go 的數倍。網絡

本文做爲針對 PHP 外圍資源性的能分析,比較簡單地設計了一些實驗場景,看到了外部資源,包括 IO、中間件和數據庫資源給程序性能帶來的影響。這些場景的瓶頸又如何消除和優化呢?這實際上是一個很大的課題,本文再也不細緻地深刻討論,可是也向你們介紹外部資源優化總的原則。下圖是筆者所欣賞的一張圖,很是形象且很是全面精要地歸納了數據庫優化的法則,這些法則對於其餘外部資源的優化也一樣適用,如圖所示。架構

數據庫訪問優化漏斗法則(一樣適用於其餘外部資源)

這張圖能夠看出幾點:性能

一、對於外部資源的使用,最大的優化就是減小資源的使用。也就業務邏輯的優化和緩存,這二者帶來的性能提高每每是數量級級別的提高 二、而全部的優化都是一個綜合的工程,不會是從某個單點下手而一勞永逸。上圖中,分別考慮到對磁盤、網絡、CPU 和內存等各方面的優化下手。 三、增長資源,也就是增長硬件配置是優化的最末方案。在可能的狀況下,儘量地使用軟件優化,帶來的性能提高,相比硬件帶來的提高,既廉價又高效。

有關影響 PHP 程序性能的後端外圍資源就到這裏,在下一篇中,咱們將分析前端或者先後端結合給頁面延時帶來的影響。

OneAPM for PHP 可以深刻到全部 PHP 應用內部完成應用性能管理 可以深刻到全部 PHP 應用內部完成應用性能管理和監控,包括代碼級別性能問題的可見性、性能瓶頸的快速識別與追溯、真實用戶體驗監控、服務器監控和端到端的應用性能管理。

相關文章
相關標籤/搜索