node队列涉及应用场景之外的并发问题
发布于 9 年前 作者 vendetta0114 3499 次浏览 最后一次编辑是 8 年前 来自 问答

#现在遇到的需求场景为:

  • 用户通过页面输入手机号码和按钮获取到第三方的app下载二维码【此时数据库设计字段state为1】,然后去下载app,并在app内部通过手机号码注册后,node会接收到注册app的注册回调,然后node进行信息存贮【数据库state字段为2】。(场景目的I就是根据state=2的字段的用户进行奖励。)

#问题:

  • 假设奖品数量为100(即state=2的人数上限为100),一个极限的状态为:当state=2的用户数量达到了99,而此时通过流程去下载的用户可能出现积压(处理正在下载app的用户)。
  • 所以就出现:假设此时处于下载app中的用户为20个,并且state=2的用户已经达到了99,那么结果只能是从20个下载用户只能有一个进行存储奖励,造成其他19个用户虽然下载了app并注册,但是得不到奖励。

#解决:

  • 目前的解决方案是:在用户state=2的数量达到90(这个阀值可以变化)的时候,设置队列10个限制,先把处于下载状态的用户存入队列(这个处于下载状态的用户只能是预估的,假设为5),后续队列只接收剩下的5个请求。但是这个解决方案感觉不太可行(因为阀值和处于下载的人群不好判定),所以请教社区大神结合node的更完美的实现方案,在线等,谢谢!
3 回复

自己先顶一下,希望社区好友们提供好的方案。

再弄个 state=3

@hezedu 什么意思,还请详解。

回到顶部