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

用户头像
旭东(Frank)
关注
发布于: 2020 年 08 月 03 日
「架构师训练营」第九周作业



作业一:



答案

简述 JVM 垃圾回收原理

JJVM通过一种可达性分析算法进行垃圾对象的识别,具体过程:

线程栈帧中的局部变量,或者方法区的静态变量出发,将这些变量引用的对象进行标记(存活的)。

然后看这些被标记的对象是否引用了其他对象,继续进行标记。继续标记已被标记对象所有引用的对象

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

1. 从线程栈帧中的局部变量,或者方法区的静态变量出发,将这些变量引用的对象进行标记(存活的)。

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

3. 所有标记过的对象都是被使用的对象,而那些没有被标记的对象就是被可回收的对象。 标记完成后,JVM会对垃圾(可回收)对象占用的内存进行回收,回收的三种方法:

4. 清理:将对象占据的内存清理掉,其实JVM并不会真的将这些内存清理,而是将这些对象占用的内存空间标记为空闲,记录在一个空闲列表里,当应用程序需要创建新对象的时候,就从空闲列表中找一点空闲内存分配个这个新对象。

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

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

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



由于秒杀是一个营销活动,是为了以最小的营销成本,获取尽可能多的用户关注度和新用户注册以及"病毒"式传播的终极营销目的。

挑战与问题:

瞬间并发

用户会在固定的某个时刻点,一起进入秒杀系统,导致秒杀系统的瞬间并发激增。从而导致系统在秒杀时制造出类似DDOS攻击的现象,即网络带宽极有可能被打爆。



秒杀操作

由于秒杀的库存有限,要做到精准把握秒杀销售量,需要对商品库存进行有效的控制,以防止多卖或者少卖,对公司造成损失。



用户体验好

毕竟是为了商业营销,客户的口碑至关重要。获得良好的口碑,是营销活动成功的标准

应对策略

瞬间并发

  1. 解决瞬间并发通用方式就是限流,多层级的限流。因为秒杀毕竟是少数人能够成功的,所以从前端页面开始就需要对真正能进入秒杀系统的用户进行限流。

  2. 解决商品详情页面,预计会有大量的网络请求,我们可以使用CDN来缓解服务器的压力。

  3. 对于进入秒杀系统的用户,也可以通过排队的方法确保系统能够应对瞬时的交易峰值,以确保订单系统能够撑得住。

  4. 砍掉与秒杀不相关的信息呈现,已减少网络的请求。

  5. 页面增加校验码,避免机器人秒杀。

秒杀操作

  1. 确保秒杀操作能够准时开始,不能让用户提前进入秒杀系统。页面需要有个刷新机制,以确保在秒杀开始之前,用户无法得知真实的秒杀地址。再者就是为了让开发运营避嫌,秒杀的URL应该使用动态随机的URL.

  2. 确保秒杀开始的时间必须是服务器的时间,而不是客户端系统的时间。这样客户端就需要让服务器去判断秒杀是否开始,而不是客户端自己说了算。数据的校验有服务器说了算。

  3. 对于库存不能超卖也不能少卖的情况,建单的办法可以使用MQ+MySQL来解决,如果商品数较多,可以考虑Redis做库存缓存的方式,提高扣减库存的性能。



用户体验好

  1. 提高页面响应。



发布于: 2020 年 08 月 03 日 阅读数: 22
用户头像

旭东(Frank)

关注

世事洞明皆学问,日思一刻,日拱一卒。 2011.04.01 加入

微信公众号:ThinkingInDev,记录工作过程中点滴思考。这里有坑,有料,有思,有想的开发工作日记

评论

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