Java实现电商秒杀系统-jseckill
1.前言
什么是秒杀?双十一,双十二天猫京东优惠大促销,大量的用户去抢夺少量的商品,在段时间内抢完,称之为秒杀。典型的高并发应用场景。
2.简介
电商秒杀系统,要求并发量特别大,用Java实现秒杀系统,可以很大程度提高自己的高并发架构能力。可能每秒钟用户连接数大概1000以上。需要确保网站后台正常流畅运行,用户抢到的数量和数据库中减少的库存量保持一致,并且数据库中记录秒杀数据不遗漏。并且用户操作不卡顿。jseckill项目,秒杀的英文单词是seckill,前面的j代表用Java语言实现。项目选择了Java语言实现,使用了消息队列,缓存,分布式锁等技术。
3.技术选型
1.Spring Boot
2.MySQL+MyBatis
3.Redis
4.Thymeleaf
5.Bootstrap
6.RabbitMQ
7.zookeeper实现分布式锁
4.架构图
系统部署架构图
5.高并发优化手段
1.动静分离
前端静态文档部署到CDN, 缺少资金的公司可以用把静态资源部署到nginx静态站点上。
动静分离:把静态资源(js,css,图片)直接部署放到nginx, 动态服务还在原有的tomcat/SpringBoot里。nginx能够支持高达 50,000 个并发连接数的响应。远远高于Tomcat(大约几千个连接数,受制于系统对单进程内线程数量的限制),而且nginx很节省内存。
2.使用Google guava的RateLimiter来进行限流
3.暴露秒杀接口,暴露信息,作为不常更新的热点数据,贮存到Redis里
4.Java应用部署多个集群节点,之间使用nginx做负载均衡和反向代理,提高客户端可承载的并发数
5.Redis操作速度远远快于MySQl操作, 先在Redis里进行秒杀,然后发送消息到RabbitMQ。 Redis操作前,需要获取到分布式锁,操作完毕后释放分布式锁,确保同一时刻只会有一个线程操作Redis减库存操作。
6. 从RabbitMQ中一条条的读取消息,并更新到MySQL
减库存时,在同一事务内,先"插入记录",再"更新库存", 能有效减少行锁的作用时间。数据库更新操作,采用乐观锁,提高并发性
6.后台秒杀过程
1.RateLimiter限流。 并发量大的时候,直接舍弃掉部分用户的请求
2.Redis判断是否秒杀过。避免重复秒杀。如果没有秒杀过,
在Redis操作前分布式加锁 Redis秒杀(减库存,并记录已秒杀成功者的userPhone) 。然后分布式解锁 。
3.发送秒杀记录到RabbitMQ,并且马上返回结果到客户端
4.监听RabbitMQ的队列消息, 一条条地读取消息后,操作数据库。插入秒杀记录和减库存。 并手动ACK队列
7.源码与交流
GitHub源码(长按网址并复制到浏览器后打开)
https://github.com/liushaoming/jseckill
演示地址
http://jseckill.appjishu.com
Java实现电商秒杀系统-jseckill相关推荐
- Java电商秒杀系统性能优化(一)——电商秒杀系统框架回顾
电商秒杀系统框架回顾 项目简介 外部依赖 框架回顾 项目要点 项目中存在的问题 小结 课程是免费的,课程地址如下:SpringBoot搭建电商秒杀项目,课程真的很棒,作者的思路很清晰,建议各位读者可以 ...
- 电商秒杀系统相关实现
前言 本文主要就电商秒杀系统所涉及的相关技术进行探究,相关Demo地址如下: 个人实现版本:https://github.com/MrSorrow/seckill Github Star较高的版本,第 ...
- 毕业设计-电商秒杀系统
目录 1.业务背景 2.基本场景 3.重点场景分析 3.1.浏览秒杀商品 3.2.下单 4.存储架构设计 5.计算架构设计 5.1.负载均衡 5.2.多级缓存 6.高可用设计 7.可扩展设计 8.高可 ...
- 电商库存锁_解密 Redis 助力双 11 背后电商秒杀系统
作者:AlibabaCloud 来源:https://github.com/AlibabaCloudDocs/kvstore/blob/master/cn.zh-CN/最佳实践/使用%20Redis% ...
- java教程——电商秒杀系统介绍
电商秒杀系统实战 QQ 1285575001 Wechat M010527 技术交流 QQ群599020441 纪年科技aming 高并发 缓存 异步化 前后端分离:MVVM框架 原生框架:jQ Bo ...
- 万字好文,电商秒杀系统架构分析与实战
点击上方"朱小厮的博客",选择"设为星标" 后台回复"书",获取 后台回复"k8s",可领取k8s资料 1 秒杀业务分析 ...
- 万字好文,电商秒杀系统架构分析与实战!
1 秒杀业务分析 正常电子商务流程 (1)查询商品: (2)创建订单: (3)扣减库存: (4)更新订单: (5)付款: (6)卖家发货: 秒杀业务的特性 (1)低廉价格: (2)大幅推广 ...
- 使用Redis搭建电商秒杀系统
作者:小热爱 来源:https://juejin.cn/post/6955372476649963556 秒杀活动是绝大部分电商选择的低价促销.推广品牌的方式.不仅可以给平台带来用户量,还可以提高平台 ...
- 解密 Redis 助力双 11 背后电商秒杀系统
背景 秒杀的特征 秒杀系统 背景 秒杀活动是绝大部分电商选择的低价促销.推广品牌的方式.不仅可以给平台带来用户量,还可以提高平台知名度. 一个好的秒杀系统,可以提高平台系统的稳定性和公平性,获得更好的 ...
最新文章
- 基于 OpenCV 的网络实时视频流传输
- Struts 2 标签库详解
- 001 从人物血量学习数据查找
- Jquery中进行post请求时同步与异步的区别(从实例入手学习)
- ubuntu导入python的包_在ubuntu环境下怎么利用python将数据批量导入数据hbase
- 交叉熵(cross_entropy)作为损失函数在神经网络中的作用
- ProjectFileManager 发布!项目文件管理效率提升10倍以上!
- python 字符串 find_Python 字符串 find() 方法
- layui使用弹出层 关闭后弹层的内容又显示出来
- Window Operations(窗口函数的使用)
- STM32的EXTI相关学习笔记
- 轻量化html编辑器,web端实现富文本编辑器
- selenium窗口截图操作
- java请求第三方接口
- 服装收银系统 服装收银 服装收银软件 收银软件 收银系统 好用的服装软件
- Echarts3——绘制世界地图中其他地方到中国城市
- 做PPT设计时,需优先设置好哪些功能
- 用php写的亲亲鲜花网站_PHP最新鲜花礼品商城网站整站源码(自适应手机端) 鲜花商城dedecms模板源码...
- (ESP32学习1)IO的输出高低电平与上下拉输入
- java房产源码_房产信息网源码 - WEB源码|JSP源码/Java|源代码 - 源码中国