node队列涉及应用场景之外的并发问题
#现在遇到的需求场景为:
- 用户通过页面输入手机号码和按钮获取到第三方的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的更完美的实现方案,在线等,谢谢!