week9- 作业一
一、请简述 JVM 垃圾回收原理。
1、定义:JVM垃圾回收就是将JVM堆中的已经不再被使用的对象清理掉,释放宝贵的内存资源。
2、垃圾识别方法:通过一种可达性分析算法进行垃圾对象的识别,具体过程是:从线程栈帧中的局部变量,或者是方法区的静态变量会促发,将这些变量引用的对象进行标记,然后看这些被标记的对象是否引用了其他对象,继续进行标记,所有被标记过的对象都是被使用的对象,而那些没有被标记的对象就是可回收的垃圾对象了。
3、回收方法:
3.1、清理:将垃圾对象占据的内存清理掉,其实JVM并不会真的将这些垃圾内存进行清理,而是将这些垃圾对象占用的内存空间标记为空闲,记录在一个空闲列表里,当应用程序需要创建新对象的时候,就从空闲列表中找一段空闲内存分配给这个新对象。
3.2、压缩:从堆空间的头部开始,将存活的对象拷贝放在一段连续的内存空间中,那么其余的空间就是连续的空闲空间;
3.3、复制:将堆空间分成两部分,只在其中一部分创建对象,当这个部分空间用完的时候,将标记过的可用对象复制到另一个空间中。
4、JVM实际实现-分代垃圾回收:
4.1、新生代
4.1.1、Eden区-复制算法
4.1.2、From区
4.1.3、To区
4.2、老年代
5、JVM垃圾回收器算法
5.1、串行回收器
5.2、并行回收器
5.3、·并发回收器CMS
5.4、G1回收器
二、设计一个秒杀系统,主要的挑战和问题有哪些?核心的架构方案或者思路有哪些?
1、商业需求:
1.1、为庆祝 ****.com开业退出88小时不间断秒杀活动;
1.2、每小时推出8款商品....
1.3、每款商品供168件,每人限批3件,成交人数56人。
1.4、CCTV黄金广告时间,各种网络,平面媒体轰炸,总广告费:1.5亿。
1.5、接到运营通知,距秒杀开始仅仅5天时间。
2、技术挑战:
2.1、瞬间高并发
2.1.1、8000并发:预估秒杀在线人数可达8000人。
2.1.2、风险:带宽耗尽。
2.1.3、服务器:崩溃,可以理解成自己给自己准备的D.D.O.S攻击。
2.2、秒杀器
2.2.1、第一种:秒杀前不断刷新秒杀页面,直接秒杀开始,抢着下单
2.2.2、第二种:跳过秒杀页面,直接进入下单页面,下单。
3、解决方案:
3.1、服务器准备(距秒杀开始仅五天时间来不及采购)
3.1.1、style服务器(Lighttpd):5台
3.1.2、图片服务器(Nginx集群):5台
3.1.3、静态服务器(Apache集群):10台
3.1.4、交易服务器(JBoss动态集群):10台
3.2、带宽准备
3.2.1、图片出口带宽上限:2.5G(出口带宽支持10G,但图片服务器集群的处理能力:图片服务集群最大并发处理能力X网站平均图片大小=2.5G)
3.2.2、CDN准备:Chinacache沟通;借用CCCC CDN
3.3、图片网络带宽:1.0G-架构目标
3.3.1、新增图片带宽:必须控制在1.0G左右
3.3.2、每件商品秒杀页面的图片总大小不得超过:1000000/(1000 * 8) = 125K/每商品
3.4、网站并发:
3.4.1、单件商品并发:1000【来自运营的预估】
3.4.2、总并发:8(件商品) * 1000(人/商品) = 8000;
3.5、秒杀系统-组成
三个页面组成:秒杀商品列表、秒杀商品介绍、下单
3.6、设计原则
3.6.1、静态化:采用JS自动化更新技术将动态页面转化成静态页面;
秒杀商品list和Detail是静态HTML页面
3.6.2、并发控制,防秒杀器:设置阀门,只放最前面的一部分人进入秒杀系统;
3.6.2.1、阀门:基于TT的计数器;限制进入秒杀页面(1000);限制进入下单页面(100);限制进入支付系统(56);
3.6.2.2、秒杀Detail页面:URL随机;秒杀前2秒放出,脚本生成,秒杀前;1000次访问上限控制[每件商品只放入1000人浏览]
3.6.2.3、下单页面:订单ID,随机;不能直接跳过Detail页面进入。每个秒杀商品,带预先生成的随机Toke作URL参数;如果秒杀过,直接跳到秒杀结束页面;100次访问上限控制【每件商品只能做放入1000人下单】
3.6.3、简化流程:
3.6.3.1、砍掉不重要的分支流程,如下单页面的所有数据库查询;
数据库操作:全部砍掉,原下单页面要访问8次数据库,全部砍掉;
秒杀流程精简-砍掉填写或者选择收货地址,放在秒杀成功后填写;砍掉调用是否开通支付接口,秒杀首页文案提示必须开通。
采用内存缓存-秒杀Offer数据,支付相关信息,缓存。
3.6.3.2、以下单成功作为成功标记。支付流程只要在1天内完成即可。
3.6.4、前端优化:采用YSLOW原则提升页面响应速度。
3.6.4.1、图片合并:8张图片合并1张,CSS偏移展示;减少HTTP请求数,减少请求等待数;减少发送Cookies的量;
3.6.4.2、HTML内容压缩:图片压缩:图片Bytes < 长 * 宽/2250;HTML Header Cache-Control设置;CSS、JS精简,部分直接写在页面中,减少HTTP请求次数;
评论