現(xiàn)有的主項(xiàng)目是laravel開發(fā)的項(xiàng)目,采用分布式部署,會根據(jù)不同的事件,將不同的數(shù)據(jù)回調(diào)給不同的第三方url,并發(fā)很大,大概一天要回調(diào)幾百萬次,采用laravel queue消費(fèi)這些回調(diào)。目前遇到的問題:
1.對服務(wù)器內(nèi)存消耗較大,需要開了200多個(gè)進(jìn)程去消費(fèi)這些回調(diào)
2.有的客戶提供http 服務(wù)器響應(yīng)慢,就會阻塞消費(fèi)的進(jìn)程
3.各臺服務(wù)器負(fù)載均衡,所以由哪臺服務(wù)器發(fā)送的不可知,所以客戶那邊需要綁定我們所有負(fù)載服務(wù)器的ip作為白名單
4.重發(fā)機(jī)制依賴guzzle/http的retry,導(dǎo)致重試期間會嚴(yán)重阻塞隊(duì)列
5.沒有很好的記錄、查詢這些回調(diào)的機(jī)制
1.采用webman來統(tǒng)一處理這些回調(diào),做一個(gè)轉(zhuǎn)發(fā)url,流程是:
laravel主項(xiàng)目->webman項(xiàng)目->第三方url
2.webman工作進(jìn)程接收數(shù)據(jù),并通過異步TCP客戶端的方式發(fā)送給 自定義10個(gè)進(jìn)程消費(fèi)(主要是不阻塞工作進(jìn)程)
3.自定義進(jìn)程中入庫、發(fā)送、更新庫中的對應(yīng)數(shù)據(jù)(如發(fā)送時(shí)間、第三方web服務(wù)器的響應(yīng)數(shù)據(jù)等,作為后期檢索發(fā)送的依據(jù))。其中自定義進(jìn)程發(fā)送中采用fiber的http協(xié)程發(fā)送
請問方案可行嗎? 尤其是3中的fiber的http協(xié)程發(fā)送,會阻塞自定義的消費(fèi)進(jìn)程嗎?
webman開一個(gè)redis隊(duì)列,然后laravel主項(xiàng)目直接入隊(duì)列,隊(duì)列里訪問url。
隊(duì)列里用workerman/http-client 發(fā)起url請求,workerman/http-client本身就是非阻塞的,感覺用不到fiber。
當(dāng)然用fiber好處是以同步的方式寫代碼,業(yè)務(wù)不用寫在回調(diào)函數(shù)里了
感謝,我測試了一下,確實(shí)如果不要響應(yīng)結(jié)果的話,不需要fiber了,直接workerman/http-client發(fā)送就好了,然后回調(diào)再入庫