写点什么

架构师训练营第九周作业

用户头像
zamkai
关注
发布于: 2021 年 01 月 25 日

请简述 JVM 垃圾回收原理


GC 包括以下基本步骤。

Marking

目的

找出堆中应用不再使用的对象(即垃圾)

方法

  1. 从 GC Root 对象(包括:当前栈中局部变量指向的对象;活动线程对象;静态变量;JNI 引用)出发;

  2. 遍历所有其他对象,找出所有可以由 GC Root 直接或者间接引用的对象;

  3. 剩下的对象,由于不存在一条由 GC Root 到达它们的路径,被标记为垃圾,等待回收。

Sweeping

目的

清除垃圾对象占有的空间,使这些空间可以在下次分配中被使用。

方法

在实际使用中,考虑到存在 Fragement(内存碎片),所以在清除时,往往要通过 Copy、Compact 等手段整理内存空间,减少碎片,提高内存使用效率。


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


需求:秒杀前不能点击购买

  1. 在秒杀开始前,用户不能点击购买;秒杀开始后,用户才能提交购买请求。

  2. 防止用户通过工具猜测到购买 URL,绕过限制,在秒杀开始前提交购买请求。


解决思路

  1. 前端通过访问特定的 js 文件(包含随机版本号,防止浏览器缓存),该 js 文件中包含商品 ID 列表;

  2. 秒杀开始前,系统返回空的商品 ID 列表,前端无法构造合法的购买请求,用户不能点击购买;

  3. 前端定期刷新;

  4. 秒杀开始后,系统跟新相关 js 文件内容,使其包含商品 ID 列表,前端则在获取到列表后,允许用户点击购买。

挑战:高并发

  1. 并发数比平时系统的并发能力高出几个数量级,无法在原有系统的基础上,通过简单的扩容实现需要的性能;


解决思路

  1. 另起炉灶。不是改造原有系统,而是新建新页面和服务,这样可以避免影响原有的业务。

  2. 动静分离。通过将信息展示静态化,减少秒杀过程中对服务的访问

  3. CDN 提供用户对静态资源的访问,减少对自身网络带宽资源的占用。

  4. 多级限流。基于分布式缓存实现计数器,根据计数器实现限流。在计数器达到阈值后,请求被降级,直接返回用户:秒杀已结束。

用户头像

zamkai

关注

还未添加个人签名 2018.02.24 加入

还未添加个人简介

评论

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