java 抽奖 高并发处理_如何设计高并发下的抽奖?

关于抽奖,需要考虑的点有很多,这里稍微整理了下主要需要考虑以下三点:

用户抽奖次数限制

奖品数量限制

奖品发放的分布

中奖的概率的可控性

用户抽象次数限制

一个用户必须限制抽奖的次数,而同一个用户的并发几率其实是很小的,所以这里可以用悲观锁来控制用户的抽奖次数。

奖品数量限制

因为并发修改一个奖品的数量可能性是很大的,特别是一些安慰奖,如果这里我们再用悲观锁的话,很容易造成锁超时。所以这里我选择用乐观锁来解决可能出现的并发脏读的情况。

奖品发放的分布

为了防止用脚本来刷抽奖,所以这里需要控制一下奖品发放的一个分布,中大奖需要一个时间间隔,当然这里通过代码来控制是很容易实现的(当然这里也需要考虑一下并发中到两个大奖的情况,也可以通过乐观锁来控制)

中奖的概率的可控性

当我们开始估计抽奖大概会有10W人参加,所以我在设计概率的时候是按照10w来设计的,但是突然发现活动开始一个小时候以后抽奖人数就达到了5W,这个时候就需要可以动态来调整中奖的概率了。这里最好的方式是,不要把中奖概论写死在数据库,而是通过中奖次数/参加人数来计算出来,这样就可以方便的动态的改变中奖概率了。

关于优化

如果并发量实在是太大,导致数据库的QPS异常的高。那么可以在数据库前面加一层缓存来挡一下,把需要写进数据库的数据放入队列。当使用了这种架构架构,就需要考虑一些数据一致性的问题了,比如说

怎么保证数据库的数据和缓存的数据是一致的

如果队列挂掉了,怎么保证缓存的数据能够及时更新到数据库中。如果缓存挂掉了,怎么保证抽奖能够继续进行下去(当然这里可以进行业务妥协,如果缓存挂掉整个抽奖挂掉,如果来不及写进数据库的数据,就当做这些事情没有发生,这就会导致某些人抽奖次数超过限定次数,或者某些奖中奖次数超过了限定次数)

关于优化中我对一些异常情况的解决方法不是很了解,希望懂的朋友可以指教一下

附录(简单流程图)

28daf5be6b1c9bbc1c4ddc510ac82b5f.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/537967.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

WPF圆角按钮与触发颜色变化

原文:WPF圆角按钮与触发颜色变化<Button x:Name"button1" Content"按钮1" Margin"10,10,0,0" Cursor"Pen"><Button.Template><ControlTemplate><Border CornerRadius"15,15,15,15"><Border.Back…

咖啡豆的励志故事

好多年前就听过这个故事&#xff0c;以前没感触&#xff0c;最近特有感触。

PowerDesigner V16.5 安装教程以及汉化(数据库建模)

原文地址&#xff1a;https://blog.csdn.net/tgbyn/article/details/72809116 ----------------------------------------------------------------------一、power designer是什么以及是干什么的&#xff1f; power designer是能进行数据库设计的强大的软件&#xff0c;是一款…

nginx 代理多个服务器——多个server方式

原文链接&#xff1a;https://blog.csdn.net/wild46cat/article/details/52997005 ------------------------------------------------------------- 配置文件下载地址&#xff1a;https://download.csdn.net/download/zengmingen/10462400nginx 代理多个服务器——多个server方…

SQL Server如何链接到 Oracle并查询其中的数据?并实现做接口

今天用Oracle的驱动教大家如何从SQL Server链接到Oracle. 1. 服务器上需要安装Oracle 64位的客户端或者服务端&#xff0c;安装过程就省略了。不会的同学可以网上搜索一下安装方法&#xff0c;很详细&#xff0c;这里不赘述。 安装完成后SQL Server的访问接口上会新增”OraOLE…

java spring bean配置文件_Spring基于xml文件配置Bean过程详解

这篇文章主要介绍了spring基于xml文件配置Bean过程详解,文中通过示例代码介绍的非常详细&#xff0c;对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下通过全类名来配置&#xff1a;class&#xff1a;bean的全类名&#xff0c;通过反射的方式在IOC容器中创建B…

win10升级后chrome碰到对话框就卡死

低版本的 chrome 会出现这样的问题 解决方法&#xff1a; 设置-------高级设置-----取消硬件加速

客户端SDK测试思路

本文来自网易云社区作者&#xff1a;万春艳是什么客户端SDK是为第三方开发者提供的软件开发工具包&#xff0c;包括SDK接口、开发文档和Demo示例等。SDK和应用之间是什么关系呢&#xff1f;以云信即时消息服务为例&#xff0c;如下图所示&#xff0c;应用客户端通过调用云信SDK…

