面试场景

我们打算组织一个并发一万人的秒杀活动,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. laravel 使用 vue (gulp)

    1)首先要安装 gulp 看这里 http://www.cnblogs.com/tujia/p/6397779.html 2)编辑js 默认 laravel 里有一个 /resources/asset ...

  2. AndroidStudio遇到过的问题

    尊重原创 1.uses-sdk:minSdkVersion 1 cannot be smaller than version 4 declared in library [com.android.su ...

  3. C++成员初始化列表的语法

    如果Classy是一个累,而mem1.mem2.mem3都是这个类的数据称源,则类构造函数可以使用如下的语法来初始化数据成员:Classy::Classy(int n, int m) : mem1(n ...

  4. 图解利用vmware工具进行虚拟机克隆

    在vmware上创建一台完整的虚拟机,在该创建的虚拟机上进行克隆,先关闭创建的虚拟机,然后选中你要克隆的虚拟机,右击->管理->克隆,然后点击下一步,如下图所示: 2 然后点击下一步,如下 ...

  5. Django 1.5.4 专题二 urls 和 view 提高

    一.修改article/urls.py内容如下 二.修改django_test/urls.py如下 三.修改article/views.py如下 四.修改templates/article.html的 ...

  6. 日请求亿级的QQ会员AMS平台PHP7升级实践

    版权声明:本文由PHP7升级项目组原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/74 来源:腾云阁 https://www ...

  7. Python的函数名作为参数传入调用以及map、reduce、filter

    零.python的lambda函数: #lambda function func = lambda x : x+1 #这里是一个匿名函数,x是参数,x+1是对参数的操作 func(1)= 2 多个参数 ...

  8. Android动态添加布局

    //1.利用LayoutInflater的inflate动态加载XML mLinearLayout = (LinearLayout)findViewById(R.id.LinearLayout_ID) ...

  9. IDEA Tomcat部署时war和war exploded区别以及平时踩得坑

    war和war exploded的区别 在使用IDEA开发项目的时候,部署Tomcat的时候通常会出现下边的情况: 是选择war还是war exploded 这里首先看一下他们两个的区别: war模式 ...

  10. etc/fstab

    etc/fstab 就是在开机引导的时候自动挂载到linux的文件系统 设备名称 挂载点 分区的类型 挂载选项 dump选项 fsck选项UUID=ce25cdc7-434f-420b-b3 / ex ...