网络调试的系列小故事,你会获得复杂系统调试的认知提升
在讲故事之前,我先普及一下微服的系统和背景,请大家耐心看完,因为这是非常有意义的。
然后我们在这个有意义的基础之上,我们再通过微服开发过程中的真实故事来传授给你们超复杂软件工程正确的调试技巧。
很多人说懒猫微服就是NAS,如果你只是从一个局部看,能用网盘相册,能跑应用服务来说,这个切面看确实很像。
但是当你真的拥有一台微服后,你探索里面的小细节,你就会从底层明白它的确不是NAS。
微服从商业上要解决的根本问题是什么?是要解决复杂终端环境下的互联互通。
不管你是苹果手机,安卓手机,微软笔记本还是苹果笔记本,华为平板还是iPad, 特斯拉还是比亚迪汽车。在我创建deepin linux做操作系统的那些年,明白一个道理,巨头为了建立品牌全家桶,从芯片,编译器,操作系统到硬件和APP,他们建立了非常深的技术护城河,就是为了让用户用全家桶的硬件。
最著名的就是苹果生态,国内跟班就是小米和华为,我不是说全家桶生态不好哈,而是人做为 “好奇” 的物种,天生就喜欢探索不同品牌的硬件和产品。而巨头绑定大家的隐形护城河就是他们云服务,因为云服务器在巨头家里,所以你想让苹果iCloud支持小米和华为就很难,反之安卓云服务要支持苹果也很难。而这种巨头之间的操作系统和终端战争的硝烟是永无止境的。
所以,我花了很多年的时间去做战略思考,不变的是什么?巨头之间的终端硝烟战争。需求是什么?好奇用户买不同终端设备后,希望有一个统一的云服务,不管在什么设备上都可以享受体验一致的云服务,而不是因为单一品牌绑定不能使用不同品牌的设备。
所以微服技术架构选择了工程量最大的一条路:3层操作系统架构保证各种折腾不会挂,9大终端小程序框架实现跨操作系统API底层调用,自带网络穿透的Linux服务器实现跨品牌终端的互联互通。
今天因为篇幅关系,我们只讲网络穿透开发过程中的那些小故事。
在讲小故事之前,大家记得我们CTO的一个调试原则:跟着数据流向来调试
故事1,5G或者公司的上传速度很快,反而家里局域网上传很慢。
这个标题就是反研发直觉的。最开始百思不得其解,一个奇异的bug在公司流程转了一周没结果,APP,客户端,操作系统端都看日志很奇怪,现象稳定但是不知道原因。我当时带着4-5个工程师说,不要在公司猜了,要不这个锅会在公司甩几圈都掉不下来。今天都去我家办公。
我们首先要做广泛的测试,排除家的干扰,我在家开5G很快,局域网不行,排除后端代码瓶颈,要不是不会因为切换网络就稳定快和稳定的慢。
排查完后端,我们打开chrome调试工具,看每个网络请求,5G和WiFi环境下,前端没有阻塞和报错,排除前端。
前后端都排查了,我们估计是网络链路出现了问题,然后我们带了一个公司WiFi路由器嫁接到我家光猫上,测试公司的WiFi路由器ipref跑数据上传速度正常,我手机连我家路由器上传速度掉了1/10,测试很多次都稳定复现。但是原因是什么?公司路由器到底和我家路由器之间有啥本质的不同?当你遇到一个玄学问题的时候,千万不要死磕原来的代码逻辑,因为那样没用,视野小的地方你是天才也没用,原因一定在思维框架外。
这时候我这条鲶鱼就放开思路了,既然我家WiFi上传稳定慢,还缺少一个维度,空间。我就在我家不同的地方频繁的飞行模式到WiFi,测试家里不同的上传网速,我在家外面走廊和入口卧室上传很快,但是在客厅和主卧很慢,是不是网络波动和测试偏差?我那时候就像孙悟空一样来回在家里转,反复测试了很多遍,都符合这个规律,奇了怪了?家里不同位置还有10倍速度差别。做了硬件后,我自己有个原则,凡是在软件上随机不可解的玄学问题都和硬件有关系。
我就坐在那里思考,家外走廊好,公司路由器正常,5G正常,网速速度有明显的空间特征。想了很久,我猜测是家里不同空间链接了不同AP,我在走廊连接的是主路由,我在客厅和卧室连接的是子AP,基于这个猜想我们用网络信道工具去调试,不同的路由器发出的信道是唯一的。果然,上传网速和信道差异吻合了,找到100%的逻辑匹配现象就成功一半,我们接着网络搜索看了很多文章,最后我们找到合理的解释。
现在家里多AP的设备,特别是子AP不像主路由那样是全双工的,子AP功率小,它是为了下载速度优化的,当你手机链接了子AP,同时让它做下载和上传的事情,它就会因为功率不足而降低传输速度。
破案后,解决方式很简单,在微服的WiFi设置界面加一个测速功能,在不同WiFi信道测试实际的下载速度,让客户端选择功率最大,速度最快的信道,而不是传统无线设备会选择ping最低的,通过绑定WiFi传输信道来实现终端和微服的高速传输。
马上要去给武汉老板送货了,有趣的网络小故事2,下午继续分享。
喜欢听我研发故事的同学别忘了点赞转发,转播研发思路就是科技向善。
喜欢我们强大技术产品的大佬不要京东默默支持,评论区扣1,我让同事给大佬们发购机优惠码。
点击图片查看原图