摘要:如何使用優(yōu)化高并發(fā)場景寫庫或者耗時計算在的接口中使用消息隊列,把要入庫的數(shù)據(jù)寫入的類型中。高容錯子進程異常奔潰時,主進程將重建子進程。高性能多進程運行,充分利用多個并行計算,性能強勁。
經(jīng)常在群里聽到一些朋友問:TP 的項目怎么遷移到 mixphp 來處理高并發(fā),我通常都是回復(fù)需要重寫,可是一個開發(fā)很久的 TP 項目,代碼量巨大,又怎么可能會花大量時間成本來重寫呢?
那么為何我們不嘗試換一種思路來解決問題?
在現(xiàn)有框架不變的情況下,引入 mixphp 來處理高并發(fā)的部分。瓶頸分析
二八效應(yīng)在任何領(lǐng)域都存在,如果你做過多個項目,你就會發(fā)現(xiàn):
一個項目中高并發(fā)的接口或頁面,通常只占到項目的 20% 以下。具體會有哪些場景
一些常見的高并發(fā)場景的問題:
APP 用戶數(shù)據(jù)采集接口:由于是通過接口按秒定時上傳用戶數(shù)據(jù),隨著用戶量的增長,QPS 極高,該類型需求是寫庫動作,無法使用緩存優(yōu)化。
股票行情展示:由于需每秒查詢股票的實時數(shù)據(jù),隨著用戶量的增長,QPS 極高,即便可以使用緩存給數(shù)據(jù)庫減壓,但是頻繁的請求任然使應(yīng)用服務(wù)器不堪重負。
一些常見的大量計算場景的問題:
定時統(tǒng)計:定時統(tǒng)計表中大量的數(shù)據(jù),一個進程計算太慢,多個進程計算又有數(shù)據(jù)不同步的問題。
如何使用 mixphp 優(yōu)化 1. 高并發(fā)場景(寫庫 / 或者耗時計算):在 TP 的接口中使用消息隊列,把要入庫的數(shù)據(jù)寫入 redis 的 list 類型中。
$redis->lpush($key, $data);
然后在 mixphp 中使用多進程服務(wù)來消費這個隊列:
DEMO (V1):https://github.com/mix-php/mi...
mixphp 的多進程服務(wù)有很多傳統(tǒng)框架所不具備的特點:
平滑重啟:當 kill 主進程時,子進程處理完工作再退出,不丟失數(shù)據(jù)。
高容錯:子進程異常奔潰時,主進程將重建子進程。
高性能:多進程運行,充分利用多個CPU并行計算,性能強勁。
使用靈活:工作進程使用生產(chǎn)者消費者模型,生產(chǎn)者/消費者的數(shù)量都可自定義。
2. 高并發(fā)頻繁查詢場景(增加緩存依然達到瓶頸):該種場景瓶頸已經(jīng)不在數(shù)據(jù)庫,因為 HTTP 接口是請求響應(yīng)式,如此頻繁的請求,不斷的建立與關(guān)閉連接消耗了太多的服務(wù)器性能,這時需使用長連接協(xié)議 WebSocket 來優(yōu)化。
使用 mixphp 的 WebSocketd 封裝,能很快就搭建一個數(shù)據(jù)推送系統(tǒng),解決 API 輪詢的性能瓶頸:
DEMO (V1):https://github.com/mix-php/mi...
3. 大量數(shù)據(jù)計算場景:如果從一個數(shù)據(jù)表中取出大量數(shù)據(jù),一個進程計算又太慢了,如果分多個進程分頁去查詢后,再分開計算,速度是快了,但是如果查詢中數(shù)據(jù)有變化,因為每個進程分別會查一次數(shù)據(jù)庫,就會導(dǎo)致有的數(shù)據(jù)遺漏沒有計算到、有的又被多次計算,導(dǎo)致計算結(jié)果錯誤。
這時使用 mixphp 的多進程服務(wù)就不會有這個問題,mixphp 的多進程服務(wù)在進程內(nèi)部做了生產(chǎn)者消費者模型,只需使用一個進程去數(shù)據(jù)表取出數(shù)據(jù),然后一行一行發(fā)送給消費者進程去計算,這樣就高效安全的完成了一次大量計算。
MixPHPGitHub: https://github.com/mixstart/m...
官網(wǎng):http://www.mixphp.cn/
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/30713.html
摘要:消費者開發(fā)本例我們使用的多進程開發(fā)工具來完成這個需求,通常使用常駐進程來處理隊列的消費,所以我們使用的類型,模式。中進程負責執(zhí)行郵件發(fā)送任務(wù)。此時終端將打印成功收到測試郵件官網(wǎng) 注意:這個是 MixPHP V1 的范例 郵件發(fā)送是很常見的需求,由于發(fā)送郵件的操作一般是比較耗時的,所以我們一般采用異步處理來提升用戶體驗,而異步通常我們使用消息隊列來實現(xiàn)。 傳統(tǒng) MVC 框架由于缺少多進程...
摘要:框架最新源代碼行數(shù)行,因此可以很容易的改造它,成為你們公司的專屬框架。也不同于其他基于的微服務(wù)框架,只聚焦于微服務(wù)治理,定位于開發(fā)的更多領(lǐng)域,覆蓋從初創(chuàng)到億元級體量的技術(shù)訴求。的授權(quán)全靠用戶自愿購買,詳情 MixPHP是什么 MixPHP 是秉承 普及 PHP 常駐內(nèi)存型解決方案,促進 PHP 往更后端發(fā)展 的理念而創(chuàng)造,采用 Swoole 擴展作為底層引擎,圍繞常駐內(nèi)存的方式而設(shè)計,...
摘要:由于是基于的傳統(tǒng)框架,如果使用的正常部署方式來對比,顯得有些不公平,由于同時支持在中運行,所以此次測試的是部署在之中。你也來測試一下吧, MixPHP 是一個基于 Swoole 的高性能框架,CodeIgniter 是一個元老級的輕量級框架,Yii 是一個非常流行的框架,以下是三個框架的對比。 由于 Yii/CodeIgniter 是基于 Apache/PHP-FPM 的傳統(tǒng)框架,如果...
摘要:異步隊列消費者開發(fā)只提供了模式下運行控制器方法,并未提供主進程多子進程的進程模型,并未提供多線程處理。多線程異步隊列服務(wù)只需寫好控制器方法,然后在配置文件中配置下路由命名空間進程線程數(shù)量,就可在模式中啟動多進程多線程模型的異步隊列處理程序。 最近業(yè)余時間一直在開發(fā)ExpressPHP的第二個版本 MixPHP,今天下班想起之前一個面試官的問題:你為什么還要再造一個輪子呢?仔細回想,第一...
摘要:注意這個是的范例是一款基于的常駐內(nèi)存型高性能框架,框架的高性能特點非常適合開發(fā)接口,而且非常接近傳統(tǒng)框架,所以開發(fā)接口時非常簡單。下面做一個開發(fā)接口的簡單實例從表,通過獲取一篇文章。第四步使用測試,如下接口開發(fā)與測試完成,是不是很簡單呀。 注意:這個是 MixPHP V1 的范例 MixPHP 是一款基于 Swoole 的常駐內(nèi)存型 PHP 高性能框架,框架的高性能特點非常適合開發(fā) A...
閱讀 3771·2021-09-22 15:49
閱讀 3317·2021-09-08 09:35
閱讀 1430·2019-08-30 15:55
閱讀 2332·2019-08-30 15:44
閱讀 722·2019-08-29 16:59
閱讀 1608·2019-08-29 16:16
閱讀 491·2019-08-28 18:06
閱讀 903·2019-08-27 10:55