面试题答案
一键面试可能遇到的一致性问题场景
- 网络延迟:不同微服务实例所在网络环境不同,配置更新消息可能因网络延迟,导致部分实例接收配置更新时间有差异,出现配置不一致。
- 配置中心故障:配置中心自身出现故障,如服务器宕机、数据丢失等,导致部分微服务实例无法获取最新配置或获取到错误配置。
- 实例重启或新增:新启动的微服务实例或新增的实例,在启动过程中获取配置可能与已运行实例获取到的最新配置存在时间差,导致配置不一致。
- 缓存问题:若微服务实例使用缓存存储配置,缓存更新不及时,新配置已发布但实例仍从缓存读取旧配置,造成配置不一致。
对应的解决方案
- 使用可靠的消息队列:在配置中心和微服务实例间引入消息队列(如 Kafka、RabbitMQ 等)。配置中心发布配置更新消息到消息队列,微服务实例从消息队列订阅消息。消息队列保证消息顺序性和可靠性,降低网络延迟影响,确保各实例按顺序接收配置更新。
- 配置中心高可用:采用多节点部署配置中心,如使用分布式一致性协议(如 Raft、Paxos)保证配置数据在多节点间一致性。同时,定期备份配置数据,出现故障时快速恢复,保障微服务实例能获取到正确配置。
- 启动时强制拉取最新配置:微服务实例启动时,主动从配置中心拉取最新配置,并记录配置版本号。运行过程中,通过定期检查或监听配置中心事件,若发现版本号变化,重新拉取配置,保证新启动或新增实例与已运行实例配置一致。
- 缓存更新策略优化:采用合理缓存更新策略,如配置发生变化时,先更新配置中心数据,同时通知微服务实例清除缓存。或者设置较短缓存过期时间,让缓存定期失效,微服务实例自动从配置中心获取最新配置。