@TOC
架构背景
系统需求
- 尽可能支持多用户量,最好百万级
- 支持奖品池(一个活动可设置多类奖品,每类若干实际奖品)
- 活动时间范围,活动有开始结束时间
- 支持虚拟/实物奖品
- 抽奖人员范围约束
- 防范DOS冲击,薅羊毛操作
- 人员黑白名单控制,启用白名单则只有其中人可以抽奖,黑名单人员不可进入
- 支持个人在某个活动中最大抽奖次数限制
开发技术、环境
数据库 | mysql8 |
nosql | redis |
编程语言 | java |
开源框架 | springcloud |
配置中心 | necos |
网关代理 | nginx |
分布式事务框架 | Seata |
部署环境 | docker容器化部署(基础镜像centos) |
集中版
部署模型
逻辑架构
分布式
测试报告
空接口下(即service中不加逻辑)
@Service
public class DrawServiceImpl implements DrawService {
@Override
public Object draw(DrawDTO dto) {
log.info("抽奖activityId={}", dto.getActivityId());
return null;
}
}
单接口TPS可过万
测试TPs
注册 --> 登录–> 抽奖
用户量50w
测试工具:jmeter 5线程启动测试
初始tps达到150/s
20w用户进入后降低到75/s左右
30w降低到50/s