技术干货 | mPaaS 客户端问题排查:漫长的 3s 等待之谜

本文涉及的产品
mPaaS订阅基础套餐,标准版 3个月
简介: 对于开发者来说,排查手段已经不再局限于构建代码过程中的调试,往往需要扩充排查方法,从多种途径对问题进行分析和定位。这篇文章会和大家分享 mPaaS 开发者的一例小程序网络性能问题排查之旅。

封面图0113.png

面对日益复杂的技术世界,App 在开发、上线和运维阶段所遭遇的问题也越来越多。这些形形色色的问题可能来自整个链路的任意环节,而不仅仅是代码层面。

对于开发者来说,排查手段已经不再局限于构建代码过程中的调试,往往需要扩充排查方法,从多种途径对问题进行分析和定位。这篇文章会和大家分享 mPaaS 开发者的一例小程序网络性能问题排查之旅。

问题背景

“笑联科技”反馈基于 mPaaS 开发的 App 中,其集成的小程序访问客户自建的 Web API 存在连接慢的性能问题。问题复现视频如下:

播放问题复现视频

从问题复现的情况看,打开小程序后,页面数据的加载有一个“漫长”的等待过程。

和开发者沟通后了解到,页面初始化所必须的部分数据是通过自有的 Web API 获取到的,数据返回慢会导致页面加载的等待。另外开发者也提到,这个问题存在地域性和偶发性,既部分地区的部分用户在一段时间内会被这个问题严重困扰。

问题分析与排查

如前文所述,数据是通过 Web API 获取的,自然我们希望通过外部手段去确认这个 Web API 本身是否存在性能问题。

然而,通过浏览器或 Postman 等工具去访问该 Web API ,均无法复现问题,后端的响应都是毫秒级。但是因为开发者提到该问题存在地域性和偶发性,因此无法直接排除部分原因。

由于我们并不是 App 的直接开发者,对于这类问题,一种常规的手段是抓取 HTTP 报文来观察和理解 App 背后的行为特征。比较幸运的是,我们的测试用 iOS 手机可以复现问题,通过 Charles 抓取 App 报文,我们有如下发现:

当 Charles 开启 SSL Decryption 时(中间人解密 HTTPS Body 模式),问题无法复现。

当 Charles 关闭 SSL Decryption 时,问题可以复现,数据加载明显存在一个 3s 的等待情况。

上述现象 2 和 3 强烈暗示问题可能和 HTTPS/SSL 协议层面相关(开启 SSL Decryption 时,HTTPS 连接由 Mac 笔记本和服务器进行;关闭 SSL Decryption 时,HTTPS 连接由 iPhone 和服务器进行)。

对于 SSL 层面的问题,则需要抓取 TCP 报文做进一步的确认和分析。使用 Wireshark 进行网络层抓包(基本抓包步骤:iPhone 正常接入网络;iPhone 通过数据线连接到 Mac 上,并对手机网卡搭建一个虚拟映射;Wireshark 在该映射上进行抓包;详细步骤参考这里)。

问题复现并抓取到相关报文后,首先确认问题,如下图所示:

1.png

通过上图日志可以看到,在 TLS 握手阶段,客户端在流程上延迟了 3s 才把 Client Key Exchange 消息发给服务端,而正常情况下,不应该存在如此漫长的等待情况。于此同时,开发者在 Debug 包上的前端嵌入调试也确认了相关情况,如下图所示:

2.png

接下来需要搞清楚,客户端为何在握手阶段等待了如此之久以及这 3s 期间客户端在做什么?放开网络包过滤条件后,通过阅读网络包的上下文,我们有了进一步的发现,如下图所示:

3.png

在上图中,可以看到客户端一直尝试与一个 IP 为 243.185.187.39 的站点建立 TCP 连接,但均遭遇失败。这里会有两个疑问:1. 这个站点是干什么的?2. 为何客户端要在 TLS 握手过程中先去连该站点?

