高并发如何避免缓存踩踏

场景

在一些高并发的场景中,例如搜索场景,会面临大量的并发请求。

当cache失效或者这稳定性波动后,会导致数据库层请求量突增,超时请求变多。

由于重试机制,数据库可用性会进一步降低,进而导致业务不可用。

问题

1、无效请求多。

2、回源数据库策略不灵活。

3、重试机制。

方案

1、过滤无效请求。(参数校验)

做好合法性检查可以避免大部分的问题。

2、离线bloom过滤生成。

使用bloom可以过滤掉数据不存在的请求,避免缓存踩踏。

3、离线缓存预充。

减少缓存失效带来的数据请求压力。

4、短路器。

老的方式是根据服务不可用的情况拒绝新的请求,一定时间后再重试;更合理的方式是事前预估容量做过滤并报警扩容。

5、锁和promise

当缓存失效后不是所有请求都请求库,先将此次失效的数据库请求加锁,预充完成后其他请求再请求缓存(延时增加)。

总结

1、过滤,干不了。

2、熔断,不干了。

3、加锁,忙着呢。

4、预充,有点贵。

过滤+加锁+熔断+预充

您的支持是我最大的动力!