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