MST

星途 面试题库

面试题:分布式系统面对高并发下缓存穿透的综合应对与架构优化

假设在一个高并发的分布式电商系统中,商品数据存储在分布式缓存和数据库中。现面临缓存穿透问题,导致数据库压力剧增甚至可能崩溃。请从系统架构层面提出一套完整的综合解决方案,包括但不限于缓存策略调整、数据验证机制、流量管控措施以及如何与现有系统无缝集成,确保系统在高并发场景下既能有效应对缓存穿透问题,又能保持高性能和高可用性。
20.6万 热度难度
后端开发分布式系统

知识考点

AI 面试

面试题答案

一键面试

1. 缓存策略调整

  • 布隆过滤器:在缓存之前,使用布隆过滤器。布隆过滤器可以快速判断某个 key 是否存在。当一个请求过来,先经过布隆过滤器,如果布隆过滤器判断该 key 不存在,直接返回,无需查询数据库。这样能在一定程度上避免无效的数据库查询。例如,在启动阶段,将数据库中的商品 ID 批量加载到布隆过滤器中。
  • 空值缓存:当查询数据库发现某个 key 对应的数据为空时,也将这个空值缓存起来,并设置一个较短的过期时间。下次相同请求过来,直接从缓存中获取空值,避免再次查询数据库。例如,设置空值缓存的过期时间为 1 分钟。

2. 数据验证机制

  • 参数校验:在系统入口处,对传入的参数进行严格校验。比如对于商品查询请求,检查商品 ID 是否符合规范,是否为合法的数字等。如果参数不合法,直接返回错误信息,不进行后续的缓存和数据库查询。
  • 权限验证:确保请求方具有查询商品数据的权限。只有合法的、经过授权的请求才能进入后续的处理流程,防止恶意请求造成缓存穿透。

3. 流量管控措施

  • 限流:采用限流算法,如令牌桶算法或漏桶算法。对每个客户端或 IP 限制单位时间内的请求数量。例如,限制每个 IP 每分钟只能发起 100 次商品查询请求,超出部分直接返回限流提示,避免过多无效请求涌入系统。
  • 熔断降级:设置熔断机制,当数据库的请求错误率或负载达到一定阈值时,熔断电路,暂时停止对数据库的查询,直接返回默认数据或错误信息。同时,开启降级策略,比如返回一些热门商品的缓存数据,保证系统的基本可用性。

4. 与现有系统无缝集成

  • 代码侵入式集成:在现有系统的商品查询逻辑中,逐步添加上述的缓存策略调整、数据验证机制和流量管控措施的代码。例如,在查询缓存之前插入布隆过滤器的判断逻辑,在获取数据库数据之后添加空值缓存的逻辑等。
  • 中间件集成:可以开发或引入相关中间件来处理这些逻辑。比如开发一个专门的过滤器中间件,在请求到达业务逻辑之前,先经过该中间件进行参数校验、布隆过滤器判断、限流等操作。这样对现有系统的业务代码侵入较小,便于维护和扩展。同时,通过配置中心来管理相关的中间件参数,如限流阈值、布隆过滤器的参数等,方便在不同环境下进行调整。