面试场景

我们打算组织一个并发一万人的秒杀活动,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构建高并发商城秒杀系统——架构分析的更多相关文章

  1. Alibaba高并发业务秒杀系统落地实战文档,已实践某大型秒杀场景

    前言: 高并发,几乎是每个程序员都想拥有的经验.原因很简单:随着流量变大,会遇到各种各样的技术问题,比如接口响应超时.CPU load升高.GC频繁.死锁.大数据量存储等等,这些问题能推动我们在技术深 ...

  2. PHP高并发商城秒杀

    1.什么是秒杀 秒杀活动是一些购物平台推出的集中人气的活动,一般商品数量很少,价格很便宜,限定开始购买的时间,会在以秒为单位的时间内被购买一空.比如原价千元甚至万元的商品以一元的价格出售,但数量只有一 ...

  3. Java商城秒杀系统的设计与实战视频教程(SpringBoot版)

    课程目标掌握如何基于Spring Boot构建秒杀系统或者高并发业务系统,以及构建系统时采用的前后端技术栈适用人群Spring Boot实战者,微服务或分布式系统架构实战者,秒杀系统和高并发实战者,中 ...

  4. Java生鲜电商平台-秒杀系统微服务架构设计与源码解析实战

    Java生鲜电商平台-秒杀系统微服务架构设计与源码解析实战 Java生鲜电商平台-  什么是秒杀 通俗一点讲就是网络商家为促销等目的组织的网上限时抢购活动 比如说京东秒杀,就是一种定时定量秒杀,在规定 ...

  5. Java生鲜电商平台-高并发的设计与架构

    Java生鲜电商平台-高并发的设计与架构 说明:源码下载Java开源生鲜电商平台以及高并发的设计与架构文档 对于高并发的场景来说,比如电商类,o2o,门户,等等互联网类的项目,缓存技术是Java项目中 ...

  6. Java商城秒杀系统的设计与实战视频教程(SpringBoot版)_汇总贴

    51CTO学院 Java商城秒杀系统的设计与实战视频教程(SpringBoot版) H:\BaiDu\微服务0830\2019最新 Java商城秒杀系统的设计与实战视频教程(SpringBoot版) ...

  7. java处理高并发高负载类网站的优化方法

    java处理高并发高负载类网站中数据库的设计方法(java教程,java处理大量数据,java高负载数据) 一:高并发高负载类网站关注点之数据库 没错,首先是数据库,这是大多数应用所面临的首个SPOF ...

  8. [转]java处理高并发高负载类网站的优化方法

    本文转自:http://www.cnblogs.com/pengyongjun/p/3406210.html java处理高并发高负载类网站中数据库的设计方法(java教程,java处理大量数据,ja ...

  9. Java开源生鲜电商平台-系统架构与技术选型(源码可下载)

    Java开源生鲜电商平台-系统架构与技术选型(源码可下载) 1.  硬件环境 公司服务器 2.   软件环境 2.1  操作系统 Linux CentOS 6.8系列 2.2 反向代理/web服务器 ...

随机推荐

  1. Android 使用DatePicker以及TimePicker显示当前日期和时间

    课程内容1.介绍DatePicker和TimePicker两种实现动态输入日期和事件的功能2.介绍DatePickerDialog和TimePickerDialog来年耕种实现动态输入日期和事件的对话 ...

  2. @ResponseBody将集合数据转换为json格式并返回给客户端

    spring-mvc.xml: <beans xmlns:mvc="http://www.springframework.org/schema/mvc" > <m ...

  3. linux的ls命令输出结果的逐条解释

    转自:http://blog.csdn.net/god123209/article/details/7193485 ls 命令的含义是list显示当前目录中的文件名字.注意不加参数它显示除隐藏文件外的 ...

  4. 详解Go语言中的屏蔽现象

    在刚开始学习Go语言的过程中,难免会遇到一些问题,尤其是从其他语言转向Go开发的人员,面对语法及其内部实现的差异,在使用Go开发时也避免不了会踩"坑".本文主要针对Go设计中的屏蔽 ...

  5. PHP中文字数限制:中文字符串截取(mb_substr)

    一.中文截取:mb_substr() mb_substr( $str, $start, $length, $encoding ) $str,需要截断的字符串 $start,截断开始处,起始处为0 $l ...

  6. C++ list容器系列功能函数详解

    C++ list函数详解 首先说下eclipse工具下怎样debug:方法:你先要设置好断点,然后以Debug方式启动你的应用程序,不要用run的方式,当程序运行到你的断点位置时就会停住,也会提示你进 ...

  7. CentOS7 部署tomcat

    一.环境说明: 在 CentOS7下面部署tomcat7 . 二.tomcat部署 1.新建tomcat目录  mkdir tomcat 2.上传tomcat 安装文件   apache-tomcat ...

  8. MySQL实现根据当前ID读取上一条和下一条记录

    以下为MySQL语句演示: SELECT * FROM t_news AS n ORDER BY n.`News_ID` 当前ID为4,读取上一条记录: ,; 当前ID为4,读取下一条记录: ,; 其 ...

  9. Java学习记录-Lambda表达式示例

    List<Integer> userIds=userInfoList.stream().map(m->m.getUserId()).collect(Collectors.toList ...

  10. 升级mac xcode打包证书报错 git 报错

    reset tryAgain git 在钥匙串中找不到指定的项  重新配置公钥撕咬 SSH keys An SSH key allows you to establish a secure conne ...