摘要:目前的業(yè)務訪問量數(shù)千萬,后端臺,平均使用率。產(chǎn)生的問題長連接數(shù)超過時,性能會下降。很可惜,我們目前使用的青云,目前尚不能實現(xiàn)超高可用,也不能實現(xiàn)無縫擴容,私網(wǎng)內(nèi)的網(wǎng)絡傳輸性能延遲都有很大優(yōu)化空間。經(jīng)測試,性能有的提升。
需求分析
目前的業(yè)務全站使用ThinkPHP 3.2.3,前臺、后臺、Cli、Api等。目前的業(yè)務API訪問量數(shù)千萬,后端7臺PHP 5.6,平均CPU使用率20%。
測試數(shù)據(jù)真實業(yè)務
php5.6:500 QPS
php7.0:850 QPS
真實業(yè)務中減少一次Mysql查詢業(yè)務或者減少一次Redis讀寫
php5.6:800 QPS
php7.0:1250 QPS
目前優(yōu)化的結果:
ThinkPHP可以完整的跑在緩存中;
在不需要mysql查詢時,不建立mysql連接;
不讀寫redis時,不建立redis連接。
優(yōu)化過程 0x00以上數(shù)據(jù)在開發(fā)機器使用ab獲取,同時也跟其它的框架做了簡單對比,性能不低于其它框架。
使用zend debugger profile 可以看到框架層的時間開銷占比約24%,相對于yaf這樣的C語言框架10%的性能損失,一個包含緩存和ORM的框架已經(jīng)算比較好的性能了。
再次吐槽一提ThinkPHP框架就噴性能不好的人,任何一個框架拿過來多做幾次數(shù)據(jù)庫操作,測試性能都渣得不逼,只測試輸出一個HelloWorld并什么卵用。
在項目中早期,開發(fā)壓力大,沒有什么時間進行項目和架構優(yōu)化。
經(jīng)過測試,通過添加 mysql 長連接和redis長連接,api穩(wěn)定性得到非常大提升,業(yè)務最慢響應時間從4s優(yōu)化到0.5s,曲線非常平穩(wěn)。
PHP-FPM單機200進程,2000Request,7臺PHP后端,長連接數(shù)穩(wěn)定在1700左右。
產(chǎn)生的問題
長連接數(shù)超過5k時,性能會下降。出現(xiàn)過兩次Mysql Server 內(nèi)存用光的情況。
經(jīng)過分析,發(fā)現(xiàn)很多API請求,是不需要建立Mysql連接的。調(diào)整代碼,Mysql的查詢邏輯盡量緩存到Redis里,減少對Mysql的壓力。
同時對ThinkPHP的代碼邏輯進行化,調(diào)用 Model 中的方法、屬性,不建立Mysql連接,只有在讀寫db時才建立連接。減少了非常多的資源開銷。
經(jīng)過上述調(diào)整,Mysql的連接從1700下降到100以內(nèi),query and read QPS從5k下降到50。
優(yōu)化的ThinkPHP的代碼已推送到Github:
https://github.com/vus520/thi...
后續(xù)是對ThinkPHP中Mysql主從、讀寫分離進行深度測試,增加Mysql的讀能力。
0x03當業(yè)務都嚴重依賴redis時,Redis的QPS一度飆升到7k,內(nèi)存占用6G左右。
為了緩解redis的讀壓力,生產(chǎn)中使用了4臺Redis Standalone做了1主3從架構。
并給ThinkPHP添加Redis讀寫分離的支持,減少Redis的壓力。
https://github.com/vus520/thi...
目前存在的問題
Redis的高可用運維,本身也比較復雜,遇上網(wǎng)絡抖動等原因,Redis會出現(xiàn)同步失敗和延遲問題。
特別是在云服務器架構的環(huán)境中,網(wǎng)絡瓶頸和延遲問題對分布式應用有非常大的影響。
很可惜,我們目前使用的青云,目前尚不能實現(xiàn)Redis超高可用,也不能實現(xiàn)無縫擴容,私網(wǎng)內(nèi)的網(wǎng)絡傳輸性能、延遲都有很大優(yōu)化空間。
后續(xù)的優(yōu)化計劃
對redis業(yè)務進行清理,減少不必要的請求;
壓縮內(nèi)容;
key:value => hash;
一主多從,每個php后端部署一個redis從,優(yōu)先讀本機,減少網(wǎng)絡延遲;
API項目中,禁用ThinkPHP的Session、路由、視圖、行為等,進行精簡加速。
經(jīng)測試,性能有30%的提升。
https://github.com/vus520/thi...
1,去掉路由
2,去掉URL調(diào)度
3,去掉行為、Hook
4,去掉視圖
5,去掉控制器的反射、空操作
6,去掉Session,可實現(xiàn)無狀態(tài)的Api
0x05在PHP7中進行深度測試,升級到PHP7,ThinkPHP 3.2的性能會有50+%的提升
0x06http://www.4wei.cn/archives/1...
0x07php7.1版本發(fā)布以后,phpredis存儲壓縮數(shù)據(jù)的bug解決掉了,目前線上生產(chǎn)中的節(jié)點,升級到php7以后,CPU和內(nèi)存都有接近50%的下降,機器可以縮減一半,成本也降低不少。
文章版權歸作者所有,未經(jīng)允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉載請注明本文地址:http://systransis.cn/yun/21707.html
摘要:杰出的數(shù)據(jù)庫遷移工具和緊密集成的單元測試支持,這些工具賦予你構建任何應用的能力。淺談應公司要求,現(xiàn)在用重新搭一個框架,接觸了幾天對它也有了一定的了解。淺談支持,支持單元測試。更加嚴謹了,異常嚴謹?shù)腻e誤檢測和安全機制。 自從接觸php開始,用的就是thinkphp框架,它給我的感覺是輕量,且容易上手。后來進了一家外包公司又用了laravel框架,個人覺得laravel還是很高大上的,功能...
摘要:數(shù)據(jù)庫文件已經(jīng)上傳,安裝配置就可以使用簡稱即基于的后臺管理系統(tǒng)官方文檔地址在線體驗地址賬戶密碼線上倉庫在線地址源代碼下載克隆直接下載本地部署運行環(huán)境要求建議配置虛擬域名若不清楚,請自行解決之,方便接下來開展你的開發(fā)工作。 喜歡就Star,不只是Fork; 想要分享的動機才是驅動力,而技術僅僅是一種方法。 數(shù)據(jù)庫文件已經(jīng)上傳,安裝配置就可以使用 showImg(https://seg...
摘要:數(shù)據(jù)庫文件已經(jīng)上傳,安裝配置就可以使用簡稱即基于的后臺管理系統(tǒng)官方文檔地址在線體驗地址賬戶密碼線上倉庫在線地址源代碼下載克隆直接下載本地部署運行環(huán)境要求建議配置虛擬域名若不清楚,請自行解決之,方便接下來開展你的開發(fā)工作。 喜歡就Star,不只是Fork; 想要分享的動機才是驅動力,而技術僅僅是一種方法。 數(shù)據(jù)庫文件已經(jīng)上傳,安裝配置就可以使用 showImg(https://seg...
閱讀 2774·2021-09-24 10:34
閱讀 1876·2021-09-22 10:02
閱讀 2265·2021-09-09 09:33
閱讀 1468·2021-08-13 15:02
閱讀 3279·2020-12-03 17:10
閱讀 1193·2019-08-30 15:44
閱讀 2156·2019-08-30 12:58
閱讀 3237·2019-08-26 13:40