【架构师训练营 - 作业 -9】
作业一:
请简述 JVM 垃圾回收原理。
java对象创建后即在内存中申请的一块空间,对象可能被多个地方引用达到重复使用的效果,如经典的String设计。但当某一个对象无人使用时,即为垃圾,需要进行清理方便后续逻辑需要的内存空间。
清理垃圾首先需要找到垃圾,jvm中使用的是可达性算法,找打哪些对象还在使用,并标记
垃圾回收的目的是清理不要的对象或留下需要的对象。对应jvm中的直接清理不可达对象,或复制出正在使用的对象抛弃原内存空间。
在这个主思路下,对每个步骤进行优化。如可达性算法分多次执行,每次找到不同深度的对象;如清理时将内存分区,并发处理等。
设计一个秒杀系统,主要的挑战和问题有哪些?核心的架构方案或者思路有哪些?
评估实际需求
秒杀系统听起来是一个很高级又很普遍的系统。需要摸清实际需求,那些步骤真正会面临压力,哪些步骤其实并不会受到太大影响等。
摸清现有服务器的性能。如何估算即将要面对的服务器压力
了解了后才能针对性的优化。
如何不对现有结构造成较大冲击
秒杀为特殊场景的需求,非一个普通公司的普遍需求,平时运行的系统如果都完美实现秒杀的场景性价比很低。所以建议秒杀自身的逻辑可以单独模块处理。
高并发
秒杀最直接的就是短时间大量用户涌入。而实际商品数量有限,即大量的请求实际是无效、重复的。所以可以逐级限流,提交最终请求中有效请求的比例。如首页若有商品展示,就可以直接写死无需请求后端,减少大量重复性请求。当然若担心部分信息变更可以考虑别的方案,如请求时只是获取版本号,通过版本号更新商品数据等。
大流量
大量用户涌入后必然会带来大流量,至少会有一个介绍或秒杀页。尽可能的简化页面,缩减页面的大小,同时将页面大小的大头--图片做好缓存。如使用CND。
防止活动规则被破坏、钻漏洞
如提前进入活动页、绕开各种前置判断直接达到最后一步等等,需要提前预判,并规避或准备应对措施。
服务器监控
防止预估错误,导致资源不足。
应急预案
在资源不足时,需要有一定的应急预案保证公司正常业务顺利进行
版权声明: 本文为 InfoQ 作者【小动物】的原创文章。
原文链接:【http://xie.infoq.cn/article/a3133cff2a20196f0e00d2e99】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论