有的时候,获取秒杀项目经历的代价是惨痛的…

比如我

前阵子我司(某十八线厂子)的运营策划了一场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服务。服务可以认为是逻辑处理的整合,对同类问题的逻辑处理放在一个服务中。

这里秒杀系统服务设计如下:

java开发电商项目遇到的问题和解决方法 java电商项目难吗_电商系统


第三步,Storage存储。为不同服务选择合适的存储结构,然后细化在这里,秒杀系统数据库设计如下:

java开发电商项目遇到的问题和解决方法 java电商项目难吗_电商系统_02


于是可以看到在秒杀活动中,数据库之间的关系是这样的:

java开发电商项目遇到的问题和解决方法 java电商项目难吗_电商系统_03


然后,重点来了!我们先基于数据库Mysql来扣库存

update stock set count = count - 1 where product_id = xxxx and count > 0

看到这里你一定会问,秒杀系统的并发问题怎么解决?

这里有两种办法,乐观锁和悲观锁

对于数据一致性要求很高的场景中,用悲观锁的比较多,所以这里只分享悲观锁。

流程如下:

java开发电商项目遇到的问题和解决方法 java电商项目难吗_电商系统_04


通过前三个步骤的分析,其实基本上已经得到了一个可行性的解决方案。但这样的方案不见得是最优的,还有很多地方需要完善。这里可以用到分析法的最后一步:Scale 扩展

这部分主要是解决产品设计缺陷,以及系统的维护,比如有服务器挂了怎么办等问题。

除此之外还有非常多的的实战案例可以学习。这个讲座目前还处于免费试听状态,建议大家赶紧薅一波,戳这里~

多练习秒杀类项目

昨天翻烂了自己的收藏夹,给大家总结了一些非常有实操价值的项目。希望大家一定要拿去好好练习!

《电商秒杀系统》

这个项目课的授课老师是阿里的技术大佬,课上讲的内容也挺全的,包括项目基础架构搭建,数据府库分析,MyBatis 整合与逆向生成等,老师会手把手的额带你从零起步,完成一个电商秒杀系统。非常适合新人练手,还会涉及Redis、防爬虫和恶意刷请求、库存超卖问题等核心知识点。

现在好像可以免费试听,感兴趣的朋友可以去看看,戳这里

java开发电商项目遇到的问题和解决方法 java电商项目难吗_数据库_05


小商城秒杀系统

litemall = Spring Boot后端 + Vue管理员前端 +微信小程序用户前端 + Vue用户移动端项目架构

java开发电商项目遇到的问题和解决方法 java电商项目难吗_Java_06


技术栈:Spring Boot、Vue、微信小程序

配置开发环境:MySQL、JDK1.8或以上、Maven、Nodejs、微信开发者工具

系统架构设计 System Design 包含秒杀系统、订票系统、网站系统、协同实时编辑系统、数据系统、即时通讯系统、视频系统、爬虫系统。目前还不清楚做哪类项目的同学,可以先免费看看这个。

该项目提供了完整的系统设计项目思路,在编程的过程中掌握核心技术点,不光能帮你顺利完成毕设,对今后的面试也大有帮助。感兴趣的可以移步《系统架构设计 System Design》免费获取。

java开发电商项目遇到的问题和解决方法 java电商项目难吗_Vue_07


使用技术:

  • 数据库 Database
  • 缓存 Cache
  • 消息队列 Message
  • 分布式系统 Distributed System

Twitter 后端系统 - Python 项目实战

从零设计Twitter,完整搭建一个P8(L5)水准的项目,绝对不是简单做个demo,除了毕设可以用他参考外,学好了绝对能在面试中加分。移步《Twitter 后端系统》可以免费学习项目万行代码。

java开发电商项目遇到的问题和解决方法 java电商项目难吗_Java_08


涉及到的重点知识包括:

  • SNS 系统面试必考内容之 Pull & Push 模型分析对比
  • 高性能系统必备消息队列 Message Queue 应用场景
  • 一学就会但十分装逼的技巧:Denormalization 去标准化(冗余存储技术)

数据库:

表单结构、SQL 语句增删查改

涉及的面试难点包括:

  • 如何分别测试登录用户和未登录用户?
  • 如何做反向查询?
  • 如何设计数据库表达?
  • 如何让部分用户看到某个新功能,其他用户看到的就是功能?(灰度测试)
  • comments的API该如何设计?
  • ……

现在同样可以免费试听,不妨先来体验一下。

favorites-web

一个使用Spring Boot 构建的开源网站,用户可以在网站上分类整理收藏的网站或者文章,同时开放查看他人收藏内容,了解同行业内的大拿都在学习什么,方便学习、整理、检索,根据共同的收藏内容。

java开发电商项目遇到的问题和解决方法 java电商项目难吗_Java_09


使用技术:

  • Vue
  • Bootstrap
  • jQuery
  • Thymeleaf
  • Spring Data Jpa
  • Spring Boot Mail
  • WebJars
  • Mysql
  • Tomcat

最后,欢迎大家跟我一起讨论交流哦~