通过同一个网络包中的 DNS 查询记录,尝试反查该 IP 对应的域名地址,发现该站域名为:a771.dscq.akamai.net:

4.png

通过公网搜索该域名,得知这个域名是 Let's Encrypt (全球最大的免费证书机构)证书的 OCSP (Online Certificate Status Protocol,用于校验证书状态) 地址,但需要进一步确认该证据。在网络包中,查看服务端返回证书帧的详细信息,确认证书的 OCSP 地址为 http://ocsp.int-x3.letsencrypt.org

5.png

由于该 OCSP 地址和网络包中看到的不一致,本地通过 nslookup 再进一步确认:a771.dscq.akamai.net 是 ocsp.int-x3.letsencrypt.org 的一个 CNAME 地址(这种配置一般为了站点加速):

6.png

结合上述情况和公开资料,可以确认在 3s 的等待期内,客户端尝试去连接证书提供的 OCSP 站点地址,意图确认证书的吊销状态。仔细观察会发现,本地解析出的 IP 地址和手机端抓包看到的 IP 地址是不一样的,这里大概率是 Let's Encryped 证书的 OCSP 地址被“污染”导致的。

7.png

到这里,我们可以看到问题的小结为:客户端需要和 https://api.xiaolianhb.com/ 建立 HTTPS 连接,在 TLS 握手阶段,客户端无法连上该站点证书提供的 OCSP 地址,因此无法确认证书的吊销状态,3s 后触发超时放行机制,客户端和站点正常建立 HTTPS 连接,请求发送和数据返回流程得以进行。

既然 Let's Encrypt 证书的 OCSP 域名被“污染”已经成为事实,因此,要解决该问题,最快的解决方案是更换站点证书,保证 TLS 握手流程的顺畅。

小结

在这个案例中,我们可以看到有些时候,问题和代码、SDK 亦或是系统 Bug 并无直接关联,异常情况可能来自一个意想不到的地方。

回到问题症状上,更进一步的疑问是:为何桌面浏览器或网络工具受影响较小?为何 Android 手机不受影响?这些症状细节上的差异,均和不同系统或工具对协议的实现形式相关。

开发者很难在一开始的规划阶段就能把这些细枝末节的问题都预估到,因此,出现问题之后,深入的问题剖析配合日志解读往往是理解程序行为背后逻辑的重要手段。

CodeDay#5:深入探索支付宝终端

在过去的一年中,我们通过与众多终端开发者在能力对接、需求沟通中发现,愈来愈多的研发团队面临业务需求爆发时难以找到有效的方式进行高并发支撑。

大家的问题呈现出了共性特征:如何实现动态发布?如何进一步提升研发效率?支付宝是否有最佳实践?

因此,此次 CodeDay 我们把焦点放在“支付宝终端”,尝试通过 4 个议题分享,带领大家了解支付宝作为一款超级 App,如何借助容器化技术实现动态发布、更新能力,并沉淀出一套可复用的技术体系。

点我立即报名

1 月 23 日,我们广州见。

长图.png

作者名片-东雷.jpg

延伸阅读

动态-logo.gif

底部banner.png

