国内最专业的IT技术学习网

UI设计

当前位置:主页 > UI设计 >

简单几步,设计一个高性能的秒杀系统!

发布时间:2019/06/27标签:   库存    点击量:

原标题:简单几步,设计一个高性能的秒杀系统!
本次采纳循序渐进的方法逐渐进步机能到达并发秒杀的后果,文章较长,请预备好瓜子板凳!图片来自包图网之前在 Java-Interview 中提到过秒杀架构的计划,此次基于此中的实践简略完成了一下。本文全部波及的代码: https://github.com/crossoverJie/SSM https://github.com/crossoverJie/distributed-redis-tool起首来看看终极架构图:先简略依据这个图谈下恳求的流转,由于前面不论怎样改良,这些都是稳定的: 前端恳求进入 Web 层,对应的代码就是 Controller。 以后将真正的库存校验、下单等恳求发往 Service 层,此中 RPC 挪用依旧采纳的 Dubbo,只是更新为最新版本。 Service 层再对数据停止落地,下单实现。无穷制抛开秒杀这个场景来讲,畸形的一个下单流程能够简略分为以下几步: 校验库存 扣库存 创立定单 付出基于上文的架构,咱们有了以下完成,先看看现实名目的构造:仍是和从前一样: 供给出一个 API 用于 Service 层完成,以及 Web 层花费。 Web 层简略来讲就是一个 Spring MVC。 Service 层则是真正的数据落地。 SSM-SECONDS-KILL-ORDER-CONSUMER 则是后文会提到的 Kafka 花费。数据库也是只要简略的两张表模仿下单:CREATETABLE`stock`(`id`int(11)unsignedNOTNULLAUTO_INCREMENT,`name`varchar(50)NOTNULLDEFAULT''COMMENT'称号',`count`int(11)NOTNULLCOMMENT'库存',`sale`int(11)NOTNULLCOMMENT'已售',`version`int(11)NOTNULLCOMMENT'悲观锁,版本号',PRIMARYKEY(`id`))ENGINE=InnoDBAUTO_INCREMENT=2DEFAULTCHARSET=utf8;CREATETABLE`stock_order`(`id`int(11)unsignedNOTNULLAUTO_INCREMENT,`sid`int(11)NOTNULLCOMMENT'库存ID',`name`varchar(30)NOTNULLDEFAULT''COMMENT'商品称号',`create_time`timestampNOTNULLDEFAULTCURRENT_TIMESTAMPONUPDATECURRENT_TIMESTAMPCOMMENT'创立时光',PRIMARYKEY(`id`))ENGINE=InnoDBAUTO_INCREMENT=55DEFAULTCHARSET=utf8;Web 层 Controller 完成:@AutowiredprivateStockServicestockService;@AutowiredprivateOrderServiceorderService;@RequestMapping("/createWrongOrder/{sid}")@ResponseBodypublicStringcreateWrongOrder(@PathVariableintsid){logger.info("sid=[{}]",sid);intid=0;try{id=orderService.createWrongOrder(sid);}catch(Exceptione){logger.error("Exception",e);}returnString.valueOf(id);}此中 Web 作为一个花费者挪用看 OrderService 供给进去的 Dubbo 效劳。Service 层, OrderService 完成,起首是对 API 的完成(会在 API 供给出接口):@ServicepublicclassOrderServiceImplimplementsOrderService{@Resource(name="DBOrderService")privatecom.crossoverJie.seconds.kill.service.OrderServiceorderService;@OverridepublicintcreateWrongOrder(intsid)throwsException{returnorderService.createWrongOrder(sid);}}

版权信息Copyright ? IT技术教程 版权所有??? ICP备案编号:鲁ICP备09013610号