架构师训练营第九周作业
作业一:
(至少完成一个)
请简述 JVM 垃圾回收原理。
JVM 垃圾回收就是将 JVM 堆中的已经不再被使用的对象清理掉,释放宝贵的内存资源。JVM 使用可达性分析算法来侦测哪些对象程序需要进行回收。基本算法为:从线程栈帧中的局部变量,或者是方法区的静态变量出发,将这些变量引用的对象进行标记,然后看这些被标记的对象是否引用了其他对象,继续进行标记,所有被标记过的对象都是被使用的对象,而那些没有被标记的对象就是可回收的垃圾对象了。垃圾回收一般使用分代回收策略,将堆空间分为新生代和老年代,新生代存储那些近期生成的对象,当对象在新生代经过多次回收仍然存在(操过一个阀值),就将这些对象搬运到老年代。垃圾回收一般在新生代进行平凡回收操作,只有满足特定条件才会在老年代进行回收操作(比如新生代回收得不到足够的内存)。新生代一般分为 Eden 区,From 区和 To 区。新内存都在 Eden 区分配,回收时把 Eden 区还在使用的对象拷贝到 From/To 区,如果 From/To 区拷贝不下,就把 Eden 区和 From/To 区还在使用的对象一起拷贝到 To/From 区。
设计一个秒杀系统,主要的挑战和问题有哪些?核心的架构方案或者思路有哪些?
主要挑战和问题:
1)高并发带来的风险:网络带宽耗尽,服务器 load 飙升,停止响应,数据库瘫痪。
2)图片,广告在高并发下耗尽网络带宽。
3)第三方秒杀器显著放大并发量。
4)可能存在漏洞,导致用户跳过秒杀页面直接下单。
核心的架构方案或者思路:
1)独立秒杀系统,和原系统隔离
2)简化秒杀系统页面,减少甚至避免实时数据库访问。
3)页面静态化,适合缓存。
4)CDN, 反向代理缓存。
5)截流器,超过一定访问数目,拒绝后面的访问请求。
作业二:
根据当周学习情况,完成一篇学习总结
评论