写点什么

Week9 命题作业(JVM 垃圾回收原理、秒杀系统)

用户头像
星河寒水
关注
发布于: 2020 年 08 月 02 日
Week9命题作业(JVM垃圾回收原理、秒杀系统)

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

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

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

进行完标记以后,JVM 就会对垃圾对象占用的内存进行回收,回收主要有三种方法

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

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

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


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

  • 主要挑战

  • 对现有网站业务造成冲击

  • 秒杀活动只是网站营销的一个附加活动,这个活动具有时间短,并发访问量大的特点,如果和网站原有应用部署在一起,必然会对现有业务造成冲击,稍有不慎可能导致整个网站瘫痪。

  • 高并发下的应用、数据库负载

  • 用户在秒杀开始前,通过不停刷新浏览器页面以保证不会错过秒杀,这些请求如果按照一般的网站应用架构,访问应用服务器、连接数据库,会对应用服务器和数据库服务器造成极大的负载压力。

  • 突然增加的网络及服务器带宽

  • 假设商品页面大小 200K(主要是商品图片大小),那么需要的网络和服务器带宽是 2G( 200K× 10,000),这些网络带宽是因为秒杀活动新增的,超过网站平时使用的带宽。

  • 直接下单

  • 秒杀的游戏规则是到了秒杀时间才能开始对商品下单购买,在此时间点之前,只能浏览商品信息,不能下单。而下单页面也是一个普通的 URL,如果得到这个 URL,不用等到秒杀开始就可以下单了。

  • 应对策略

  • 秒杀系统独立部署

  • 为了避免因为秒杀活动的高并发访问而拖垮整个网站,使整个网站不必面对蜂拥而来的用户访问,可将秒杀系统独立部署;如果需要,还可以使用独立的域名,使其与网站完全隔离,即使秒杀系统崩溃了,也不会对网站造成任何影响。

  • 秒杀商品页面静态化

  • 重新设计秒杀商品页面,不使用网站原来的商品详情页面,页面内容静态化:将商品描述、商品参数、成交记录和用户评价全部写入一个静态页面,用户请求不需要经过应用服务器的业务逻辑处理,也不需要访问数据库。所以秒杀商品服务不需要部署动态的 Web 服务器和数据库服务器。

  • 租借秒杀活动网络带宽

  • 因为秒杀新增的网络带宽,必须和运营商重新购买或者租借。为了减轻网站服务器的压力,需要将秒杀商品页面缓存在 CDN,同样需要和 CDN 服务商临时租借新增的出口带宽。

  • 动态生成随机下单页面 URL

  • 为了避免用户直接访问下单页面 URL,需要将该 URL 动态化,即使秒杀系统的开发者也无法在秒杀开始前访问下单页面的 URL。 办法是在下单页面 URL 加入由服务器端生成的随机数作为参数,在秒杀开始的时候才能得到。

参考 《大型网站技术架构 核心原理与案例分析》


用户头像

星河寒水

关注

还未添加个人签名 2018.09.17 加入

还未添加个人简介

评论

发布
暂无评论
Week9命题作业(JVM垃圾回收原理、秒杀系统)