需求描述:
需求里面需要新增一个name字段由api接口提供,api接口调用rpc-search服务返回
问题现象
前台调用接口发现name字段正常出现几次会出现一次null的情况,而且是必现
排查思路
-
第一应对思路是代码逻辑出问题了?因为api层和rpc-search层都用到了大量的缓存逻辑,反复排查和单测,就是特么的很奇怪呀,这个接口的其他字段都能正常返回,就只有name字段会偶然出现null的情况,对api和rpc-search层都去掉了缓存,发现问题依旧存在
-
已经过去了大半天时间,这有点生气啊,调接口的过程中无意发现其实这个name字段出现null有点规律的,出现2次正常之后就出现一次null,然后接着2次正常再出现一次null,接着分别到2个pod看日志,发现确实是每个pod只请求了一次,第三次就不出现日志了, 似乎看到了点希望,速去rpc项目看了下该项目开了几个pod,果然是开2个pod,我把pod值改为5试试,接口的中name出现出现null的频率就变成了5次正常接着一次null,很明显负载均衡是轮询请求,这个时候想是不是需要运维老师参数设置下k8s某个参数就可以了?放假期间也不想再继续搞
-
节后第一天向运维老师反馈了这个现象,运维老师看了看也没思路,他说这个是网关层面往下看项目的日志 看状态都是200
-
无奈寻求leader帮助
leader从现象上看说是可能zk没注册rpc服务的ip,但是查看了确实注册了,帮着查了半天,期间出现了几次zk超时的现象,又是就把超时时间搞大点,结果问题依旧存在
纠结之下的最终尝试
cli, err := abcrpc.NewClient()
// 看调用rpc服务的IP 关键问题
if err != nil {
logger.Ex(ctx, tag, "call rpc abcrpc is err: %+v", err)
return res, err
}
req.Id = args.VersionId
req.Type = args.Type
err = cli.AbcVersion(ctx, &req, &ret)
就是本地调试这个日志引起了重视出现了转机
[11:47:26 CST 2023/06/25] [INFO] (rpcxwrap.go:47: localhost) Filter_abc.AbcVersion [destinationAddr:|tcp@10.52.11.83:18900], WrapCall args:[&{Id:1155 Type:0}],reply:[.....]
当调用ip是10.52.11.83是结果是正常的,name字段有值,当调用ip是10.52.3.161时候结果是错误的,name是null值
注意看这里说的ip:10.52.11.83、10.52.3.161就是请求的rpc-search时出现的ip, 但是通过查podip发现这个ip对应的项目是rpc-a服务的,为啥请求请求rpc-search服务会暴露rpc-a的? 这块为啥没及时想到?反思一下吧!!!
查看zk信息
项目里的设置:
[Registry]
;注册中心地址,多个地址以空格分割
addrs = 120.90.73.71:2181 120.90.73.74:2181 120.90.73.89:2181
;基础路径
basePath = /big_bd_xigua
;注册更新时间 1m表示一分钟
updateInterval = 1m
group = release
[ops@bj-bdu-www-crm-test 11:52:39 /home/ops/src/apache-zookeeper-3.7.1-bin/bin]
$ ./zkCli.sh -server 10.90.73.72:2181
[zk: 10.90.73.71:2181(CONNECTED) 9] ls /big_bd_xigua/Filter_abc
[tcp@10.52.11.83:18900, tcp@10.52.3.161:18989]
api服务会出现调用rpc-a的pod服务,但是rpc-a项目并没有我的项目代码,我的逻辑是部署在rpc-search项目的
结论: 因为服务太杂,业务做过一次服务整合,把原来的rpc-a,rpc-b,rpc-c三个独立的子rpc服务整合集成到rpa-search服务中,然后回把原来的三个项目pod设置为0,服务下线的!
当api调用的的rpc-search服务,由于原来的rpc-a服务pod数当初合并服务的货并没有设置为把他设置为0,并没有关闭业务还在对外服务,也就是说代码并没有更新到原来的rpc-a服务上,当请求达到原rpc-a服务时候,name字段就是空了
总结:
1.寻找事情本质,透过现象本质,从关键地方下手,从大向小看,从高纬度往下看,全局意识
2.从问题中寻找规律