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服务器 ...
随机推荐
- python2.0_day16_django_url_view_models_template介绍
本节内容 Django流程介绍 Django url Django view Django models Django template Django form Django admin Django ...
- 在线学习angularjs2
官网给的学习教程(需要FQ) http://campus.codeschool.com/courses/accelerating-through-angular-2/contents
- Python 处理命令行参数
optparse模块用于从命令行直接读取参数,用法基本与 argparse模块 一致,如下: #!/usr/bin/env python #-*- coding:utf-8 -*- from optp ...
- 如何连接 MySQL
操作如下: [root@localhost ~]$ mysql -uroot -p' # 本地连接 MySQL 服务 [root@localhost ~]$ mysql -uroot -p' -h19 ...
- 第一篇:《UNIX 网络编程 第二版》编译环境的搭建
第一步:搭建基本的编译环境 安装gcc, g++, bulid-essential等编译软件 第二步:下载本书示例源码包 第三步:解压下载到的包并放在用户主目录中 第四步:进入包内并执行以下命令 su ...
- JDK1.8在LINUX下安装步骤
JDK1.8在LINUX下安装步骤: 在/usr/lib/目录下新建jvm文件夹,如果已有jvm文件夹,则将之前的JDK版本删除,即在jvm目录下执行命令:rm –rf * 将JDK文件jdk-8u4 ...
- python小项目练习之转换像素图片为字符图
实例来源实验楼网站,没事可以多逛逛,在此多谢实验楼的无私分享 from PIL import Image import argparse """ description: ...
- Egret Wing4.0.3 动画编辑器
一 exml上摆放组件 切换动画编辑 创建动画组,命名test1. 选中一个对象,创建动画(必须选中一个对象后,+号才会亮.且一个对象只能创建一个动画) 之后和Flash差不多.在时间轴插入关键帧. ...
- RAID和LVM磁盘阵列
RAID磁盘冗余阵列 CPU的处理性能保持着高速增长,Intel公司在2017年最新发布的i9-7980XE处理器芯片更是达到了18核心36线程.但与此同时,硬盘设备的性能提升却不是很大,因此逐渐成为 ...
- 前端程序员:月薪 5K 到 5 万
入行行头:5 大硬件 请准备好以下东西 一颗人类的大脑:智商在平均水平线以上即可 一份强烈的渴望:我的代码要可以运行在任何一个有浏览器的设备上. 一台笔记本电脑:不需要花费很多钱得那种,只要它可以运行 ...