生产环境秒杀接口并发量井喷,你该怎么办?
昨天有位小伙伴被面试官问到这样一个问题,说生产环境秒杀接口并发量井喷剧增,负载过高,快扛不住了,你该怎么办?你的第一反应会采取什么方案来解决?理由又是什么?
接下来,那我来分享一下我的方案。
1、解决方案
限流,先保证自己不挂;
临时动态扩容,加服务器;
分析具体原因,比如是线程池不足还是内存,GC等问题,判断是否可以做优化,比如通过异步队列,加缓存,优化数据库,无法优化的情况下,有成本考虑重构,比如做DB水平拆分,应用的垂直拆分等等,最后加成本,加机器。
遇到这样的问题,我的第一反应就是增加缓存。因为,增加缓存是解决系统性能问题最快速、最高效的方案,它能够快速提升系统的线性吞吐量,效果也最为明显。这就相当于是用空间来换时间。曾经还有人说过,缓存就是解决性能问题的万金油,哪里存在性能瓶颈就往哪里加缓存。
2
、选择理由
其实,缓存的设计思想在架构设计中是非常常见的。比如我们每天用的OS操作系统,不管是Windows还是Linux包括Mac OS都有系统缓存、用户缓存。磁盘也有磁盘缓存区、CPU有CPU有缓存区。再比如,我们常用的经典框架中,也有经常使用到缓存,Spring有IoC缓存,MyBatis有一级缓存、二级缓存。在架构设计中,可以说缓存是无处不在。
3、总结
最后,总结一下。当我们并发量过高杠不住的时候,可以优先采用缓存来缓解负载压力。比如将读取频繁的数据写到缓存中,动态页面静态化。加上缓存之后,如果负载压力依然过大;再来考虑增加限流策略,比如消息队列;如果增加限流还是压力大,最后,再考虑增加服务器节点。
好了,以上就是我对这个问题的理解。那么如果你遇到接口并发过高扛不住的时候,你的首选方案是什么呢?小伙伴们可以分享到到评论区供大家学习一下。