一、项目背景:
本次抽奖系统实现是在视频中内置一个线上活动抽奖系统,奖品是在一个时间段区间内均匀发布,用户可以在这个时间段内参与抽奖。
二、项目架构
活动抽奖平台采用微服务架构来完成,在功能上实现拆分为用户、网关、以及抽奖微服务,其中用户、网关是后台项目通用,活动抽奖的业务逻辑主要在抽奖服务完成。
网关:处理前端请求,聚合后台各个微服务的处理结构,JWT鉴权、router路由
用户服务:管理用户信息,比如登录、注册
抽奖服务:处理抽奖逻辑、条件校验、中奖、发奖等
三、设计环节
1.需求整理与分析:
1.1业务需求
需要两个方面的功能:奖品信息的后台管理、抽奖逻辑的是实现
1.1.1奖品后台管理
实现奖品的增删改查、满足奖品上传、开放时间、数量以及中奖概率是指
1.1.2抽奖逻辑
抽奖逻辑有三个核心:准入校验、中奖匹配、奖品发放
对于可以参加抽奖的用户有一个严格的校验,满足一定的条件才可以进行抽奖,其中主要校验逻辑需要有用户黑名单,ip黑名单校验,其次对于用户每日参与抽奖次数以及ip每日参与抽奖次数也要有一个限制,不能用一个用户或者同一个ip每天能无限次参与抽奖。对于中奖匹配(其过程就是随机数的区间匹配),通过一定概率来匹配奖品,对于每种不同的奖品的中奖率要不一样,而对于每个人的中奖率是要相同的。最后对奖品的发放,满足能够成功的发放,既能够扣减库存成功,这里就要求库存足够。对于成功获奖的用户需要记录一条获奖记录,方便后面获奖统计。对于中大奖的用户,还需要考虑将其加入到黑名单一段时间,为了中奖的公平性,防止同一个用户频繁中奖。
1.2非功能需求
1.2.1性能:
要求系统能够对抗高并发请求,面对大量用户的抽奖请求能够即时处理
1.2.2幂等性:
对于同一个用户由于网络原因在同一时间内的多次抽奖请求要能够有幂等性保证,保证同一时间同一用户只能发起一次抽奖
1.2.3安全性
对于奖品的发放,要保证库存正确扣减,不能出现“超发”
2.系统架构设计
2.1整体架构:
2.2整体业务:
业务逻辑简单来看就是完成一个奖品的匹配和发放,整体业务分为:网关微服务、用户微服务、抽奖系统微服务
抽奖流程:
2.2.1网关微服务
网关主要是提供后台系统对外的流量统一入口,所有的外部请求先打到网关,由网关做请求转发,同时也提供鉴权,限流等
2.2.2用户微服务
用户微服务是一个相对独立的功能,首先并不是所有的用户都有资格参与抽奖,只有系统内部人员才有资格,所以需要对内部系统人员进行管理和维护(包括登录的账户密码、年龄邮箱等信息)。
2.2.3抽奖微服务
抽奖微服务是整个抽奖系统的核心,主要负责抽奖核心逻辑的实现,包括准入校验,奖品匹配和发放。除此之外,还包括奖品后台的管理系统
3.数据库设计
3.1用户表
字段 | 类型 |
id | int(10) |
user_name | varchar(255) |
pwd | varchar(255) |
sex | int(10) |
age | int(10) |
varchar(255) | |
contact | varchar(255) |
mobile | varchar(255) |
id_card | varchar(255) |
create_time | datetime |
modify_time | datetime |
3.2奖品表
字段 | 类型 |
id | int(10) |
title | varchar(255) |
prize_num | int(11) |
prize_code | varchar(255) |
left_num | int(11) |