「架构师训练营」作业:第 9 周

用户头像
Amy
关注
发布于: 2020 年 08 月 03 日



请简述 JVM 垃圾回收原理。



JVM 垃圾回收就是将 JVM 堆中的已经不再被使用的对象清理掉,释放宝贵的内存资源。



JVM 通过一种可达性分析算法进行垃圾对象的识别:

  1. 从现场栈帧中的局部变量,或者是方法区的静态变量出发,将这些变量引用的对象进行标记

  2. 然后看这些被标记的对象是否引用了其他对象,继续进行标记

  3. 所有被标记过的对象都是被使用的对象,而那些没有被标记的对象就是可回收的垃圾对象了。



JVM的垃圾回收方法有三种,分别是

清理:将垃圾对象占据的内存清理掉

压缩:从堆空间的头部开始,将存活的对象拷贝放在一段连续的内存空间中,那么其余的空间就是连续的空闲空间。

复制:将堆空间分成两部分,只在其中一部分创建对象,当这个部分空间用完的时候,将标记过的可用对象复制到另一个空间中。



在分代回收算法中,会根据对象的存活周期,将内存划分为几块,一般是新生代(Young Generation)、老年代(Old Generation)、永久代(Permanent Generation)。这样就可以根据不同内存区域的特点执行采用不同的回收算法。



JVM 垃圾回收算法的发展经历了这 4 个阶段:串行回收器、并行回收器、并发回收器 CMS、G1回收器。



设计一个秒杀系统,主要的挑战和问题有哪些?核心的架构方案或者思路有哪些?



秒杀是将少量商品(通常只有一件)以极低的价格,在特定的时间点开始销售的一种营销活动。



高并发情况下,秒杀系统将会遇到以下问题:

网络带宽耗尽

服务器 Load 飙高,停止响应

数据库瘫痪



一个秒杀系统 一般由秒杀商品列表、秒杀商品介绍、下单页面组成。设计秒杀系统建议遵循以下原则:

  • 静态化

采用 JS 自动更新技术将动态页面转化为静态页面,秒杀商品 list 和 Detail 是静态 HTML 页面。



  • 并发控制,防秒杀器

设置阀门,只放最前面的一部分人进入秒杀系统。



  • 简化流程

砍掉不重要的分支流程,入下单页面的所有数据库查询。以下单成功作为秒杀成功标志。支付流程只要在 1 天内完成即可。



  • 前端优化

采用 YSLOW 原则提升页面响应速度



除了以上设计原则外,还要准备应急预案:

  • 域名分离,独立域名,不影响原有业务

  • 机动服务器备用

  • 拆东墙不西墙战略,下线非核心应用集群的冗余服务器,加入到秒杀集群

  • 壁虎断尾策略,所有办法均失效的情况下,非核心应用集群统统停止服务,保证核心应用的可用性。

  • 万能出错页面:秒杀活动已结束,任何出错都 302 跳转到此页面。



用户头像

Amy

关注

还未添加个人签名 2018.06.10 加入

还未添加个人简介

评论

发布
暂无评论
「架构师训练营」作业:第 9 周