写点什么

JVM 垃圾回收及秒杀系统

用户头像
天天向上
关注
发布于: 2020 年 11 月 21 日

JVM 垃圾回收原理

下图展示了应用程序线程和垃圾回收线程执行过程中,JVM 内存的变化。

From 区和 To 区的角色是随时可以互换的。

Edon 区、From 区、To 区的垃圾回收使用的是标记复制算法,老年代使用的是标记整理算法。


如何设计一个秒杀系统

主要的技术挑战

  • 高并发

秒杀瞬间的并发可能是平常的 100 倍,服务器无法承受这个压力导致崩溃,网络带宽无法支撑。


  • 防秒杀器

如果下单页面在秒杀页面的源代码中,用户获取之后可以直接跳过秒杀页面。


  • 库存一致性

高并发的情况下如何保证秒杀商品不超卖,并且能保证并发下减库存的响应时效。


主要的架构思路

  • 系统隔离

将秒杀系统独立开发和部署,尽量不要和现有的其他系统有耦合,减小系统的复杂度,不影响现有的系统。


  • 使用缓存

将静态资源使用 CDN 缓存,避免秒杀页面的高并发访问对服务器产生的压力。


  • 订单计数器

每个后台服务器提前将秒杀商品的数量 X 缓存到本地内存中,当用户下单时对订单量进行计数,如果数量达到 2*X 后,下单请求直接返回到秒杀结束页面。

提前将秒杀商品的数量缓存在 redis 中,通过上一步进来的下单请求,直接从 redis 中减库存,减库存成功的请求发送给消息服务器,并返回秒杀成功并提示用户在规定时间内支付即可。


  • 静态化

将秒杀商品列表和详情页面静态化,定时将秒杀商品信息生成静态的页面,部署到静态服务器上,秒杀商品的下单链接也是在秒杀开始时生成到静态文件中,这样可以防止秒杀未开始就有人通过下单链接进行下单。

当秒杀结束后再将秒杀页面替换成秒杀结束的静态页面,防止无用的请求再到后台。


  • 程序优化

减少请求数和静态资源大小,比如合并、压缩、精简图片、CSS、JS。

中间件、JVM 性能调优。


用户头像

天天向上

关注

还未添加个人签名 2018.09.20 加入

还未添加个人简介

评论

发布
暂无评论
JVM垃圾回收及秒杀系统