|
分布式秒杀系统-百万共同抢商品23
发表时间:2018-11-08 11:38来源:Java帮帮-微信公众号 分布式秒杀系统源码:https://gitee.com/52itstyle/spring-boot-seckill.git 开发环境JDK1.7、Maven、Mysql、Eclipse、SpringBoot1.5.10、zookeeper3.4.6、kafka_2.11、redis-2.8.4、curator-2.10.0 启动说明
测试入口http://localhost:8080/seckill/swagger-ui.html 项目截图友情提示由于工作原因,项目正在完善中(仅供参考),随时更新日志,有疑问请留言或者加群 项目介绍SpringBoot开发案例从0到1构建分布式秒杀系统,项目案例基本成型,逐步完善中。 秒杀场景秒杀场景无非就是多个用户在同时抢购一件或者多件商品,专用词汇就是所谓的高并发。现实中经常被大家喜闻乐见的场景,一群大妈抢购打折鸡蛋的画面一定不会陌生,如此场面让服务员大姐很无奈,赶上不要钱了。 业务特点
用户规模用户规模可大可小,几百或者上千人的活动单体架构足以可以应付,简单的加锁、进程内队列就可以轻松搞定。一旦上升到百万、千万级别的规模就要考虑分布式集群来应对瞬时高并发。 秒杀架构架构层级
优化思路
分层优化
全链路压测
整个压测优化过程就是一个不断优化不断改进的过程,事先通过测试不断发现问题,优化系统,避免问题,指定应急方案,才能让系统的稳定性和性能都得到质的提升。 数据采集监控Grafana+Telegraf+Influxdb监控Tomcat集群方案 Grafana+Prometheus系统监控之SpringBoot 代码案例可能秒杀架构原理大家都懂,网上也有不少实现方式,但大多都是文字的描述,告诉你如何如何,什么加锁、缓存、队列之类。但很少全面有的案例告诉你如何去做,既然是从0到1,希望以下代码案例可以帮助到你。当然最终落实到生产,还有很长的路要走,要根据自己的业务进行编码,实施并部署。 你将会在代码案例中学到以下知识:
代码结构:
├─src
│ ├─main
│ │ ├─java
│ │ │ └─com
│ │ │ └─itstyle
│ │ │ └─seckill
│ │ │ │ Application.java
│ │ │ │
│ │ │ ├─common
│ │ │ │ ├─aop
│ │ │ │ │ LockAspect.java
│ │ │ │ │ Servicelock.java
│ │ │ │ │
│ │ │ │ ├─api
│ │ │ │ │ SwaggerConfig.java
│ │ │ │ │
│ │ │ │ ├─config
│ │ │ │ │ IndexController.java
│ │ │ │ │ SpringUtil.java
│ │ │ │ │
│ │ │ │ ├─dynamicquery
│ │ │ │ │ DynamicQuery.java
│ │ │ │ │ DynamicQueryImpl.java
│ │ │ │ │ NativeQueryResultEntity.java
│ │ │ │ │
│ │ │ │ ├─entity
│ │ │ │ │ Result.java
│ │ │ │ │ Seckill.java
│ │ │ │ │ SuccessKilled.java
│ │ │ │ │
│ │ │ │ ├─enums
│ │ │ │ │ SeckillStatEnum.java
│ │ │ │ │
│ │ │ │ ├─interceptor
│ │ │ │ │ MyAdapter.java
│ │ │ │ │
│ │ │ │ ├─lock
│ │ │ │ │ LockDemo.java
│ │ │ │ │
│ │ │ │ └─redis
│ │ │ │ RedisConfig.java
│ │ │ │ RedisUtil.java
│ │ │ │
│ │ │ ├─distributedlock
│ │ │ │ ├─redis
│ │ │ │ │ RedissLockDemo.java
│ │ │ │ │ RedissLockUtil.java
│ │ │ │ │ RedissonAutoConfiguration.java
│ │ │ │ │ RedissonProperties.java
│ │ │ │ │
│ │ │ │ └─zookeeper
│ │ │ │ ZkLockUtil.java
│ │ │ │
│ │ │ ├─queue
│ │ │ │ ├─disruptor
│ │ │ │ │ DisruptorUtil.java
│ │ │ │ │ SeckillEvent.java
│ │ │ │ │ SeckillEventConsumer.java
│ │ │ │ │ SeckillEventFactory.java
│ │ │ │ │ SeckillEventMain.java
│ │ │ │ │ SeckillEventProducer.java
│ │ │ │ │
│ │ │ │ ├─jvm
│ │ │ │ │ SeckillQueue.java
│ │ │ │ │ TaskRunner.java
│ │ │ │ │
│ │ │ │ ├─kafka
│ │ │ │ │ KafkaConsumer.java
│ │ │ │ │ KafkaSender.java
│ │ │ │ │
│ │ │ │ └─redis
│ │ │ │ RedisConsumer.java
│ │ │ │ RedisSender.java
│ │ │ │ RedisSubListenerConfig.java
│ │ │ │
│ │ │ ├─repository
│ │ │ │ SeckillRepository.java
│ │ │ │
│ │ │ ├─service
│ │ │ │ │ ICreateHtmlService.java
│ │ │ │ │ ISeckillDistributedService.java
│ │ │ │ │ ISeckillService.java
│ │ │ │ │
│ │ │ │ └─impl
│ │ │ │ CreateHtmlServiceImpl.java
│ │ │ │ SeckillDistributedServiceImpl.java
│ │ │ │ SeckillServiceImpl.java
│ │ │ │
│ │ │ └─web
│ │ │ CreateHtmlController.java
│ │ │ SeckillController.java
│ │ │ SeckillDistributedController.java
│ │ │
│ │ ├─resources
│ │ │ │ application.properties
│ │ │ │ logback-spring.xml
│ │ │ │
│ │ │ ├─sql
│ │ │ │ seckill.sql
│ │ │ │
│ │ │ ├─static
│ │ │ │ ├─goods
│ │ │ │ │ ├─images
│ │ │ │ │ │ │
│ │ │ │ │ │ └─shopdetail
│ │ │ │ │ │
│ │ │ │ │ ├─js
│ │ │ │ │ │ common.js
│ │ │ │ │ │ jquery-1.9.1.min.js
│ │ │ │ │ │
│ │ │ │ │ └─style
│ │ │ │ │ shopdetail.css
│ │ │ │ │
│ │ │ │ ├─iview
│ │ │ │ │ │ iview.css
│ │ │ │ │ │ iview.min.js
│ │ │ │ │ │
│ │ │ │ │ └─fonts
│ │ │ │ │ ionicons.eot
│ │ │ │ │ ionicons.svg
│ │ │ │ │ ionicons.ttf
│ │ │ │ │ ionicons.woff
│ │ │ │ │
│ │ │ │ └─template
│ │ │ │ goods.flt
│ │ │ │
│ │ │ └─templates
│ │ │ 1000.html
│ │ │ 1001.html
│ │ │ 1002.html
│ │ │ 1003.html
│ │ │ index.html
│ │ │
单机分布式锁应该具备哪些条件
分布式锁
思考改进
|