面试题答案
一键面试缓存架构优化
- 分层缓存:
- 设计:采用多级缓存,如浏览器缓存、CDN 缓存、服务器本地缓存(如 Redis 等内存缓存)以及磁盘缓存。浏览器缓存可以直接返回视频数据给用户,减少网络请求;CDN 缓存分布在离用户更近的节点,快速响应请求;服务器本地缓存加速应用层数据读取;磁盘缓存用于存储不常访问但不能丢弃的数据。
- 原理:通过将数据存储在不同层级且访问速度不同的缓存中,利用空间换时间,优先从高速缓存获取数据,减少整体数据获取延迟。
- 分布式缓存:
- 设计:使用分布式缓存系统,如 Redis Cluster。将视频数据根据一定的规则(如哈希算法)分布在多个缓存节点上,增加缓存容量和并发处理能力。
- 原理:避免单个缓存节点的性能瓶颈,通过并行处理大量请求,提高缓存系统的整体吞吐量和响应速度。
数据预取策略
- 热门视频预取:
- 设计:分析用户行为数据,确定热门视频列表。在系统空闲时段或者带宽利用率较低时,提前将热门视频预取到缓存中。
- 原理:大多数用户倾向于观看热门内容,提前将这些视频缓存,当新用户请求时可以直接从缓存获取,减少冷启动延迟。
- 基于用户画像预取:
- 设计:收集用户的观看历史、点赞、评论等数据,构建用户画像。根据新用户与已有用户画像的相似度,预取相似用户观看过的视频到缓存。
- 原理:相似用户的兴趣点相近,预取相似用户喜欢的视频,提高新用户请求视频在缓存中的命中率,降低冷启动延迟。
缓存更新机制
- 写后更新:
- 设计:当视频源数据发生变化时,先更新数据库,然后异步更新缓存。可以使用消息队列(如 Kafka)来解耦更新操作,确保数据一致性。
- 原理:写操作直接作用于数据库,保证数据持久化,然后通过异步任务更新缓存,减少对业务操作的影响,提高系统响应速度。
- 失效策略:
- 设计:为缓存数据设置合理的过期时间。对于热门视频可以设置较长的过期时间,而对于冷门视频设置较短的过期时间。同时可以结合惰性删除和定期删除策略来清理过期数据。
- 原理:确保缓存数据的时效性,避免使用过期数据,同时通过合理设置过期时间和删除策略,平衡缓存空间利用和数据一致性。