JAVA构建高并发商城秒杀系统——架构分析
面试场景
我们打算组织一个并发一万人的秒杀活动,1元秒杀100个二手元牙刷,你给我说说解决方案。
秒杀/抢购业务场景
商品秒杀、商品抢购、群红包、抢优惠劵、抽奖、......
秒杀/抢购业务特点
秒杀商品价格低廉、抢购商品很好|抢手、大幅推广|广为人知、瞬时售空、一般是定时上架、持续时间短、瞬时并发量高......
秒杀、抢购技术特点
读多写少、高并发、资源冲突
知道这些,恭喜你,获得10分。
分析技术特点:
秒杀/抢购技术特点
1.读多写少
缓存
2.高并发
1.限流
2.负载均衡 (单体tomcat并发200完美胜任,突破五,六百就力不从心)
3.缓存
4.异步(将同步的并发请求转换为异步)
5.队列
3.资源冲突
数据库锁
分布式锁
其他原子操作
乐观锁
悲观锁
redis
redis
decr
原子操作
异步
原子操作和异步分为:
回答到这里,恭喜你,获得50分了,但是还没有及格。
系统基本架构
日均PV只有几万的企业管理系统
用户量过千万的中型技术社区
活跃用户过亿的大型购物网站
这三种都是这种架构:

一个系统基本架构
回答这一步,恭喜你,获得80分
秒杀人群、并发规模的预估
1.为什么要估算?
确定一个最终的技术选型以及服务器容量
2.怎么估算?
日并发估算的公式很很多
1) 平均并发用户数为 C = nl/T
2) 并发用户数峰值 C = C + 3 * 根号C
秒杀的并发规模就要根据公司活动历时依赖的最高峰值再扩容。
这里我们的并发需求在前面已经确定了。
我们打算组织一个并发1万人的秒杀活动,1元秒杀100个二手牙刷。
10000个并发的架构

悲观锁:select * from 表名 for update,该用户不提交,其他人都没法操作
乐观锁:在表里面加一个version字段,通过一个版本号去控制
悲观锁VS乐观锁:
1.响应速度
2.冲突频率
3.重试代价
高并发情况下两个锁的结论:悲观锁速度更快!!!有时乐观锁偶然会比悲观锁低,但是在大数据的情况下,悲观锁会比乐观锁低!
悲观锁速度测试:

乐观锁速度测试:

关键字:自旋锁(乐观锁下操作失败的请求,在进行重试)
限流算法-令牌桶

限流算法-漏桶

nginx配置:

自身的一个漏桶限流方式,$binary_remote_addr,限流维度,表示对每一个ip进行限流,1r/s表示1秒一个

limit_req zone=preip,preip就是前面配置的。
秒杀的架构图:

前端限流,Nginx限流,令牌桶限流,到数据库→乐观锁或悲观锁防止超卖
喜欢的小伙伴们可以搜索我们个人的微信公众号“程序员的成长之路”点击关注或扫描下方二维码

