
1) 【一句话结论】
在《三国杀》手游高并发交易系统中,我们曾因缓存穿透引发雪崩故障,通过引入布隆过滤器+限流+异步补偿机制,将故障率从千分之五降至万分之三,保障了交易稳定性。
2) 【原理/概念讲解】
老师来解释几个关键概念:
3) 【对比与适用场景】
| 解决方案 | 定义 | 特性 | 使用场景 | 注意点 |
|---|---|---|---|---|
| 布隆过滤器 | 概率型哈希集合判断元素存在 | 存在误判(假阳性),无漏判 | 高并发场景下过滤无效请求 | 需定期清理,误判率随元素增加而上升 |
| 直接查询数据库 | 每次请求直接访问数据库 | 请求直接到数据库 | 低并发场景,或数据量小实时性要求高的场景 | 高并发下数据库压力巨大,易引发雪崩 |
4) 【示例】
以交易请求处理为例(伪代码):
// 初始化布隆过滤器
BloomFilter.init(maxSize=1000000, errorRate=0.01);
function handleTransaction(request) {
// 1. 检查布隆过滤器(快速判断是否有效请求)
if (BloomFilter.contains(request.targetId)) {
return getFromCache(request.targetId);
}
// 2. 若未命中,查询数据库
data = queryDatabase(request.targetId);
// 3. 更新缓存和布隆过滤器
updateCache(request.targetId, data);
BloomFilter.add(request.targetId);
// 4. 异步补偿(交易成功后异步更新数据库,失败回滚)
if (transactionSuccess) {
asyncUpdateDatabase(request.targetId, data);
} else {
rollbackDatabase(request.targetId);
}
return data;
}
5) 【面试口播版答案】
“面试官您好,我分享的挑战是在《三国杀》手游的高并发交易系统中遇到的缓存穿透导致的雪崩问题。当时,当用户大量购买热门卡牌(比如‘张飞’)时,所有请求都直接冲向数据库,因为缓存里没有该卡牌信息,导致数据库瞬间压力过大,甚至宕机,影响了用户交易体验。我的解决思路是分三步:首先引入布隆过滤器快速判断请求是否有效,避免直接查询数据库;其次设置限流机制,控制每秒请求量,防止突发流量冲击;最后采用异步补偿机制,交易成功后异步更新数据库,失败则回滚,确保数据一致性。最终结果是将故障率从千分之五降到万分之三,交易成功率提升到99.9%以上。”
6) 【追问清单】
7) 【常见坑/雷区】