线上问题:由于CDN cache导致的小程序用户信息串号的问题回顾

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....

修复

前端请求设置header,绕过缓存,回源

本作品采用《CC 协议》,转载必须注明作者和本文链接
Kuroko
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!