在前文中提到,接入线上流量后,老年代的内存增长较快,因此我们推测在服务启动初期,由于尚未加载相关的缓存数据,当大量请求涌入时,未命中缓存的情况频繁发生,这迫使系统不断向下游请求以加载缓存,从而导致接口响应变慢。为此,我们需要验证预热缓存的有效性,以确定是否能够改善这一问题。
缓存预热的主要作用和目的如下:
提高缓存命中率:通过预先加载热点数据,能够显著提升缓存的命中率,从而减少对后端数据源(如数据库)的访问,降低系统负载。
保持服务性能稳定:在服务启动或缓存失效之后,缓存预热可以有效防止请求对后端数据源施加突发压力,从而确保服务性能的稳定性。
优化用户体验:由于热点数据已被预先加载到缓存中,用户在请求这些数据时能够获得更快的响应速度,从而显著提升用户体验。
方案如下:
我们将梳理本地缓存信息,根据访问量和缓存大小区分数据的重要程度,定期将重要的缓存信息刷新至 Redis 中。在服务启动后,未接入线上流量之前,我们将优先从 Redis 中进行数据的预加载。通过这一措施,确保系统在高流量环境下的稳定性和性能。
实验结果显示,增加缓存预热后,问题并未得到有效解决,表现差异微乎其微。
仅仅预热重要缓存无法解决当前问题。系统在启动时需要预热的内容相对较多,同时各类中间件也有自身的缓存需要预热。因此仅预热业务自定义的内存缓存,效果非常有限。
回顾之前的原因分析,我们仅仅关注了表面现象,如 CPU 的上涨和线程数的增加,而未深入挖掘问题的本质。我们需要探讨线程数为何上升、CPU 为何飙升,接下来将进行更深入的分析,以找出问题的根本原因。