面试题答案
一键面试整体架构
- 配置中心:负责存储各类缓存数据的 TTL 配置信息,以及一致性策略等相关参数。可以使用诸如 Apollo、Nacos 等配置中心产品。它独立于业务系统,便于集中管理和动态修改配置。
- 缓存管理模块:这是框架的核心模块,负责与实际的缓存系统(如 Redis)进行交互。它接收来自业务模块的缓存读写请求,根据配置中心的配置决定如何处理缓存数据,包括设置 TTL、处理缓存更新等操作。
- 业务模块:各个微服务中涉及缓存操作的部分。它们调用缓存管理模块提供的接口来进行缓存的读写,无需关心具体的 TTL 配置和缓存策略细节。
关键模块
- 配置解析器:位于缓存管理模块内,负责从配置中心拉取配置信息,并解析成缓存管理模块可理解的内部数据结构。例如,将配置文件中关于用户信息缓存的 TTL 时间和一致性策略解析为具体的参数对象。
- 缓存操作器:同样在缓存管理模块内,封装了对缓存系统的基本操作,如设置缓存值、获取缓存值、删除缓存等。它根据配置解析器提供的配置和业务模块的请求,对缓存执行相应操作,并处理 TTL 设置。
- 一致性协调器:针对不同数据的一致性要求差异,该模块负责实现相应的一致性策略。例如,对于一致性要求高的订单缓存,在数据更新时采用同步更新缓存的策略;对于一致性要求相对较低的用户信息缓存,可以采用异步更新或者延迟更新的策略。
工作流程
- 初始化:
- 缓存管理模块启动时,配置解析器从配置中心拉取各类缓存数据的 TTL 及一致性策略等配置信息,并完成解析。
- 缓存操作器初始化与缓存系统(如 Redis)的连接。
- 缓存读取:
- 业务模块发起缓存读取请求到缓存管理模块。
- 缓存操作器根据请求的缓存类型,查找配置解析器解析后的配置信息,获取对应的 TTL 设置。
- 缓存操作器从缓存系统中获取数据,如果缓存命中,则直接返回数据给业务模块;若缓存未命中,则业务模块从数据源(如数据库)获取数据,然后缓存操作器将数据存入缓存,并设置 TTL,最后返回数据给业务模块。
- 缓存更新:
- 业务模块进行数据更新操作后,向缓存管理模块发送缓存更新请求。
- 一致性协调器根据配置信息中的一致性策略进行处理。对于同步更新策略,缓存操作器立即更新缓存数据,并重新设置 TTL;对于异步更新策略,将更新任务放入消息队列(如 Kafka),由专门的异步处理服务从队列中获取任务并更新缓存,同时设置 TTL。
- 配置动态更新:
- 配置中心的配置信息发生变化时,会主动通知缓存管理模块。
- 配置解析器重新拉取并解析配置信息,缓存管理模块根据新的配置调整后续的缓存操作策略。