# camp_lucky_draw **Repository Path**: afuna/camp_lucky_draw ## Basic Information - **Project Name**: camp_lucky_draw - **Description**: 扭蛋特卖哇 灵感来源:仙凡幻想的丹炉夺宝项目 技术栈:golang, mysql, redis, rabbitmq - **Primary Language**: Go - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-04-14 - **Last Updated**: 2025-04-22 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 扭蛋特卖:golang实现 ## 规则 玩家消耗灵玉进行抽奖,抽奖分为普通抽奖和保护抽奖,抽奖结果根据权重决定不同结果出现的概率,包括了升层和降层,玩家升到更高层将会有更丰厚的奖励,普通抽奖的情况下如果不小心抽到了降层则只能选择领取降层后的结果层数,领取完奖励才能开启下一层,但如果玩家选择保护抽奖,则降层后仍能继续本轮抽奖游戏。 领取层奖励:只能选择一个位置领取,领取完本轮结束,回到第一层 领取累计奖励:消耗一定的代币能领取对应的奖励 ## 技术栈 golang: goroutine, channel, context, gorm 数据库:mysql 服务器缓冲层:redis 客户端缓冲层:gocache 消息队列:rabbitMQ ## 亮点 - 条件管道 - TCP分片传输接收 - redis zset排行榜应用、ttl过期键通知 - rabbitmq增量推送、异步奖励发放以及消息通知 - 内存池机制 - Context协程管理 ## 客户端界面 ![输入图片说明](img/client_menu.png) ## 实时排行榜 ![输入图片说明](ranking_monitor/%E6%8E%92%E8%A1%8C%E6%A6%9C%E9%A1%B5%E9%9D%A2.jpg) ## 自动化压测脚本工具 在200个客户端并发请求的情况下,对比原生系统,引入redis+rabbitmq+gocache后,QPS提升约1.4%,平均延迟时间降低了99.5%,P99降低了约76.5%。 通过消融,引入rabbitmq消除了全部失败请求,并将QPS提升了约1.85%, 平均响应时间下降超过 99%,P99 延迟减少超 77%; 引入redis后,尾延迟表现略有优化,高并发稳定性更强,P99降低了约7.2%; 引入gocache后有效优化平均响应时间,降低了约17.6%。 ### 数据部分 | 方案 | 成功总数 | 失败总数 | 成功率 | QPS(Mean) | 平均延迟(Avg Mean) | P99 延迟(Mean) | |----------------------------|----------|----------|----------|--------------|------------------------|------------------| | 原生系统(origin) | 118139 | 226 | 99.81% | 1.9691 | 0.01448 | 0.02547 | | RabbitMQ | 120544 | 0 | 100.00% | 2.0055 | 0.00008 | 0.00579 | | Redis + RabbitMQ | 120009 | 0 | 100.00% | 1.9966 | 0.000085 | 0.00538 | | Redis + RabbitMQ + GoCache | 119983 | 0 | 100.00% | 1.9966 | 0.00007 | 0.00599 | --- ## 各指标详情 ### 原生系统(origin) | 指标类型 | QPS | Avg | P99 | |----------|-----------|------------|------------| | Mean | 1.9691 | 0.01448 s | 0.02547 s | | Median | 1.9831 | 0 | 0.005 s | | Mode | 0.5231 | 0 | 0.006 s | --- ### RabbitMQ | 指标类型 | QPS | Avg | P99 | |----------|-----------|------------|------------| | Mean | 2.0055 | 0.00008 s | 0.00579 s | | Median | 2.0078 | 0 | 0.006 s | | Mode | 1.8212 | 0 | 0.005 s | --- ### Redis + RabbitMQ | 指标类型 | QPS | Avg | P99 | |----------|-----------|------------|------------| | Mean | 1.9966 | 0.000085 s | 0.00538 s | | Median | 1.9980 | 0 | 0.005 s | | Mode | 1.8070 | 0 | 0.006 s | --- ### Redis + RabbitMQ + GoCache | 指标类型 | QPS | Avg | P99 | |----------|-----------|------------|------------| | Mean | 1.9966 | 0.00007 s | 0.00599 s | | Median | 1.9882 | 0 | 0.006 s | | Mode | 1.7501 | 0 | 0.006 s |