架构师训练营第九周作业
请简述 JVM 垃圾回收原理。
设计一个秒杀系统,主要的挑战和问题有哪些?核心的架构方案或者思路有哪些?
1.JVM垃圾回收原理
1.1 如何知道哪些对象要回收
java 采用可达性分析算法识别哪些对象需要回收,从对象的根出发(线程栈中的局部变量和方法区的静态变量)向下搜索引用的对象,标记引用的对象,引用的对象再标记引用其它的对象,以此类推,直到标记完所有的对象,哪些未被标记的对象就是可回收的对象,可达的对象就是引用的对象。
1.2 如何回收
清理:JVM将垃圾对象的占用的空间标记为空闲,记录在到一个空闲的列表中,当需要创建对象的时候,从空闲的地址列表中分配一个地址空间创建对象。
压缩:从堆的头部开始将存活的对象放在连续的地址空间中,那么剩余的空间就是连续空闲的地址空间。
复制:将堆的空间分成两个部分,其中一个空间用于创建对象,当对象创建满时,将标记过可用的对象复制到另外一个空间中。
1. 3 回收过程中的空间如何管理
分代回收
新生代:初始对象通常在新生代创建,绝大多数对象会在新生代被回收释放。如果在新生代还没被回收的对象,也就是还在引用的对象,就会放在老年代。新生代的垃圾回收是Minor GC
老年代:旧生代与新生代不同,对象存活的时间比较长,比较稳定,老年代的对象回收是 Full GC
永久代:指内存的永久保存区域,主要存放Class和Meta(元数据)的信息。
1.4 用什么样的过程进行回收
1.串行回收器 stop the word ,垃圾回收的时候所有的jvm所有的工作都停止。
2.并行回收器
3.并发回收器CMS
4.G1回收器
2.秒杀
2.1主要挑战
网络带宽耗尽
服务器Load飙高, 停止响应。
数据库瘫痪
秒杀器问题
2.2主要思路
2.2.1 服务器准备(距秒杀开始仅五天时间来不及采购)
style服务器(Lighttpd集群) : 5台
图片服务器(Nginx集群) : 5台
静态服务器( Apache集群) 10台
交易服务器(JBoss动态集群) : 10台
2.2.2 带宽准备
图片出口带宽上限: 2.5G (出口带宽支持 10G,但图片服务器集群的处理能力:图片服务集群最大并发处理能力X网站平均图片大小=2.5G )
CDN准备:
1.图片网络带宽: 1.0G
新增图片带宽:必须控制在1.0G左右
每件商品秒杀页面的图片总大小不得超过: 1000000/(1000*8) = 125K/每商品2.网站并发:
单件商品并发: 1000 【来自运营 的预估】
总并发:8(件商品)X1000(人/商品)=8000
2.2.3秒杀系统:组成
简单系统:
三个页面组成:秒杀商品列表,秒杀商品介绍, 下单
2.2.4 静态化
采用JS自动更新技术将动态页面转化为静态页面
并发控制,防秒杀器
设置阀门,只放最前面的一部分人进入秒杀系统
简化流程
砍掉不重要的分支流程,如下单页面的所有数据库查询
· 以下单成功作为秒杀成功标志。支付流程只要在1天内完成即可。前端优化
采用YSL .OW原则提升页面响应速度
2.2.5秒杀器的预防
秒杀Detail页面
URL:随机
秒杀前2秒放出,脚本生成,秒杀前。
1000次访问上限控制【每件商品只能放入1000人浏览】
下单页面:
订单ID,随机。
不能直接跳过秒杀Detail 页面进入。
每个秒杀商品,带预先生成的随机Token 作URL参数。
如果秒杀过,直接跳到秒杀结束页面。
100次访问,上限控制【每件商品只能放入1000人下单】。
2.2.6 Web Server 调优
2.2.7 秒杀静态页面优化
图片合并
8张图片合并成1张,CSS偏移展示。· 减少HTTP请求数,减少请求等待数。减少发送Cookies的量。
HTML内容压缩
图片压缩:图片Bytes ,长X宽/2250
HTML Header Cache Control设置
CSS, JS精简
CSS, JS精简到极致,部分直接写在页面中,减少HTTP请求次数。
2.2.8下单页面优化
数据库操作:全部砍掉
原下单页面要访问8次数据库,全部砍掉。
秒杀流程精简
砍掉填写或选择收货地址,放在秒杀成功后填写。
砍掉调用是否开通支付接口,秒杀首页文案提示必须开通。
采用内存缓存
秒杀Offer数据,支付相关信息,缓存。
2.2.9交易系统性能优化
交易系统调优目标:
关闭KeepAlive (分析交易系统accesslog,用户在短时间内连续点击概率很低)JVM优化
优化CMS垃圾回收器的参数
消灭Top10 Bottlenecks
➢Velocity参数调优
➢采用DBCP1.4替换C3P0
Offer产品参数的XML解析
2.2.10二跳页面的优化
XXXX.com其他页面
前端优化: Yslow 规则调优
➢减少HTTP请求,合并JS, CSS,图片,充分利用浏览器缓存。图片压缩,公式:
避免发送Cookies
交易系统优化
普通订单管理列表和XXXX秒批订单管理列表分离
禁止用模糊查询功能
2.2.11 应急预案
域名分离,独立域名,不影响XXXX原有业务。
Style集群: style.XXXX.china. XXXX.com
图片服务器集群: img.XXXX.china.XXXX.com
静态页面集群: page.XXXX.china.XXXX.com
出问题直接把XXXX相关域名卡掉,所有请求跳到万能出错页面。
机动服务器10台,备用。
拆东墙补西墙战略
5天时间来不及采购服务器,因此SA待命,随时准备将非核心应用集群的冗余服务器下线,加入到秒杀集群。
壁虎断尾策略
所有办法均失效的情况下,例如流量耗尽。
非核心应用集群统统停止服务,如资讯,论坛,博客等社区系统。
保住首页,OfferDetail,旺铺页面等核心应用的可用性。
万能出错页面:秒杀活动已经结束
任何出错都302跳转到此页面
版权声明: 本文为 InfoQ 作者【涛】的原创文章。
原文链接:【http://xie.infoq.cn/article/af265ac04a57e4e29237f8eab】。文章转载请联系作者。
评论