SQL中使用DISTINCT显示多个字段的方法(不使用DISTINCT了)

原文连接&#xff1a; https://www.cnblogs.com/alanliu/archive/2008/02/25/1080626.html --------------------------------- 效果是DISTINCT CUS_NO,并且同时显示CUS_NAME.SELECTCUS_NO,MIN(CUS_NAME) ASCUS1 FROMdbo.CUS GROUPBYCUS_NO

016 pickle

英文也是泡菜的意思。 学完了&#xff0c;还是感觉这个模块是蛮不错的&#xff0c;对多数据保存到文件中&#xff0c;然后在使用的时候&#xff0c;再读取出来&#xff0c;让程序闲的更加优雅&#xff0c;简洁。 一&#xff1a;介绍 1.为什么使用 在开篇已经介绍了&#xff0c;…

用java编写日历添加窗口一角_Java 实训4 编写一个窗体程序显示日历

实训要求&#xff1a;1.使用BorderLayout 进行总体布局2.在North 位置放置包含两个按钮( 上月和下月)的Panel3.在South 位置放置一个Label 用于显示当前年份和月份4.在Center 位置放置一个显示日历的Panel5.显示日历的Panel 设置7 行7 列的GridLayout 布局&#xff0c;其中第1行…

ER图转换成关系模式集的规则

转自己博客园文章 A与B1&#xff1a;1 在A表里把B表的主键和关系的属性加入到A表中 或B表里把A表的主键和关系的属性加入到B表中 举例 男人表身份证号姓名年龄女人身份证号登记日期女人表身份证号姓名年龄 A与B1:N 在A表中加入B表的主键与关系的属性 小米公司纳税号公司全称…

python3数字类型分为_Python初学3——数字类型及操作

一、数1.1 整数类型( 十、二、八、十六进制 )python中整数类型与数学中的整数概念一致&#xff0c;有正有负&#xff0c;取值任意。整数的表示形式&#xff1a;整数类型表示形式举例十进制34,163,210二进制0b1101 或 0B1101八进制0o357 或 0O357十六进制0x45ac 或 0X45ac1.2 浮…

idea 2018.1 创建springboot开启找回Run Dashboard

原文连接&#xff1a;https://www.cnblogs.com/yangtianle/p/8818255.html ---------------------------------------------------------------------------------配置方法首先找到项目中.idea文件下的workspace.xml开打接下来找到<component name"RunDashboard"&…

微信支付-服务端-bug排查记录

微信支付服务端需要对微信官方的统一下单接口发送请求获取prepayId作为app端调用支付的凭证&#xff0c;如果返回签名错误&#xff0c;首先排查代码层面的错误。 方法&#xff1a;使用微信官方的签名算法检验。 地址&#xff1a;https://pay.weixin.qq.com/wiki/doc/api/jsapi.…

Sqlserver备份存储过程

查了网上找不到快速备份Sqlserver存储过程的方法&#xff0c;心里想&#xff0c;如果Sqlserver不自带这个功能&#xff0c;真是太low了。步骤1&#xff1a;打开存储过程文件夹步骤2&#xff1a;按 F7 键&#xff0c;打开“对象资源管理器详细信息”窗口步骤3&#xff1a;点击“…

小哼买书JAVA编写,04_小哼买书

现在来看一个具体的例子“小哼买书”(根据全国青少年信息学奥林匹克联赛 NOIP2006 普及组第一题改编),来实践一下 章所学的三种排序算法。Paste_Image.png小哼的学校要建立一个图书角,老师派小哼去找一些同学做调查,看看同学们都喜欢读哪些书。小哼让每个同学写出一个自己最想读…

php 接口安全解决方案,php接口数据安全解决方案(一)

前言目的&#xff1a;1.实现前后端代码分离&#xff0c;分布式部署2.利用token替代session实现状态保持&#xff0c;token是有时效性的满足退出登录&#xff0c;token存入redis可以解决不同服务器之间session不同步的问题&#xff0c;满足分布式部署3.利用sign&#xff0c;前端…

Teamview连接Windows server问题

场景&#xff1a; 服务器在集团总部杭州&#xff0c;网管在集团宁波分公司&#xff0c;连接服务器通过内网远程桌面。过程&#xff1a; 网管给了tv的账号&#xff0c;密码。连接的时候一直连不上去。卡在“正在初始化连接参数”。后来网管不信&#xff0c;远程桌面了下&#xf…

nginx An attempt was made to access a socket in a way forbidden by its access permissions

在安装了 sqlserver2008 的win7 与 win2008 上启动 nginx&#xff0c;绑定80端口&#xff0c;报错&#xff1a; nginx An attempt was made to access a socket in a way forbidden by its access permissions查了百度&#xff0c;说修改注册表&#xff0c;但我的电脑上找不到文…