场景
在一些高并发的场景中,例如搜索场景,会面临大量的并发请求。
当cache失效或者这稳定性波动后,会导致数据库层请求量突增,超时请求变多。
由于重试机制,数据库可用性会进一步降低,进而导致业务不可用。
问题
1、无效请求多。
2、回源数据库策略不灵活。
3、重试机制。
方案
1、过滤无效请求。(参数校验)
做好合法性检查可以避免大部分的问题。
2、离线bloom过滤生成。
使用bloom可以过滤掉数据不存在的请求,避免缓存踩踏。
3、离线缓存预充。
减少缓存失效带来的数据请求压力。
4、短路器。
老的方式是根据服务不可用的情况拒绝新的请求,一定时间后再重试;更合理的方式是事前预估容量做过滤并报警扩容。
5、锁和promise
当缓存失效后不是所有请求都请求库,先将此次失效的数据库请求加锁,预充完成后其他请求再请求缓存(延时增加)。
总结
1、过滤,干不了。
2、熔断,不干了。
3、加锁,忙着呢。
4、预充,有点贵。
过滤+加锁+熔断+预充