EDAS内网SLB超时问题排查

问题:

XX客户反馈,部署的edas应用不定时的总有请求超时的问题。而在本地调试和轻量配置中心内,调用都是正常的。就是发布到线上后出现timeout。

分析:

客户的线下环境执行正常,线上出现问题。可以先基本排除代码上的问题,多半跟网络配置相关。
调查客户的业务架构,为:

客户端-->公网SLB-->ECSA(Edas应用 http)--> 内网SLB-->ECSB(Edas应用 http)(HSF Customer)-->ECSC(Edas应用 HSF Provider)-->数据库
超时出现在红色部分

部署ECSB的实例示例为
EDAS内网SLB超时问题排查
EDAS内网SLB超时问题排查

客户使用了docker并绑定了内外网SLB,ECSA也为同一宿主机的ECS。
隐隐的感觉到了问题。
登录ECS上用curl验证一下。
EDAS内网SLB超时问题排查
最终正常请求,但是耗时非常久,而实际上客户端的request早已timeout。

抓包看全是RST
EDAS内网SLB超时问题排查
这让人不禁想起了SLB的那个限制...
EDAS内网SLB超时问题排查
更换成http协议,再次测试
EDAS内网SLB超时问题排查
完全恢复正常
EDAS内网SLB超时问题排查

结论

EDAS的添加SLB的功能是调用的SLB API来实现,默认创建TCP协议监听,而当使用docker环境下,为了争取挖掘ECS最大资源可用性,会将多个应用都部署同一个docker宿主机上。而这些应用之间是存在调用关系的,在使用内网SLB时,就很容易走到这个坑里。形成了‘循环调用’导致超时。

解决方法:

1.更换为http协议监听
2.通过不同的ECS主机访问。

上一篇:文本和关键词相似度计算(切词、余弦相似度)JAVA实现


下一篇:分布式环境下-订单号生成设计