作者:古涵生 | 来源:互联网 | 2023-06-11 18:07
CDNcache引起的小程序用户信息错乱的线上问题汇总问题描述在某个小程序中,高频请求场景下会导致用户登陆后出现串号的情况,即我自己的账号登陆显示别人的信息,问题严重影响到线上的用
CDN cache 引起的小程序用户信息错乱的线上问题汇总
问题描述
在某个小程序中,高频请求场景下会导致用户登陆后出现串号的情况,即我自己的账号登陆显示别人的信息,问题严重影响到线上的用户体验,下面讲一下我们这次心酸的排故之旅!
故障现象1:我们通过多个测试号的故障复现进行分析,发现每次出现错乱账号的信息大部分都是同一个人的信息,而且时间点都集中在晚上功能高频使用的时间段
故障现象2:通过后台日志分析,每次出现串号现象之前,串号的人的请求日志必现,却在故障发生后,发生的过程中,查不到该用户相关的请求信息(奇怪)
故障现象3:通过postman请求用户信息接口,同样出现真机模拟的串号问题
问题代码
@ApiOperation(value = "获取当前用户信息", httpMethod = "GET")
@GetMapping
public ConsumerUserRepresentation getUserInfo() {
return consumerUserApplicationService.getUserInfo();
}
问题思考
根据现象1推测:有可能是高并发引起的接口调用数据错乱
解决方式:在用户信息接口上我们添加了并发锁,尝试阻止并发请求,但是问题依旧。。。
根据现象2推测:有可能是没有通过后台返回数据,而直接查询缓存,但是后台代码并没有设置缓存机制,那么问题来了,如果是命中缓存,缓存数据从何而来???
根据现象3推测:排除是前端缓存原因导致的串号
问题解决
通过各种尝试,排除法,最终我们定位到缓存的来源---CDN cache 下面是postman模拟请求的数据对比:
X-Cache-Lookup:Hit From MemCache 表示命中CDN节点的内存
X-Cache-Lookup:Hit From Disktank 表示命中CDN节点的磁盘
X-Cache-Lookup:Hit From Upstream 表示没有命中CDN
未命中缓存,正常请求
![未命中CDN cache 走回源,请求接口]
命中缓存,取缓存数据,数据错乱
![命中CDN cache 数据发生错乱]
通过postman我们可以看到,正常数据和异常数据的请求头中标识了是否命中CDN cahce的标签,通过对比,我们最终判断出是通过CDN cache取到的缓存数据,那么请求什么会走cache,什么时候走cache,什么时候回源请求接口呢?以下是关于CDN cache的讨论,在此不做赘述。附上链接如下:
CDN概述
genie88.github.io/2015/11/03/talk-a...
CDN加速原理
www.huaweicloud.com/zhishi/cdn001....
修复