MST

星途 面试题库

面试题:缓存设计之专家难度:缓存穿透综合解决方案及性能评估

缓存穿透问题对系统危害极大,现要求你设计一套综合解决方案来避免缓存穿透,不仅要考虑如何防止非法请求穿透缓存,还要兼顾系统的性能开销。请详细描述解决方案,并对其性能进行理论评估,说明在不同流量规模下该方案的优势与潜在瓶颈。
40.5万 热度难度
后端开发缓存设计

知识考点

AI 面试

面试题答案

一键面试

解决方案

  1. 布隆过滤器(Bloom Filter)
    • 原理:布隆过滤器是一种概率型数据结构,通过多个哈希函数将一个元素映射到一个位数组的不同位置并置为1。查询时,若对应位置不全为1则元素一定不存在,若全为1则大概率存在。
    • 应用:在缓存查询之前,先通过布隆过滤器判断数据是否存在。如果布隆过滤器判断不存在,则直接返回,无需查询数据库,这样可以有效拦截大部分非法请求。
  2. 缓存空值
    • 原理:当数据库中确实不存在某条数据时,将该查询结果(空值)也缓存起来,并设置较短的过期时间。
    • 应用:下次再查询同样的数据时,直接从缓存中获取空值,避免穿透到数据库。
  3. 接口参数校验
    • 原理:在系统接口层对输入参数进行严格校验,确保参数格式、范围等都符合预期。
    • 应用:例如对于ID参数,校验其是否为合法的数值类型且在合理范围内,不合法的参数直接返回错误,不进行后续缓存和数据库查询。
  4. 用户鉴权与访问控制
    • 原理:对用户进行身份验证和授权,只有合法用户的请求才能进入系统进行后续操作。
    • 应用:例如使用JWT(JSON Web Token)等技术,在请求头中携带token,系统验证token的合法性和用户权限,非法用户请求被拦截。

性能理论评估

  1. 布隆过滤器
    • 优势:空间效率高,查询速度快,几乎可以在常数时间内完成判断,对于大规模流量能快速拦截非法请求,大大减轻后端数据库压力。随着流量规模增大,其拦截非法请求的作用愈发明显,性能提升显著。
    • 潜在瓶颈:存在误判率,虽然误判率可以通过调整哈希函数个数和位数组大小来控制,但不能完全消除。当流量规模极大且数据量增长过快时,位数组可能需要不断扩容以维持较低误判率,这会增加内存开销。
  2. 缓存空值
    • 优势:实现简单,能快速处理不存在的数据请求,对于频繁查询不存在数据的场景,减少了数据库查询次数,提升了系统整体性能。在流量规模较小到中等时,能有效防止缓存穿透且对性能影响较小。
    • 潜在瓶颈:缓存空值会占用一定的缓存空间,当流量规模很大且存在大量不同的不存在数据请求时,可能导致缓存空间浪费。同时,如果设置的过期时间不合理,可能导致短时间内仍有部分穿透请求。
  3. 接口参数校验
    • 优势:在请求进入系统早期就进行拦截,几乎不消耗额外的性能开销,对于任何规模的流量都能有效拦截非法参数请求,保障系统稳定性。
    • 潜在瓶颈:只能对参数格式等进行校验,无法拦截针对存在但非法数据的请求,对于绕过参数校验的非法请求防护能力有限。
  4. 用户鉴权与访问控制
    • 优势:从源头拦截非法用户请求,减少系统整体处理压力,对于高流量场景能显著提升系统安全性和性能。随着流量规模增大,合法用户请求处理效率更高。
    • 潜在瓶颈:鉴权和授权操作本身需要一定计算资源,在高并发情况下可能成为性能瓶颈,特别是当鉴权逻辑复杂时。同时,如果鉴权系统出现故障,可能影响正常用户请求。