JVM 垃圾回收及秒杀系统
JVM 垃圾回收原理
下图展示了应用程序线程和垃圾回收线程执行过程中,JVM 内存的变化。
From 区和 To 区的角色是随时可以互换的。
Edon 区、From 区、To 区的垃圾回收使用的是标记复制算法,老年代使用的是标记整理算法。
如何设计一个秒杀系统
主要的技术挑战
高并发
秒杀瞬间的并发可能是平常的 100 倍,服务器无法承受这个压力导致崩溃,网络带宽无法支撑。
防秒杀器
如果下单页面在秒杀页面的源代码中,用户获取之后可以直接跳过秒杀页面。
库存一致性
高并发的情况下如何保证秒杀商品不超卖,并且能保证并发下减库存的响应时效。
主要的架构思路
系统隔离
将秒杀系统独立开发和部署,尽量不要和现有的其他系统有耦合,减小系统的复杂度,不影响现有的系统。
使用缓存
将静态资源使用 CDN 缓存,避免秒杀页面的高并发访问对服务器产生的压力。
订单计数器
每个后台服务器提前将秒杀商品的数量 X 缓存到本地内存中,当用户下单时对订单量进行计数,如果数量达到 2*X 后,下单请求直接返回到秒杀结束页面。
提前将秒杀商品的数量缓存在 redis 中,通过上一步进来的下单请求,直接从 redis 中减库存,减库存成功的请求发送给消息服务器,并返回秒杀成功并提示用户在规定时间内支付即可。
静态化
将秒杀商品列表和详情页面静态化,定时将秒杀商品信息生成静态的页面,部署到静态服务器上,秒杀商品的下单链接也是在秒杀开始时生成到静态文件中,这样可以防止秒杀未开始就有人通过下单链接进行下单。
当秒杀结束后再将秒杀页面替换成秒杀结束的静态页面,防止无用的请求再到后台。
程序优化
减少请求数和静态资源大小,比如合并、压缩、精简图片、CSS、JS。
中间件、JVM 性能调优。
评论