架构师训练营 - 作业 - 第九周

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

1. 请简述 JVM 垃圾回收原理。

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



JVM 通过一种可达性分析算法进行垃圾对象的识别并标记,它对线程栈中的局部变量或者静态变量出发,将这些变量引用的对象做标记,然后看这些被标记的对象是否引用了其他对象,继续进行标记,所有被标记过的对象都是被使用的对象,而那些没有被标记的对象就是可回收的垃圾对象了。



回收主要有三种方法:

  • 清理

  • 将原来垃圾对象内存空间标记为空闲。

  • 压缩

  • 从堆空间头部开始,将存活的对象拷贝到一段连续的内存空间中。

  • 复制

  • 将堆空间分成两部分,当一部分用完时,将标记过的对象复制到另一个空间中。



分代回收:将堆分为新生代、老年代。新生代又分为 Eden 区、Survivors(From 区、To 区)。

  • 新生代

  • Eden

  • Survivors

  • From

  • To

  • 老年代

新创建的对象一开始处于新生代区中,当新生代区满时,将存活的对象复制到 From 区,等到下次新生代再次满时,新生代和 From 区中的存活对象会被一起复制到 To 区。如果一个对象经过多轮的 From 区和To 区之间的复制后仍然存活,那么它会被复制到老年代。新生代的空间远小于老年代,空间小在垃圾回收时效率更高。



JVM 会记录 Survivor 区中的对象一共被来回复制了几次。如果一个对象被复制的次数达到一个值(对应虚拟机参数 -XX:+MaxTenuringThreshold),该对象会被promo 至老年代。如果带个 Survivor 区被占用 50%(对应虚拟机参数 -XX:TargetSurvivorRatio),较高复制次数的对象也会被 promo 至老年代。



回收算法:

  • 串行回收器

  • 并行回收器

  • 并发回收器 CMS

  • G1 回收器

在回收过程中会产生 stop-the-world 现象。

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

主要挑战
  • 高并发下保证系统可用性

  • 秒杀商品页面浏览/更新高可用

  • 秒杀按钮/功能高可用

  • 防黑客攻击/秒杀器

  • 下单/支付功能高可用

高并发下主要问题
  • 网络带宽耗尽

  • 运营推广页面弹出1兆大图片导致贷款耗尽

  • 服务器 Load 飙高,停止响应,服务器崩溃

  • 数据库瘫痪

  • 秒杀器抢单

核心的架构方案或者思路
  • 带宽准备

  • 限制每个商品的图片大小

  • 每件商品图片大小 = 总带宽 / 单件商品并发 * 8

  • 总并发 = 商品数 × 每件商品的并发

  • 租用 CDN

  • 静态数据缓存到离用户最近的地方

  • 秒杀商品页面的设计优化

  • 静态化

  • 采用 JS 自动更新技术将动态页面转化为静态页面

  • 静态页面缓存到用户最近的 CDN 上,防止用户不断刷新页面

  • 图片合并,CSS 偏移展示,使得一次 http 请求就能获得。

  • 减少发送 cookies 的量

  • HTML 内容压缩

  • CSS, JS 精简

  • 秒杀计时器的设计

  • js 每秒定时生成商品列表,判断秒杀开始与否

  • 秒杀器的预防

  • 秒杀 Detail 页面

  • URL 随机,秒杀前2秒放出,1000次访问上限控制【每件商品只能放入1000人浏览】。

  • 下单页面

  • 订单 ID 随机

  • 不能直接跳过秒杀 Detail 页面进入

  • 每个秒杀商品,带预先生成的随机 Token 作 URL 参数

  • 如果秒杀过,直接跳到秒杀结束页面

  • 1000 次访问上限控制,【每件商品只能放入1000人浏览】。

  • 简化流程

  • 砍掉不必要的分支流程

  • 前端优化

  • 提升页面响应速度

  • 限流 —— 设置阀门

  • 只放最前面的一部人进入系统

  • 降级

  • 把一些不重要的功能暂时关闭,如:商品评论、资讯、论坛、博客等

  • 保住首页,Offer Detail, 旺铺页面等核心应用的可用性。

  • 紧急预案

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

  • 机动服务器

  • 万能出错页面:秒杀活动已结束

  • 任何出错都 302 跳转到此页面

  • 位于另外集群

参考连接

https://xie.infoq.cn/article/d000de5b600f0b2bf17af7282

https://xie.infoq.cn/article/2b3520aaf9a9a67748ed63072

https://xie.infoq.cn/article/c3185d0e17e81d2cf33df41b2

https://xie.infoq.cn/article/44f9eea92767032994da7a034

https://xie.infoq.cn/article/457f0f8a64fb0a8b056c7302a



用户头像

心在飞

关注

还未添加个人签名 2017.10.15 加入

2个女儿的爸爸 | 程序员 | CS 反恐精英

评论

发布
暂无评论
架构师训练营 - 作业 - 第九周