架构训练营第 9 周作业
本周主要学习了JVM虚拟机原理,了解了JVM的组成结构和运作流程,以及JVM垃圾回收机制,从整体上相对完备地了解了JVM,了解了Java程序的运作机理。
另外老师针对秒杀这一业务场景从业务特点到面临的挑战再到解决的思路做了全面的讲解,通过该案例的学习让我在面对问题,解决问题有了一个比较清晰的思路,另外对于很多细节性问题压根没有想到,在技术层面的广度还很欠缺。
通过这段时间的学习,让我意识到每日仅完成公司的工作,并不能够对自己的能力有多大的提升(倒不是说一定不会有提升),而必须要有思考与总结,面对问题时冷静思考,调动自己的储备,做好尽可能全面的方案(为公司,为团队也为自己)。
1. 请简述JVM垃圾回收原理。
JVM垃圾回收是释放JVM堆中不再被使用的对象所占用的内存空间,JVM使用可达性算法对对象进行识别并标记,通过清理、压缩或复制等方法,采用串行、并行、并发或G1等算法对内存进行回收,在回收过程中会产生STW(Stop The World)现象。
2. 设计一个秒杀系统,主要的挑战和问题有哪些?核心的架构方案或思路有哪些?
2.1 秒杀系统面临的挑战和问题有哪些?
面临的挑战:
瞬时高并发请求处理与系统可用性保障
商品数据的一致性保障
时间紧迫、资源有限
来自各方面的压力
面对的问题:
如何应对面对秒杀前大量用户的刷新请求?
如何保障核心业务系统的稳定?
如何保证秒杀商品订单数量不失控?
如何确保秒杀商品在预定时间才可以抢购?
如何规避机器人自动刷单?
2.2 核心的架构方案或思路有哪些?
方案或思路:
应对瞬时并发请求的处理与系统可用性保障
问题1:如何应对秒杀前大连给用户的刷新请求?
问题2:如何保障核心业务系统的稳定?
预估用户量和系统资源,优化系统参数,保障系统资源高效协同工作
整体评估现有核心系统能力,为解决方案提供指导
功能页面动静分离,采用CDN等缓存方案,缩短用户请求路线,降低系统服务请求压力
精简页面内容,删除不必要的内容,降低网络带宽消耗
合并css和js等文件,减少用户http请求数量
高并发页面静态化处理,减少不必要的请求
减少不必要的系统依赖,保障各系统的稳定
提前缓存热点数据,提升热点数据读取效率
分级控制流量,避免大量的无效请求对核心系统的影响
缓存节点虚拟化处理,降低某一缓存节点出现问题后的影响
确保链路中无单点节点,保障系统高可用
域名独立,方便针对不同请求进行特殊配置
设计有效可行的PlanB方案,保证系统用户可以获得响应
商品数据的一致性保障
问题3:如何保证秒杀商品订单数量不失控?
问题4:如何确保秒杀商品在预定时间才可以抢购?
问题5:如何规避机器人自动刷单?
秒杀开始前不提供商品下单功能,秒杀开始生成随机验证信息,防止通过分析下单功能地址,然后通过系统自动抢单
下单环节可以设置验证环节(答题、验证码等),降低一点下单页面瞬时高并发请求量,同时防止机器人自动刷单
商品库存缓存维护,提高商品库存读写效率,降低核心数据库压力
采用消息队列控制实际订单请求处理数量,可在实际缴款环节进行数量校验
分层控制请求数量,减少关键节点的无效请求处理
时间紧迫、资源有限
了解现有系统能力,现有系统能力充足,就直接使用
现有能力不足,改造现有系统风险大、可行性不高
最好的方案是针对秒杀设计独立的秒杀系统,摒弃一切不相关功能,做到功能单一,高效响应
根据业务预案合理估算资源
合理规划时间,抓住关键问题
分析不可控因素,提前提出,做好可控预案
平时注意提升自身能力,提高应对能力,超出能力范围内的事情做好评估
来自各方面的压力
首先要有一颗强大的抗压的心
做好方案并预演,将精力投入到项目建设当中,与团队共同前进
说到底一是要在自己可控范围内,二是要做好最坏情况的打算(PlanB)
评论