【发布时间】:2020-12-01 00:13:55
【问题描述】:
所以我有一个奇怪的问题,这几天我一直在摸索,我似乎无法找到任何在线解决方案。
我正在移动应用程序上开发一种订购服务,每次下订单时都会使用唯一的 orderID。
每天,订单 ID 基值重置回 100,然后当当天下订单时,它会递增:101、102、103、104 等。
我的 OrderID 是根据名为 orders 的集合中的“活动订单”数量计算得出的,+1。因此,如果有 5 个有效订单,则返回给客户的新订单 ID 为 106。除了一个问题之外,这工作正常:
- 我的 node.js API 有 4 个实例同时工作,以平衡负载。
- 所有这些节点都连接到同一个 mongo 数据库。
因此,如果两个订单并行下达,实例 1 和 2 分别接受一个订单,都询问数据库有多少“活动订单”,显然它们都得到相同的值,因为它几乎发生在同时。因此,它们都返回相同的订单 ID,然后我们就有两个具有相同订单 ID 的客户。
如果我将设置减少到一个实例,那么这将非常完美,因为它消除了订单并行运行的可能性。但是,对于 HA 和负载平衡,我需要能够使用多个实例水平扩展。
是否有避免这种情况的标准做法?有没有更好的方法来跟踪这样的 orderID?
任何帮助将不胜感激。
谢谢。
【问题讨论】:
标签: javascript node.js mongodb mongoose nosql