架构师训练营 1 期第 9 周:性能优化(三)
1. 请简述 JVM 垃圾回收原理。
概念:JVM的垃圾回收是指堆中不再使用的对象进行自动清理。
基本回收步骤:
首先是如何找到堆中不再使用的对象,目前JVM全用的对象可达性分析算法来确定对象是否可回收。
然后对可回收的对象进行清理,JVM有三种方式进行清理
标记-清除
标记-复制
标记-整理
依据JVM的堆中绝大多数对象都是“朝生夕死”的特性,JVM使用分代垃圾回收机制,对象创建后都先放入新生代,经过一定周期后还存在,就移入老年代;
因为在标记为垃圾对象的时候,会stop world,严重影响JVM正在执行的线程的效率和性能,以及多核CPU的普及,所以垃圾回收器也不断在演进和适合不同场景,支持并发的垃圾回收器如CMS GC,把堆折分成更小块的垃圾回收器如G1GC
2. 设计一个秒杀系统,主要的挑战和问题有哪些?核心的架构方案或者思路有哪些?
2.1 主要挑战争和要解决的核心问题
秒杀系统如何应对百倍甚至几百倍的并发爆增?
如何不影响旧的业务系统?
预防刷数据和自动化并发下单等安全防患。
2.2 基本思路和解决方案
单独部署,与原来系统物理隔离,下单成功后共用支付系统相关的逻辑。
资源静态化,通过CDN缓存加速,优化前端减少请示次数,节省网络资源消耗。
提升带宽,升级服务器配置。
并发控制,设置阀门,只放最前面一部分人进入秒杀系统,三道阀门。
4.1 限制进入秒杀页面
4.2 限制进入下单页面
4.3限制进入支付系统
5.减少不必要的数据库读写,后端生成静态页面。
5.1 生成的静态页面的URL随机
5.2 秒杀前2秒写入随机的URL至请求页面
5.2 订单ID随机
5.3 不能直接跳过秒杀Detail页面进
5.4 如果秒杀过,直接进入秒杀结束页面
版权声明: 本文为 InfoQ 作者【灵霄】的原创文章。
原文链接:【http://xie.infoq.cn/article/e379bdf5f55bfc149f0aa3859】。未经作者许可,禁止转载。
评论