缓存问题解决方案

《服务器开发技术、方法与实用解决方案》

一、缓存预热

在系统刚启动或活动刚开始时,如果缓存中没有数据,那么大量请求将直接访问数据库。如果瞬时访问流量巨大,则可能导致数据库因过载而宕机,甚至引发系统雪崩。因此需要将缓存的数据加载到缓存系统中,以减轻数据库的压力

1. 应用启动预热策略

本地缓存,在应用启动时进行缓存预热。如在Spring中实现InitializingBean接口中的afterProperitesSet方法实现

但是该策略仅适合预热本地缓存,且与应用深度耦合

2.任务调度预热策略

如果预热场景涉及的数据规模非常大,可以采用任务调度预热

使用分布式任务调度中间件定时、周期触发缓存预热数据。常用的中间件有阿里的SchedulerX、蚂蚁的AntScheduler、XXL-JOB、ElasticJob

分布式任务调度中间件的基本架构:

  • Scheduler Console:控制台。可视化集中管理平台
  • Scheduler Server:服务端,负责客户端任务的调度触发、任务执行状态的监测、集群间任务分配等
  • Scheduler Client:客户端,多个,负责具体任务执行

预热步骤

  1. 数据分片:将需要处理的数据按照一定规则划分为若干份
  2. 数据加载:根据客户端业务服务器的数量、机房属性等将分片单元拆分为若干份,指派到多台客户端业务服务器中
  3. 数据处理:客户端根据任务调度中间件下发的业务参数(id)访问数据库,并将读取的商品数据写入分布式缓存

周期调度:数据规模巨大时,无法通过一次调度完成缓存预热,可以采用周期调度,指定每个调度周期预热的数据量。为了避免在数据加载环节重复服务数据,需要对已预热过的数据打标,如更新预热时间、预热版本号等。在加载数据时,通过标记来识别、加载数据

3. 模拟请求预热策略

任务调度预热和应用启动预热都需要定制开发,对业务应用有入侵。

可以采用模拟请求预热,通过模拟用户请求来实现数据预热,如模拟调用数据查询接口。该方式对业务应用的侵入非常小

4. 缓存预热思路

  1. 分析业务场景和用户行为来圈定需要预热的数据范围
  2. 根据待预热数据的特定设计合适的预热策略
  3. 根据业务需要为不同的预热策略编排执行时间

你可能感兴趣的:(缓存)