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