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