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

用户抽奖次数限制

奖品数量限制

奖品发放的分布

中奖的概率的可控性

用户抽象次数限制

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

奖品数量限制

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

奖品发放的分布

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

中奖的概率的可控性

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

关于优化

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

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

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

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

附录(简单流程图)

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

  1. 唱歌如何保持高位置_什么是高位置发声?

    高位置是正确歌唱发音的一种声音效果,是各个发声器官.歌唱机能有机配合.协调运动.整体发音的一种感觉.从视觉和触觉而论,是看不见.摸不着的,具有抽象性:从听觉来说,声音却又是具体的,因为声音是由听觉感受 ...

  2. java 无锁缓存_如何在高并发环境下设计出无锁的数据库操作(Java版本)

    一个在线2k的游戏,每秒钟并发都吓死人.传统的hibernate直接插库基本上是不可行的.我就一步步推导出一个无锁的数据库操作. 1. 并发中如何无锁. 一个很简单的思路,把并发转化成为单线程.Jav ...

  3. java接口并发衡量_java 后端设计高并发接口总结

    如何设置高并发接口 一.并发队列的选择 二.请求接口的合理设计 三.高并发下的数据安全 3.1 超发的原因 3.2 悲观锁思路 3.3 FIFO队列思路 3.4 乐观锁思路 一.并发队列的选择 Jav ...

  4. 2560x1600分辨率高吗_做设计还弄不清分辨率和像素之间的关系,来了解下他们是怎么换算...

    许多同学都在问我关于像素的问题,为什么印刷时要300分辨率以上?网页为什么72就够了?做户外喷绘30,甚至巨幅画面20就上了.关于这些还是很多人不知道的,要不也不会被卖手机的忽悠,各大手机推销员拿着手 ...

  5. oom 如何避免 高并发_如何设计这样一个高并发系统?

    netty处理socket连接,直接用定长协议的decoder即可,可以把你们这个状态数据作为维持长连接的心跳,比如3分钟内无数据连接关闭.这块高并发没什么难度1-2台机器解决问题,毕竟逻辑简单量还好 ...

  6. 三星java遗忘的勇士_顺位不高的无名小辈,敢打敢拼的悍将,永不放弃的代表人物!...

    在NBA曾有一支球队叫做夏洛特山猫队,它们队内的领袖杰拉德华莱士被人称为"猫王"."猫王"杰拉德华莱士的职业生涯非常精彩,他这个人也非常有传奇性,他在NBA起起 ...

  7. java 集群会话管理_架构设计之Spring-Session分布式集群会话管理

    前言 通常在web开发中,会话管理是很重要的一部分,用于存储与用户相关的一些数据.对于JAVA开发者来说,项目中的session一般由Tomcat或者jetty容器来管理. 特点介绍 尽管使用特定的容 ...

  8. 苹果原壁纸高清_苹果壁纸 | 高清图片全面屏壁纸

    点击[苹果X高清壁纸]右上角找到[-] 关注设我为✨星标/置顶 ✨爱你们哟   找图加小编VX(AJ-099999) 查看封面图,请点击底部查看. 每日推送不一样的壁纸.如果你喜欢今天的壁纸 Push ...

  9. mysql降低高水位_[数据库]数据高水位分析

    [数据库]数据高水位分析 0 2014-10-16 11:02:12 2014-10-04 BaoXinjian 一.摘要 PLSQL_性能优化系列14_Oracle High Water Level ...

最新文章

  1. Hyper-V 2016 系列教程12 Hyper-V 体系结构
  2. 判断32位整数二进制中1的个数
  3. c语言Linux用线程创建文件,Linux环境下C语言线程创建---简单代码
  4. scada系统集成_MES/MOM与WMS系统集成应用案例-系统接口、交互数据分析
  5. Ubuntu下基于Virtualenv构建Python开发环境
  6. 外贸网站建设如何打造优质外贸网站?
  7. F5紧急修复严重的 BIG-IP 预认证 RCE 漏洞
  8. LongAdder原理
  9. IPVS使用的Netfilter Hook点
  10. 结合量价持仓分析的股指期货日内交易策略
  11. 联想E43升级bios激活windows 7
  12. 朗逸保险丝安培数及保险丝配置说明
  13. 智能车八邻域图像算法
  14. Android Unable to delete file: build\intermediates\manifests\full\debug\AndroidManifest.xm
  15. SVG格式文件插入Word/WPS,三种简单快捷的方法,实现图片高清无损
  16. tv端h5_最新版H5双端影视APP源码
  17. 学习笔记:李航统计学习方法
  18. 简单实用远控小工具Todesk
  19. windows微软商店下载应用失败/下载故障的解决办法;如何在网页上下载微软商店的应用
  20. ad17 linux 版本,Altium Designer更新得那么快,到底应该用哪个版本?

热门文章

  1. huffman编码的程序流程图_F28379D之CLB解码多摩川编码器2——LIB版例程讲解(原创)...
  2. 华为升级harmonyos的机型名单,华为鸿蒙 OS 2.0 系统适配名单已出,四月推送,天玑机型暂时无缘...
  3. echart freemarker 模板_SpringBoot集成Freemarker模板生成Echarts图片(三)
  4. 菱形继承和虚继承、对象模型和虚基表
  5. oracle 查看数据库性能,oracle 11G使用statspack查看数据库的性能
  6. 新颖的c语言题目,新颖版c语言经典习题100例(全面面)
  7. php实现分页mssql,PHP操作mssql数据库类,含分页类[分页类原创]
  8. win7变成xp风格了怎么改回_微软看了会沉默,把 Windows 10 变成经典 98 风格
  9. HTML5链接tcpUDP,UDP/TCP协议 网络调试工具源码(C#)
  10. Nginx的执行阶段详解