抽奖系统实现总结
2019-08-19 本文已影响0人
时间道
技术架构:
java + redis + mysql
-
系统定位*:
作为承接前台老虎机等各种游戏功能,后台对接第三方各种奖项发放。
作为抽奖和礼品包发放的统一入口 -
系统功能:
活动及活动规则维护,抽奖奖池维护 -
问题点:
如何保证公平性?如何让运营灵活控制活动?
奖池生成算法:只要是和池子有关系的项目,都可以用这种方式
防止奖品被超发:最大奖品数、没人最大中奖次数、最大抽奖次数
参与条件的设置:规则引擎 -
安全性:
抽奖:用户认证
领奖:内网访问,MD5加密验签 -
抗并发:
使用redis集群的分布式缓存提高抗并发能力
使用生产、消费模式处理中奖信息:
生产者将中奖信息存入redis的队列
消费者消费队列同步数据到mysql,并调用第三方接口完成发奖 -
防刷、限流:
1、奖池设置每天最大中奖数、每人最大中奖数,使用redis原子计数来控制并发
2、外围nginx针对ip做频次控制、粗细管道
3、java系统内部做限流:返回请求太多
做不到绝对的防刷,只能增加刷的成本