问题:
XX客户反馈,部署的edas应用不定时的总有请求超时的问题。而在本地调试和轻量配置中心内,调用都是正常的。就是发布到线上后出现timeout。
分析:
客户的线下环境执行正常,线上出现问题。可以先基本排除代码上的问题,多半跟网络配置相关。
调查客户的业务架构,为:
客户端-->公网SLB-->ECSA(Edas应用 http)--> 内网SLB-->ECSB(Edas应用 http)(HSF Customer)-->ECSC(Edas应用 HSF Provider)-->数据库
超时出现在红色部分
部署ECSB的实例示例为
客户使用了docker并绑定了内外网SLB,ECSA也为同一宿主机的ECS。
隐隐的感觉到了问题。
登录ECS上用curl验证一下。
最终正常请求,但是耗时非常久,而实际上客户端的request早已timeout。
抓包看全是RST
这让人不禁想起了SLB的那个限制...
更换成http协议,再次测试
完全恢复正常
结论
EDAS的添加SLB的功能是调用的SLB API来实现,默认创建TCP协议监听,而当使用docker环境下,为了争取挖掘ECS最大资源可用性,会将多个应用都部署同一个docker宿主机上。而这些应用之间是存在调用关系的,在使用内网SLB时,就很容易走到这个坑里。形成了‘循环调用’导致超时。
解决方法:
1.更换为http协议监听
2.通过不同的ECS主机访问。