问题描述
我已经了解了 node express 和 cluster 并且已经能够成功 在 Windows 操作系统上实现它。 Windows 上 cpu 内核的概念很容易掌握,因为我了解 os.cpu 内核。我们还计划在 iSeries 上测试 Web 服务,这将获得大量并发量。当我搜索有关在 iSeries 上的集群中运行 nodejs 的信息时,我发现这篇文章提到了“工作线程”。
这让我想到了“在 IBM iSeries 上使用 node express,我们应该使用工作线程还是集群?”
解决方法
请注意,该特定文章讨论的是 z/OS 大型机上的节点,而不是 IBM i(又名 iSeries)中端系统。
话虽如此,Z/OS 或 IBM i 上的 nodejs 与 Windows/Linux 上的 nodejs 并没有什么不同。
看看这篇关于 Single thread vs child process vs worker threads vs cluster in nodejs
的文章结论
尽管 Node js 为
多线程,这并不一定意味着我们应该总是
我们的 Web 应用程序是多线程的。 Node js就是这样构建的
默认的单线程行为优于
网络服务器的多线程行为,因为网络服务器倾向于
受 IO 限制,nodejs 非常适合处理异步 IO
以最少的系统资源进行操作,Nodejs 以此闻名
特征。另一个线程的额外开销和复杂性或
过程使程序员很难使用简单的
IO 任务。但是在某些情况下,Web 服务器会受到 CPU 限制
操作,在这种情况下,启动一个工人真的很容易
线程或子进程并委托该任务。所以,我们的设计
架构真正归结为我们的应用程序的需求和
要求,我们应该基于此做出决定。
鉴于 IBM i 是为 DB 操作定制的,nodejs 对非阻塞 I/O 的内置支持是完美的。如果您收到的请求数量超过单个实例的处理能力,请务必建立一个集群。
如果您碰巧在 nodejs 中执行 CPU 密集型工作,请考虑使用子进程或工作进程。
IBM i(或 z/OS)的关键在于,与“单一应用程序”Window/Linux 系统相比,这些系统往往能一次性完成更多工作。在给定的 IBM i 系统(或逻辑分区)中,您可能有 64 个或更多内核,但我强烈建议不要尝试将所有内核用于 nodejs。
与简单的 Windows/Linux 系统相比,IBM i 的另一个关键在于它具有完全不同的工作管理级别。这就是它能够同时做这么多不同事情的原因。
IBM i 中的工作是在单线程或多线程作业(基本上是一个进程)中完成的。但是这些作业在一个子系统中运行,该子系统分配了特定的内存池,并且对该子系统/内存池中可以同时激活的线程数量有明确的限制。
因此,即使您告诉 node 使用 4 个工作线程集群,它实际上也可能不会这样做,具体取决于您的作业运行的位置。
您需要与您的管理员一起确定在何处运行您的 nodejs 应用程序,或者甚至是否在他们自己的子系统/内存池中运行您的 nodejs 作业是有意义的。