有的时候,获取秒杀项目经历的代价是惨痛的…
比如我
前阵子我司(某十八线厂子)的运营策划了一场1元秒杀活动。一开始觉得肯定不会有很多人参与啊,于是没有准确的预估好用户的访问量。结果,你猜发生了什么:活动开始后一小时,因为用户访问量太多直接给网页搞崩了…
为了给我们部门擦屁股,甚至有幸见到了公司里半年不出现的大佬…一时不知道是喜是悲…
所以题主有心能在私下练习秒杀项目真的是!非常优秀了。这里将我从血泪中总结的经验(教训)分享给你。
基础知识大家都学,关键是你要会灵活应用
这里的基础包括:算法,数据库、多线程、QPS等等。学嘛大家都会,但想要跟着对应场景去实操,还是很考验个人能力的。但也不必特别执着于框架。在突发情况面前,框架不值一提。
我在学习的基础过程中,经常觉得我已经百分百掌握了。谁知每次一遇到新场景,就会有新的问题出现。后来在后来在一位阿里学长的推荐下,我去听了一场由北美顶尖IT企业的高级系统架构师讲授的《重塑系统架构体系》讲座。让我对系统设计有了更深的理解。
印象最深的是讲座中的一个案例:
商家以4499的价格上架了某iphone,比官网价格便宜了1000元,库存总数10台,运营设置11/11 00:00活动生效,一人只能购买1台,商品售完为止。
根据《重塑系统架构体系》讲座中给出的分析思路
第一步Scenario场景。需要确定设计哪些功能,承受多大的访问量?
这里要知道秒杀系统的常见概念QPS(Queries Per Second),即一秒内可以处理的请求数量。
假如一个服务的RT(Response time)是20ms,则QPS为50(这里计算的是单机单线程QPS,如果要计算集群的话,需要考虑集群数量和线程数量)。
QPS = 100,用你的笔记本做Web服务器足矣。
QPS = 1k,用一台好点的Web服务器也差不多了。
QPS = 1m,则需要建设一个1000台Web服务器的集群。
QPS和服务器/数据库之间的关系:
一台服务器承受量约1k的QPS(考虑到逻辑处理时间以及数据库查询的瓶颈)
一台SQL Database承受量约1k的QPS(如果JOIN和INDEX query比较多的话,这个值会更小)
一台NoSQL Database(Casscandra)承受量约10k的QPS
一台NoSQL Database(Memcached)承受量约1M的QPS
第二步,Service服务。服务可以认为是逻辑处理的整合,对同类问题的逻辑处理放在一个服务中。
这里秒杀系统服务设计如下:
第三步,Storage存储。为不同服务选择合适的存储结构,然后细化在这里,秒杀系统数据库设计如下:
于是可以看到在秒杀活动中,数据库之间的关系是这样的:
然后,重点来了!我们先基于数据库Mysql来扣库存
update stock set count = count - 1 where product_id = xxxx and count > 0
看到这里你一定会问,秒杀系统的并发问题怎么解决?
这里有两种办法,乐观锁和悲观锁。
对于数据一致性要求很高的场景中,用悲观锁的比较多,所以这里只分享悲观锁。
流程如下:
通过前三个步骤的分析,其实基本上已经得到了一个可行性的解决方案。但这样的方案不见得是最优的,还有很多地方需要完善。这里可以用到分析法的最后一步:Scale 扩展。
这部分主要是解决产品设计缺陷,以及系统的维护,比如有服务器挂了怎么办等问题。
除此之外还有非常多的的实战案例可以学习。这个讲座目前还处于免费试听状态,建议大家赶紧薅一波,戳这里~
多练习秒杀类项目
昨天翻烂了自己的收藏夹,给大家总结了一些非常有实操价值的项目。希望大家一定要拿去好好练习!
《电商秒杀系统》
这个项目课的授课老师是阿里的技术大佬,课上讲的内容也挺全的,包括项目基础架构搭建,数据府库分析,MyBatis 整合与逆向生成等,老师会手把手的额带你从零起步,完成一个电商秒杀系统。非常适合新人练手,还会涉及Redis、防爬虫和恶意刷请求、库存超卖问题等核心知识点。
现在好像可以免费试听,感兴趣的朋友可以去看看,戳这里
小商城秒杀系统
litemall = Spring Boot后端 + Vue管理员前端 +微信小程序用户前端 + Vue用户移动端项目架构
技术栈:Spring Boot、Vue、微信小程序
配置开发环境:MySQL、JDK1.8或以上、Maven、Nodejs、微信开发者工具
系统架构设计 System Design 包含秒杀系统、订票系统、网站系统、协同实时编辑系统、数据系统、即时通讯系统、视频系统、爬虫系统。目前还不清楚做哪类项目的同学,可以先免费看看这个。
该项目提供了完整的系统设计项目思路,在编程的过程中掌握核心技术点,不光能帮你顺利完成毕设,对今后的面试也大有帮助。感兴趣的可以移步《系统架构设计 System Design》免费获取。
使用技术:
- 数据库 Database
- 缓存 Cache
- 消息队列 Message
- 分布式系统 Distributed System
Twitter 后端系统 - Python 项目实战
从零设计Twitter,完整搭建一个P8(L5)水准的项目,绝对不是简单做个demo,除了毕设可以用他参考外,学好了绝对能在面试中加分。移步《Twitter 后端系统》可以免费学习项目万行代码。
涉及到的重点知识包括:
- SNS 系统面试必考内容之 Pull & Push 模型分析对比
- 高性能系统必备消息队列 Message Queue 应用场景
- 一学就会但十分装逼的技巧:Denormalization 去标准化(冗余存储技术)
数据库:
表单结构、SQL 语句增删查改
涉及的面试难点包括:
- 如何分别测试登录用户和未登录用户?
- 如何做反向查询?
- 如何设计数据库表达?
- 如何让部分用户看到某个新功能,其他用户看到的就是功能?(灰度测试)
- comments的API该如何设计?
- ……
现在同样可以免费试听,不妨先来体验一下。
favorites-web
一个使用Spring Boot 构建的开源网站,用户可以在网站上分类整理收藏的网站或者文章,同时开放查看他人收藏内容,了解同行业内的大拿都在学习什么,方便学习、整理、检索,根据共同的收藏内容。
使用技术:
- Vue
- Bootstrap
- jQuery
- Thymeleaf
- Spring Data Jpa
- Spring Boot Mail
- WebJars
- Mysql
- Tomcat
最后,欢迎大家跟我一起讨论交流哦~