开源基于SpringBoot开发案例从0到1构建分布式开源秒杀系统
一、开源项目简介
SpringBoot开发案例从0到1构建分布式秒杀系统,项目案例基本成型,适合技术深入研究及实践。二、功能概述
秒杀场景
秒杀场景无非就是多个用户在同时抢购一件或者多件商品,专用词汇就是所谓的高并发。现实中经常被大家喜闻乐见的场景,一群大妈抢购打折鸡蛋的画面一定不会陌生,如此场面让服务员大姐很无奈,赶上不要钱了。
业务特点
瞬间高并发、电脑旁边的小哥哥、小姐姐们如超市哄抢的大妈一般,疯狂的点着鼠标
库存少、便宜、稀缺限量,值得大家去抢购,如苹果肾,小米粉,锤子粉(理解万岁)
用户规模
用户规模可大可小,几百或者上千人的活动单体架构足以可以应付,简单的加锁、进程内队列就可以轻松搞定。一旦上升到百万、千万级别的规模就要考虑分布式集群来应对瞬时高并发。
通过技术手段,在秒杀场景解决以下问题:
【秒杀】秒杀一(超卖)
最简单的查询更新操作,不涉及各种锁,会出现超卖情况。秒杀二(超卖)
使用ReentrantLock重入锁,由于事物提交和锁释放的先后顺序也会导致超卖。秒杀三(正常)
基于秒杀二场景的修复,锁上移,事物提交后再释放锁,不会超卖。秒杀四(少买)
基于数据库悲观锁实现,查询加锁,然后更新,由于使用了 限流 注解(可自行注释),这里会出现少买。秒杀五(正常)
基于数据库悲观锁实现,更新加锁并判断剩余数量。秒杀六(正常)
基于数据库乐观锁实现,先查询商品版本号,然后根据版本号更新,判断更新数量。少量用户抢购的时候会出现 少买 的情况。秒杀七(少买)
基于进程内队列 LinkedBlockingQueue 实现,同步消费,由于使用了 限流 注解(可自行注释),这里会出现少买。如果想正常,去掉startSeckil方法上的@ServiceLimit注解即可。秒杀八(少买)
基于高性能队列 Disruptor实现,同步消费,由于使用了 限流 注解(可自行注释),这里会出现少买。如果想正常,去掉startSeckil方法上的@ServiceLimit注解即可。
【分布式秒杀】秒杀一(超卖)
基于 Rediss 分布式锁 实现,由于锁和事物执行顺序问题,会出现超卖的情况(建议锁上移)。秒杀二(超卖)
基于 Zookeeper 分布式锁 实现,同上一个意思。秒杀三
基于 Redis 分布式队列-订阅监听。
见类:com.itstyle.seckill.queue.redis.RedisConsumer.java秒杀四
基于 Kafka 分布式消息队列。
见类:com.itstyle.seckill.queue.kafka.KafkaConsumer.java三、技术选型
开发环境
JDK1.8、Maven、MySQL、IntelliJ IDEA、SpringBoot1.5.10、Zookeeper3.4.6、Kafka_2.11、Redis-2.8.4、Curator-2.10.0
技术框架
SpringBoot 2.2.6.RELEASE + ShardingSphere 4.0.1 + MySQL + Druid + Lombok + Swagger
秒杀架构四、界面展示
五、开源协议
使用Apache2.0开源协议六、源码地址
私信回复:秒杀系统