写点什么

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

用户头像
Todd-Lee
关注
发布于: 2020 年 11 月 21 日

作业一:

(至少完成一个)

  • 请简述 JVM 垃圾回收原理。

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


请简述 JVM 垃圾回收原理。

简单来说,JVM 通过可达性算法扫描不再使用的对象,然后通过一些手段清理掉这些对象,就是在垃圾回收.

具体来说,从线程栈帧局部变量,方法区的静态变量出发,深度遍历所有关联的引用对象,进行标记,标记的对象均为使用对象,标记结束后,未被标记的对象就是垃圾对象.主要的手段:

  1. 清理,直接标记为空闲区域,下次申请空间的时候,找到这些空闲内存分配.虽然快,但是会造成不连续,降低程序执行效率,甚至没有空间可以用.

  2. 压缩,从堆空间的头部开始,把目前存活的对象拷贝到连续空间中,其余空间为空闲.但是这样系统暂停的时间比较长

  3. 复制.将堆分为两部分,只在其中一部分创建,满了后放到另一端.会有空间浪费.


实际使用的分代垃圾回收,空间分为, 新生代(伊甸区,From,To),老年代,就是利用复制思路.


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

秒杀系统的挑战就是会面临高并发,比平时流量高数倍甚至百倍的并发流量进入.

在高并发的时候,对系统的性能压力极高.

硬件方面的问题:带宽,应用服务器,数据库服务器,内存资源是否满足.

软件方面的问题:系统在高并发状态的下的稳定性和性能.

还有是防止机器人上,需要使用算法或者一些防作弊手段,甚至是流量识别手段来甄别真实的用户和机器人流量.


核心的架构方案,主要有:

  1. 使用 CDN 等缓存技术,降低服务器压力.将绝大多数静态资源放在 CDN 上.

  2. 使用消息队列,异步编程等技术手段提升吞吐量

  3. 拆分应用,微服务化系统,分割业务

  4. 将不重要业务临时下线或者降级,防止拖垮其他业务,集中力量到当前业务

  5. 隐藏真实下单流程和页面地址,订单提交地址等.防止作弊.

  6. 考虑新建系统而不是在原有系统上进行

  7. 此时可以考虑使用更简单的流程.

  8. 可以隔离流量,防止拖垮主站.

  9. 阀门设计,逐步筛选流量,从 CDN 进入就开始筛选流量,甚至采用"抽奖"思路,将进入后续页面的流量逐级减少,降低后续复杂业务的处理流量.

用户头像

Todd-Lee

关注

还未添加个人签名 2017.10.17 加入

还未添加个人简介

评论

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