实时:Node.js,MongoDB和Redis?

好的,首先我要告诉你,我对标题中提到的所有技术都是新手。

我想制作一个新的应用程序。 把它看作是一个实时交易引擎(例如股票)。

所以,有两件事真的很重要:

  1. 速度/performance:每个人都必须实时看到交易
  2. 安全性:同样的交易可以同时进行,但只有一个可以成功

我想到了这样一个方法:

如果用户想要以每股100美元的价格购买10股X股票,他就会下订​​单,我用Redis存储(速度),并用socket.io把它推送给所有的客户。 那么,一旦另一个用户想要以100美元出售15个peaces,那么脚本应该检查是否有一个开放的买单。 如果是这样,它将其保存为MongoDB中的成功事务(persistance),并closures10个peaces的购买订单。

在这个例子中,剩下5个peaces。 脚本会显示这样的计算:15(卖100美元)减10(买100美元)等于5左。 每次有人想要交易的东西,这个计算将被作出,因为我不知道有多less股票剩下的交易。

编辑:或者我可以在Redis中减去15个peaces中的10个peaces,这样我就不需要每次计算了。 但如果出现什么问题,我不知道原始数据是什么。 这是一个问题。

现在的问题是:

  1. 你会这样做吗? 更好的想法也许?
  2. 如果两个用户在同一时间完成相同的订单,会发生什么情况? 这是否会发生,它被存储在MongoDB两次作为不同的成功交易? 当然,你可以通过Redis和MongoDB进行审计并进行比较。 但那将是一个可怕的解决scheme。

希望你明白我想问什么。 提前致谢!

首先,如果你对所使用的堆栈没有任何了解,那么告诉我需要高性能(高可用性,高安全性等)并不是一个好主意。 对于你使用的所有工具来说,绝对是新的,如果它能够正常工作,你应该感到高兴。

至于你的问题:首先看看其他人做了类似的事情。 这里是一个开源的比特币交易引擎,它使用node.js ,这是一个很好的例子来研究(这是一个复杂的,所以深吸一口气)。 如果你想使用mongo,你需要知道它不支持事务,所以你需要看看如何在那里自己实现它们。 这两个例子真的很好解释它 。