springcloud客服端交叉調用

 spingboot開發的應用作爲客戶端,可以是相互調用的,但是相互調用會出現個問題就是交叉調用,

 

如圖舉例,A處理一個業務需要調用F的服務,但是F處理這個有需要B的服務,B處理有需要E的服務,E有需要A的服務,這樣循環會導致個問題大家都都是相互調用,條例清除的話基本還不會死循環調用。

而且測試的時候基本也沒啥問題,單元測試時都是規規矩矩的基本測不出來,而且單機壓力測試基本很難壓出來因爲,A這裏已經瓶頸限制了,一上線壓力一大就會出問題。

 

舉例A-F每個應用每秒能夠處理100個請求,A首先由100個請求來了,E也收到100個請求,E這100個還要去請求A,A已經沒有多餘的能力來處理請求,最後死循環系統卡死,調用超時。

我們當時第一次用springcloud的時候項目上線就出現這個問題,一到高峯時段系統就卡起,重啓系統就好一會,平時沒有出現,一到高峯期就出問題。

 

查詢服務器連接數據

netstat -an | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}',顯示等待連接數超多。後面纔想到可能是springcloud客戶端阻塞。

 

怎麼拆呢,不允許交叉調用,只能單向調,A只能調B,B不能調A,如果B非要調A,A單獨一個項目出來改成A-1專門給B調用,這樣處理後面基本就是好了。

 

以前我們做項目的時候,也是雲服務,當初有一個規定就是隻能單向調用服務。

 

今天在一個微信公衆號也看到了也有人問這個問題!

https://mp.weixin.qq.com/s/B6xvAgMh0WVf2NdxPJ8GjA

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章