我们都知道NodeJs可以处理比普通Java服务器更多的请求,但是如何为传入的请求维护FIFO类型的结构呢?
比方说闪购,成千上万的请求在短时间内轰炸购买数量有限的东西??
我们如何决定哪个请求首先获取产品并将产品的状态从available
更改为sold out
(只是一个示例(?
谢谢
在node.js中,一次实际上只有一个请求运行(Javascript 解释器是单线程的(,直到你在本机代码中遇到某种异步操作,然后另一个请求开始运行,而另一个请求正在等待 I/O。 如果所有请求都遵循一些有限的资源,那么看看哪个请求通过您的代码获得足够远来获取资源只是一场竞赛。 如果对服务器进行群集以增加可伸缩性,则每个群集运行一个 Javascript 线程。
如果你让每个传入的请求在队列中等待,直到它之前的所有其他请求都完全完成(可以完成的事情(,那么你会严重破坏你的节点.js服务器的可扩展性,并且大多数时候它会闲置等待一些 I/O 操作完成,所以这似乎不太可能是正确的设计。
假设闪购,成千上万的请求在短时间内轰炸 购买数量有限的东西的时间??
我们如何决定哪个请求首先获得产品以及 将产品状态从可用更改为售罄(只是一个 例子(?
这里通常的方案是让第一个通过以声明资源的请求拥有它(即使多个资源可能同时运行(。 这是否总是首先到达您的服务器的请求尚不清楚,但它会很接近,并且用户社区不太可能知道它是否恰好由于两个请求的处理速度差异而关闭了几毫秒。
您必须确保访问共享资源(如数据库(的代码对于并发是安全的,并且不会对共享数据做出任何麻烦的假设。