面试题答案
一键面试缓存架构选型
- 分布式缓存:选用 Redis 作为缓存系统。它具有高性能、支持多种数据结构(如 String、Hash、List 等),非常适合电商场景中存储商品信息、用户积分等数据。其分布式特性可通过集群模式(如 Redis Cluster)实现,能有效应对大量数据存储和高并发访问。
- 本地缓存:在应用服务器端结合 Caffeine 等本地缓存库。对于一些访问频率极高且数据变动不频繁的数据(如商品分类信息),可在本地缓存中存储,减少对分布式缓存的访问压力,提高响应速度。
数据一致性保证
- 读写策略
- 写后失效:在订单创建、支付、退款等操作成功后,立即失效相关的缓存数据。例如,订单支付成功后,删除与该订单相关的缓存(如订单详情缓存、用户未支付订单列表缓存等)。下次读取时从数据库加载最新数据并重新缓存。
- 读写锁:对于涉及库存扣减、积分计算等关键且可能并发访问的数据,使用读写锁。写操作(如库存扣减)加写锁,读操作加读锁,确保在写操作时没有读操作干扰,写操作完成后更新缓存数据。
- 缓存更新与数据库事务:在执行订单相关的数据库事务时,将缓存更新操作纳入事务中(通过一些分布式事务框架如 Seata)。确保数据库操作和缓存更新要么都成功,要么都失败,保证数据一致性。
故障恢复策略
- 缓存集群故障
- 主从复制:Redis 采用主从复制架构,主节点负责写操作,从节点复制主节点数据。当主节点故障时,从节点可自动或手动提升为主节点继续提供服务。
- 持久化:配置 Redis 的 RDB 和 AOF 持久化机制。RDB 可以定期对数据进行快照备份,AOF 则以日志形式记录每一个写操作。在 Redis 重启时,可根据 RDB 文件快速恢复数据,再结合 AOF 日志进行增量恢复,确保数据的完整性。
- 函数计算故障
- 重试机制:对于函数计算中因网络波动等临时性故障导致的失败,设置自动重试机制。例如,在订单支付时调用积分计算函数失败,可在一定时间间隔后重试若干次。
- 监控与报警:搭建监控系统(如 Prometheus + Grafana),实时监控函数计算的调用成功率、响应时间等指标。当出现故障时,及时通过邮件、短信等方式通知运维人员进行处理。
应对业务流量突发增长
- 缓存优化
- 缓存预热:在业务高峰来临前,提前将热门商品信息、常用配置等数据加载到缓存中,避免高峰期间大量缓存穿透导致数据库压力增大。
- 缓存分片:对缓存数据进行合理分片,将不同类型的数据分布在不同的 Redis 节点上,提高缓存的并发处理能力。
- 函数计算扩展
- 自动伸缩:基于云平台的函数计算服务(如 AWS Lambda、阿里云函数计算等),开启自动伸缩功能。根据业务流量实时调整函数计算实例数量,确保在流量高峰时能及时处理请求,在流量低谷时减少资源浪费。
- 异步处理:将一些非关键的业务逻辑(如订单支付成功后的消息通知)通过消息队列(如 Kafka、RabbitMQ)异步处理,避免同步处理导致的响应延迟,提高系统整体吞吐量。