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

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