序 、昨天有两只狗 ,脱单了 。真的 ,以后别在说程序员不拉不拉了 ,不是这样的 。
周一刚到公司 ,产品那边反馈一个问题 ,说是学员学习数据不准确 。
事情是这样的 ,用户在使用直播回放功能的时候 ,间隔两分钟会发一次网络请求 ,我们称之为心跳包 。后端有一套业务逻辑会去统计这些心跳包计算用户的学习时长 。用户在关掉直播的时候 ,我们还会做一次进度上报逻辑 。OKOK
然后是学员反馈说是当天的的学习进度是没问题的 ,过一晚上学习进度就有不一样了 。人家很肯定的说课程真的是一分一秒学完的 。这就尴尬了 ,课程看完了 ,当天的学习进度是没问题的 ,然后过一天心跳统计出现了纰漏 。第一感觉是先让后端小伙伴查一下这名学员的日志 ,很尴尬的没有查到 。
对 ,就是没有查到 。想当然的认为这件事是不可能发生的 。后台的日志记录里面没有查到该学员账号的访问记录 ,但是在关闭直播回放页面的时候进度是可以的 。怎么可能出现重点心跳断了 ,然后最后进度上传是没问题的呢 。
学员反馈说是 华为 P30Pro 机型 ,公司只有 华为P30 机型 ,不加 Pro 的 。没事 ,先测试测试 。接下来就是一直在刷数据问题 ,没想到、没想到、没想到 真的复现了 ,我R 。
没错 ,我在刷课 30 分钟之后 真的出现了心跳包请求 TimeOut 的情况 。当时连续断了一个小时 。我R 。我的心情当时是焦灼的 。然后在小小的吐槽一下 ,华为 P30 手机的网路是真的小问题 ,跟小米八小比 ,差距就有点明显了 。
既然问题出现了 ,就开始解决吧 。
首先是公司所有机型全部测试一下进行刷心跳包数据 ,然后协调 IOS也进行模拟测试 。结果都一样 ,超过 30 分钟之后会进行 Timeout 。次数不限 ,过一会又会自动成功 。中间没有任何规律 。但不得不说 ,华为手机出现的频率真高 。
接着是跟后端小伙伴们进行联调 ,一起解决这个问题 。还有一点是 ,之前是没有人反应这个问题的 ,说明可能是后来的上线中引起的这个问题 。
先是怀疑是我们的 负责均衡问题 ,然后我们单独切换的不同的 service ,发现都有问题 。
我 ctpdump 拿了一下请求信息 ,因为是 Https 看不到有用的信息 ,后来使用花瓶 ,发现一个是 SSL 的错误 。然后怀疑是 HTTPS 的问题 ,紧接着我们感觉用 HTTP 的域名进行一次尝试 ,发现确实没问题 。
OK OK OK
然后后端小伙伴开始搞事情 ,最终原因是因为阿里会有拦截机制 ,会拦截一些域名 ,然后我们后端就把他们加入白名单 。
完美 。