avalanche 原因: 某段时间缓存集中过期无效,多: redis所在机器宕机;
解决方案:
- 事前: redis高可用: 1) 主从+sentinel, 2) redis cluster, 避免全盘崩溃;
- 事中: 本地ehcache缓存+hystrix限流,避免mysql挂掉
- 事后: (多AOF): 一旦重启,自动从磁盘加载数据,快速恢复缓存数据;
这样解决的好处:
- mysql绝对不挂,因为限流QPS;
- mysql不挂 -> e.g. mysql limit: 2000, requests: 5000; 那么至少 2/5 requests可以被处理;
- 当: >= 2/5: 只要这样保证系统不死,那么用户多刷几次页面,总可以刷出来一次
为什么是 ehcache?
ehcache直接在jvm虚拟机中缓存,速度快,效率高;但是缓存共享麻烦,集群分布式应用不方便。
redis是通过socket访问到缓存服务,效率比ecache低,比数据库要快很多,处理集群和分布式缓存方便,有成熟的方案。
适用场景
- 如果是单个应用或者对缓存访问要求很高的应用,用ehcache。
- 如果是大型系统,存在缓存共享、分布式部署、缓存内容很大的,建议用redis。
因为上面现在就是缓存没有了,所以需要有一个对缓存访问要求很高都能扛得住的应用,所以是ehcache.