JAVA构建高并发商城秒杀系统——架构分析的更多相关文章
- Alibaba高并发业务秒杀系统落地实战文档,已实践某大型秒杀场景
前言: 高并发,几乎是每个程序员都想拥有的经验.原因很简单:随着流量变大,会遇到各种各样的技术问题,比如接口响应超时.CPU load升高.GC频繁.死锁.大数据量存储等等,这些问题能推动我们在技术深 ...
- PHP高并发商城秒杀
1.什么是秒杀 秒杀活动是一些购物平台推出的集中人气的活动,一般商品数量很少,价格很便宜,限定开始购买的时间,会在以秒为单位的时间内被购买一空.比如原价千元甚至万元的商品以一元的价格出售,但数量只有一 ...
- Java商城秒杀系统的设计与实战视频教程(SpringBoot版)
课程目标掌握如何基于Spring Boot构建秒杀系统或者高并发业务系统,以及构建系统时采用的前后端技术栈适用人群Spring Boot实战者,微服务或分布式系统架构实战者,秒杀系统和高并发实战者,中 ...
- Java生鲜电商平台-秒杀系统微服务架构设计与源码解析实战
Java生鲜电商平台-秒杀系统微服务架构设计与源码解析实战 Java生鲜电商平台- 什么是秒杀 通俗一点讲就是网络商家为促销等目的组织的网上限时抢购活动 比如说京东秒杀,就是一种定时定量秒杀,在规定 ...
- Java生鲜电商平台-高并发的设计与架构
Java生鲜电商平台-高并发的设计与架构 说明:源码下载Java开源生鲜电商平台以及高并发的设计与架构文档 对于高并发的场景来说,比如电商类,o2o,门户,等等互联网类的项目,缓存技术是Java项目中 ...
- Java商城秒杀系统的设计与实战视频教程(SpringBoot版)_汇总贴
51CTO学院 Java商城秒杀系统的设计与实战视频教程(SpringBoot版) H:\BaiDu\微服务0830\2019最新 Java商城秒杀系统的设计与实战视频教程(SpringBoot版) ...
- java处理高并发高负载类网站的优化方法
java处理高并发高负载类网站中数据库的设计方法(java教程,java处理大量数据,java高负载数据) 一:高并发高负载类网站关注点之数据库 没错,首先是数据库,这是大多数应用所面临的首个SPOF ...
- [转]java处理高并发高负载类网站的优化方法
本文转自:http://www.cnblogs.com/pengyongjun/p/3406210.html java处理高并发高负载类网站中数据库的设计方法(java教程,java处理大量数据,ja ...
- Java开源生鲜电商平台-系统架构与技术选型(源码可下载)
Java开源生鲜电商平台-系统架构与技术选型(源码可下载) 1. 硬件环境 公司服务器 2. 软件环境 2.1 操作系统 Linux CentOS 6.8系列 2.2 反向代理/web服务器 ...
随机推荐
- 在(MRv1)中JobTracker工作方式
在 Hadoop MapReduce 中,JobTracker 具有两种不同的职责: 管理集群中的计算资源,这涉及到维护活动节点列表.可用和占用的 map 和 reduce slots 列表,以及依据 ...
- 如何快速入门单片机C语言
一.为什么要学单片机技术? 传统的电子产品升级改造成智能化的电子产品需要用到单片机技术.也就是说传统的电子产品如电视机.电子表.计算器.数码相机.手机.MP3.遥控器.洗衣机等产品智能化.微型化,需要 ...
- 使用Editplus和Dev C++配置C++的编译运行环 境
或许大家会有疑问,为何不直接使用VC;VS;或Dev这些IDE呢?何必舍近求远.主要是因为写程序这么多年来已经习惯了Editplus,包括他的快捷键,语法自动完成,语法提示等等,Editplus用了这 ...
- c++11——auto,decltype类型推导
c++11中引入了auto和decltype关键字实现类型推导,通过这两个关键字不仅能够方便的获取复杂的类型,而且还能简化书写,提高编码效率. auto和decltype的类型推导都是编译器在 ...
- 【BZOJ1801】[Ahoi2009]chess 中国象棋 DP
[BZOJ1801][Ahoi2009]chess 中国象棋 Description 在N行M列的棋盘上,放若干个炮可以是0个,使得没有任何一个炮可以攻击另一个炮. 请问有多少种放置方法,中国像棋中炮 ...
- android选择图片或拍照图片上传到服务器(包括上传参数)
From:http://blog.csdn.net/springsky_/article/details/8213898具体上传代码: 1.选择图片和上传界面,包括上传完成和异常的回调监听 [java ...
- 从一个多项目Web工程看Eclipse如何导入Gradle项目
这里再次说一下为什么我们需要熟悉Gradle构建工具,主要原因就是很多开源项目现在都在改用Gradle作为构建工具.一部分的github上的示例代码也在用Gradle构建,如果还是只能用maven,那 ...
- swoole--PHP的异步、并行、高性能网络通信引擎
swoole目前已被多家移动互联网.物联网.网络游戏.手机游戏企业使用,替代了C++.Java等复杂编程语言来实现网络服务器程序. 使用PHP+Swoole,开发效率可以大大提升.官方提供了基于swo ...
- V2EX的RSS订阅地址
1.全站RSS输出: https://www.v2ex.com/index.xml 2.单独节点RSS输出: http://www.v2ex.com/feed/{节点名}.xml 以shadowso ...
- 使用Dataset构建数据到lgb中
训练数据要放到Dataset中供lgb使用,构建数据如下: import lightgbm as lgb import numpy as np # 训练数据,500个样本,10个维度 train_da ...
