01 秒杀系统功能概述
01 秒杀系统功能概述
前言
前面我们的苏三商城系统已经实现了:商品管理、订单管理、支付宝支付等功能。
接下来,打算实现一个非常有意思的功能:商品秒杀功能,这个功能无论在面试,还是实际工作中,出现的概率挺高的。
我原本打算将这个模块放到商城系统中的。
但考虑到有些小伙伴,没有经历过一些高并发的项目,不知道要用什么技术应对。
因此,我现在将秒杀系统和商城系统分开,分成两个完全独立的服务。
秒杀系统并发量高。
商城系统目前并发量不太高。
1 功能介绍
秒杀系统前端页面,在还没到秒杀时间之前,比如:618的0点,相关的购买按钮是置灰的。
这相关商品列表中的商品价格和库存,用户有可能可以看到。
到了秒杀时间,前端页面的购买按钮,回复正常了。
大量用户开始购买极少数商品,比如:有3个商品参与了秒杀。
则有大量的用户会抢购这3个商品。
大部分用户会提示:该商品已售罄,看到商品的库存变成0。
只有极少数用户能抢到秒杀商品。
有些用户抢到商品,在规定的时间,比如:15分钟内,完成了付款操作,则这次订单会顺利完成,库存也能正常扣减。
但有少部分用户,抢到商品之后,没有及时付款,或者忘记付款了。
则这部分商品的库存,要退还回去。
在退还库存的过程中,如果又有新的请求购买商品请求过来,这个此时的库存到底要怎么计算。
在高并发的情况下,如何防止库存出现超卖的情况?
秒杀系统涉及的东西还是不少的。
2 使用技术
为了保证接口在高并发的场景下,不影响商城系统的功能,除了项目要独立之外,数据库和表也要独立。
秒杀系统我们打算沿用之前商城系统的一些技术栈。
开发语言:Java8。
数据库用:MySQL。
框架用:SpringBoot、Mybatis、Spring Security。
缓存用:Redis。
消息中间件用:RabitMQ。
分布式锁框架用:Redission。
脚本语言:Lua
当然还可能用点其他的技术,比如有一些特殊的业务场景:订单超时失效功能,失败自动重试功能等。