持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第24天,点击查看活动详情
每日英语:
For what it's worth, it's never too late.
翻译:只要是值得做的事,永远都不怕晚。 ——《本杰明·巴顿奇事》
秒杀架构设计
针对秒杀抢单业务的架构设计,不能和普通的商品抢单一样,架构应该考虑热门商品造成的并发、冷门商品能有可用的系统资源、波动商品走向热门的发现功能、高并发抢单超卖问题解决等,如上图架构设计:
1:用户抢单的时候,会将用户抢购的商品信息存入到大数据分析系统Apache Druid。
2:抢单信息存入到Apache Druid后,进行实时分析,访问频率高的商品将被存入到Redis缓存单独隔离。
3:用户抢单先经过Nginx,Nginx做了限流后,请求会到达Gateway集群。
4:Gateway集群会判断当前商品是否是热门商品。
5:如果商品是热门商品,在Gateway中会进行排队(MQ)下单,此时抢单流程结束。如果是非热门商品,直接下单即可。
6:普通订单直接下单,热门商品下单需要读取排队信息(MQ)进行下单,下单后将抢单信息通知到前端(WebSocket)。
秒杀表结构
上面我们分析过秒杀业务,我们接下来对秒杀业务的表结构进行分析。
商品表:
CREATE TABLE `seckill_goods` (
`id` varchar(60) NOT NULL,
`sup_id` varchar(60) DEFAULT NULL COMMENT 'spu ID',
`sku_id` varchar(60) DEFAULT NULL COMMENT 'sku ID',
`name` varchar(100) DEFAULT NULL COMMENT '标题',
`images` varchar(150) DEFAULT NULL COMMENT '商品图片',
`price` int(20) DEFAULT NULL COMMENT '原价格',
`seckill_price` int(20) DEFAULT NULL COMMENT '秒杀价格',
`num` int(11) DEFAULT NULL COMMENT '秒杀商品数',
`store_count` int(11) DEFAULT NULL COMMENT '剩余库存数',
`content` varchar(2000) DEFAULT NULL COMMENT '描述',
`activity_id` varchar(60) DEFAULT NULL COMMENT '活动ID',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
秒杀订单表:
CREATE TABLE `seckill_order` (
`id` varchar(60) NOT NULL COMMENT '主键',
`seckill_goods_id` varchar(60) DEFAULT NULL COMMENT '秒杀商品ID',
`money` int(10) DEFAULT NULL COMMENT '支付金额',
`username` varchar(50) DEFAULT NULL COMMENT '用户',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`pay_time` datetime DEFAULT NULL COMMENT '支付时间',
`status` int(1) DEFAULT NULL COMMENT '状态,0未支付,1已支付',
`weixin_transaction_id` varchar(30) DEFAULT NULL COMMENT '交易流水',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
活动表:
CREATE TABLE `seckill_activity` (
`id` varchar(60) NOT NULL,
`activity_name` varchar(60) NOT NULL COMMENT '活动名字',
`type` int(1) NOT NULL COMMENT '活动分类 0 shop秒杀、1 每日特价、2 大牌闪购 、 3 品类秒杀 、 4 节日活动',
`start_time` datetime NOT NULL COMMENT '开始时间',
`end_time` datetime NOT NULL COMMENT '结束时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
总结
本篇主要介绍了一下秒杀架构设计和秒杀表结构设计。