为什么客户端有时无法连接到 EC2 应用程序负载均衡器?

为什么客户端有时无法连接到 EC2 应用程序负载均衡器?

背景

我已经创建了一个双栈 ec2 应用程序负载均衡器,并配置了一个 A DNS 记录以指向该应用程序负载均衡器。

我有一个 Android/iOS 应用程序,可以连接到该 ALB 进行工作。

DNS 输出

挖掘 api-lb-ext.unolo.com

; <<>> DiG 9.16.1-Ubuntu <<>> api-lb-ext.unolo.com ; 全局选项:+cmd ;; 得到答案: ;; ->>HEADER<<- 操作码:QUERY,状态:NOERROR,id:52783 ;; 标志:qr rd ra;查询:1,答案:3,权威:0,附加:1

;; OPT 伪部分: ; EDNS:版本:0,标志:; udp:65494 ;; 问题部分:;api-lb-ext.unolo.com。在

;; 答案部分:api-lb-ext.unolo.com。60 IN A 15.207.81.176 api-lb-ext.unolo.com。60 IN A 13.233.27.203 api-lb-ext.unolo.com。60 IN A 15.206.192.130

;; 查询时间:52 毫秒 ;; 服务器:127.0.0.53#53(127.0.0.53) ;; 时间:2022 年 9 月 15 日星期四 15:00:27 IST ;; 收到的消息大小:97

问题

99.9% 的时间里,客户端打开与该应用程序负载均衡器的 TCP 连接都没有问题。

但有时客户端无法连接到负载均衡器。我不确定是 DNS 查找失败还是无法连接到我的后端服务。

代码结构

使用 Android 上的 retrofit 库 (com.squareup.retrofit/1.9.0),我们对我的后端 API (api-lb-ext.unolo.com) 执行调用。

根据他们的文件(https://square.github.io/okhttp/features/connections/),如果他们执行的 DNS 查找检索到多个结果,他们会循环遍历每个连接,直到成功连接到后端。基于低声的想法,我会尝试看看是否可以让它打印出它在尝试连接后端时找到的 DNS 记录。

如果发生任何类型的网络错误,我将检索客户端的 IP 地址(通过https://ipv4.jsonip.com/) 并将其打印出来给客户。客户通常只是将截图发送给我们,告诉我们他们无法登录应用程序。

我迄今为止做了哪些研究

我知道请求没有到达我的 EC2 ALB 实例 - 当这些错误发生时,我通过在客户端打印出 IP 地址并扫描我的 EC2 ALB 日志文件查找该 IP 地址来验证这一点 - 未找到。

我还要求出现此错误的客户更改其 Android 设备上的设置,使其指向 Google 的 DNS 服务器,希望他们的移动运营商所使用的默认 DNS 服务器可能无法提供 DNS 记录 - 当客户回复我时,该服务器会返回结果。

发生错误的任何模式

我看不到。我的大多数客户都是通过移动数据(而不是 WIFI)连接的。我知道 99.9% 的登录都是有效的,但是,我们每周都会收到 1-2 封支持电子邮件,其中包含此屏幕截图,显示他们无法连接到我的后端。我知道我的服务已启动并且正在运行,因为成千上万的人可以同时登录。

我目前的理论

  • 我的猜测是,由于指向我的负载均衡器的 A 记录上的 TTL 非常小(60 秒),我们每次都强制进行 DNS 查找,也许 DNS 查找失败了??

需要指导

任何有关如何尝试调试这个问题的帮助都将非常感激。

相关内容