相关文章
|
1天前
|
消息中间件 数据采集 运维
一份运维监控的终极秘籍!监控不到位,宕机两行泪
【10月更文挑战第25天】监控指标的采集分为基础监控和业务监控。基础监控涉及CPU、内存、磁盘等硬件和网络信息,而业务监控则关注服务运行状态。常见的监控数据采集方法包括日志、JMX、REST、OpenMetrics等。Google SRE提出的四个黄金指标——错误、延迟、流量和饱和度,为监控提供了重要指导。错误监控关注系统和业务错误;延迟监控关注服务响应时间;流量监控关注系统和服务的访问量;饱和度监控关注服务利用率。这些指标有助于及时发现和定位故障。
15 1
|
3月前
|
监控 Linux Shell
"揭秘!一键掌控Linux服务器健康的秘密武器——超实用系统检查脚本,让你的服务器稳如老狗,告别宕机烦恼!"
【8月更文挑战第14天】服务器宕机或资源耗尽会严重影响业务。为此,你需要一个Linux系统检查脚本来守护服务器健康。它可以自动检测潜在问题如磁盘满载、内存泄漏等,避免服务中断。脚本应包括磁盘空间、内存/CPU使用、系统时间准确性、关键服务状态及系统日志分析等检查项。通过编写并定期运行这样的脚本,可以显著提高服务器的稳定性和可靠性。
48 1
|
3月前
|
运维 监控
"网络工程师必备秘籍:4大招轻松破解M-LAG故障难题,你的网络还能更稳定!"
【8月更文挑战第19天】M-LAG技术通过多链路聚合提升网络可靠性和带宽。面对M-LAG故障,四步定位法助您迅速排障:1) 检查M-LAG成员状态确保链路活动;2) 验证链路聚合配置一致;3) 分析控制和平面与数据平面状态;4) 排除物理层故障如端口状态异常。结合网络监控和定期检查,保障M-LAG稳定运行。
76 0
|
3月前
|
运维 监控 Linux
"熬夜达人揭秘:Linux系统崩溃前夜,如何用这几行代码救局?监控与排查全攻略!"
【8月更文挑战第19天】作为常需熬夜的系统管理员,面对Linux系统问题时,我总结了一套实用的监控与排查方法。通过使用`top`监控CPU使用率、`free`检查内存状况、`iostat`监测磁盘I/O、及`iftop`观察网络流量,结合`ps`、`pmap`和`strace`等工具深入分析,可有效识别并解决系统瓶颈,减少故障处理时间,保障系统稳定运行。
35 0
|
5月前
|
运维 监控 Java
网络之谜:记一次失败排查的故事
【6月更文挑战第6天】文章详述了一次故障排查经历,故障表现为客户端接口调用延迟,服务器报错(Broken pipe和Connection reset by peer),Nginx连接数异常增加。通过pinpoint平台发现三种错误类型。排查过程涉及数据库、中间链路和第三方服务,但未找到根本原因。监控手段不足(如无法生成Java dump)和故障难以复现增加了难度。尽管最终靠重启服务暂时解决,但提出改进监控和提升故障排查技巧的重要性。总结中强调了故障排查的复杂性、所需专业知识及冷静分析的态度。
|
6月前
|
编解码 安全 定位技术
典型崩溃问题集锦
典型崩溃问题集锦
49 0
|
6月前
|
监控 数据安全/隐私保护 iOS开发
服务器监控新利器:ServerBee带你看透服务器运行状态
服务器监控新利器:ServerBee带你看透服务器运行状态
119 0
|
6月前
|
人工智能 数据安全/隐私保护
意外之喜!5款小巧工具助你轻松面对繁忙生活
在繁忙的日常中,简单而巧妙的小工具能够带来意外的惊喜。这五款工具或许正是你所需要的,不妨一试。
55 1
|
监控 前端开发
揭秘跨部门沟通的秘密武器:让不归你管的人主动配合你的绝妙方法!
揭秘跨部门沟通的秘密武器:让不归你管的人主动配合你的绝妙方法!
112 0
|
数据采集 移动开发 监控
两把利器,轻松做好十一期间服务器监控保障
由于服务器需要7×24 小时运行,十一期间,为了切实做好服务器的重点保障,电源监控,必不可少。基于成本的考虑,我们决定自己做。如何多快好省,实现一个这样的平台呢?思路是通过服务器自带的远程管理模块读取redfish接口中电源功耗信息,然后采集到时间序列数据库,再通过grafana基于时间和ip做条件筛选做展示。这里就要用到两把开源利器Grafana和Influxdb。
两把利器,轻松做好十一期间服务器监控保障

相关产品

  • 移动开发平台 mPaaS