一,案发背景
周五有业务组反映调用基础接口,多调用几次返回的数据不一致
复制代码
二,技术栈
Springboot+Dubbo+Redis+Eureka+Gateway+Rocketmq+zookeeper
复制代码
三,分析推理
1,假设由缓存造成
第一反应是接口有缓存,review code 未发现,使用Git 查看最近的提交记录发现有
修改了调用方法,但是从没有使用过缓存.
(脸上笑嘻嘻心里MMP的,代码没改过,有意思)
2,假设是不是有旧代码的实例还在运行
因为调用接口返回不正确的数据跟旧接口返回的很像,所以怀疑是有进程没kill干净,
立马找到运维,要他帮忙查看,因为服务是运行在k8s容器上的,容器销毁会把对应的
进程kill干净,抱着不死心调用指令再查看了一下,真是没有.(什么鬼)
3,假设是不是有数据或者隐藏代码逻辑
连接测试数据库,切换测试分支,运行程序,调用接口,5次,20次结果都一样,靠,本地
没问题,线上有问题是最难搞的.(抓了抓乌黑浓密的头发),继续排查
3,假设由开发同事连接测试环境的zookeeper造成的
因为业务组同事是在测试环境演示的,会不会是开发同事排查问题连接到测试服务器,
但是没有拉最新代码导致的呢?(之前就有同事连到测试服务器Rocketmq,导致测试环
境的mq消费到本地)有可能,越想越可能,立马查看yml文件,尤其排查测试环境的配
置,发现开发时zk连接的都是127.0.0.1,测试环境的zk地址只有运维知道.(难搞啊)
但又不想放弃,因为是已经发布了预生产环境,在预生产环境调用同一个接口(wocao)
还是出现了同样的效果,看来不是这个了.
4,假设会不会是有开发同事连接到Eureka呢
因为平时开发,虽然不用启动Eureka也不影响开发,但是异常的日志有时候就是比较
烦人,会不会有洁癖的同事开发连上了呢,(有可能,抱有侥幸)打开网页
复制代码
都是一个节点,我承认我没招了!!–!!
5,找运维了解一下最近的部署情况
跟运维的交谈中得知是这个基础服务的配置一直没有动过,有配置的都是新服务.
(新服务,脑子闪过一下,没抓住)继续了解,原来业务组在做应用拆分,将之前旧的
大的服务按应用拆分,(拆分,我立马就有一个念头冒出)会不会是对应同事拆分服务
没有拆分干净导致的呢?立马找对应对应业务同事.
复制代码
四,结案
在对应同事的电脑上review code 发现新拆分的服务里面果然有同一个接口的实
现类(nima),这里就要涉及到了Dubbo 服务注册了,就是类的全名称+方法参数,实
现类又一致,但还是旧接口的内容,难怪会出现莫名其妙的问题,让其修改后就没有
出现了.(nice,老子果然牛逼,哈哈哈)
复制代码
五,总结
有时候很多莫名其妙的问题不是代码和配置的问题,就像这个问题,涉及基础组
和业务组,这种跨组沟通的,信息不对称的就有问题.我的处理方式是,向其组
长提醒,并且在会上把问题暴露出来,有拆分服务一定要认真再认真,并且一定
测试再测试.
复制代码
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END