2017-08-17 59 views
0

我正在为我们现有的应用程序写一个概念验证。负载测试下节点Js响应时间减少

现有应用程序的体系结构: Soap Web服务暴露给其他系统。 我们现有系统的技术堆栈: - Java - > C++ - >存储过程(Oracle Database)。 大部分业务逻辑都是用存储过程编写的。

问题是在节点js中做一个概念验证,它将取代现有的Java和C++层。 建议的架构是Node Js - > Stored procedures(Oracle数据库)。

我有几个问题:

  1. 在节点JS概念(与快递)的证明工作正常,直到100个并发用户/秒,其中响应时间是下了1秒。随着并发用户数量的增加,响应时间也增加并超过1秒(现有应用程序的SLA小于1秒)。 应用程序部署在EC2实例上(与t2.micro和m4.large结果相同,数据库也是RDS实例)。我也尝试过使用集群,但没有显着的增益表现。

    我该如何改进,直到1000用户/秒,响应时间保持在1秒以下。

  2. 是否有任何其他适合此场景的语言/框架?

+0

问题是:什么是需要时间?找出并调整它。也许遵循标准的“调整应用程序,然后调整SQL,然后调整数据库”的方法。并调整网络和操作系统,并... –

+0

谢谢克里斯托弗。 由于目前的架构已经能够达到预期的响应时间,数据库方面似乎没有问题。 –

回答

0

您是否在当前体系结构中实现了所需的响应时间?如果是的话,理论上,数据库不会成为新架构中的问题。

你能告诉我们关于Node.js服务器设置的更多信息吗?你在使用连接池吗?如果是这样,有多少个连接?你有什么设置UV_THREADPOOL_SIZE?

您是否考虑过在多个Node.js实例前面放置一个负载均衡器来传播负载?

+0

谢谢丹。 我能够在当前体系结构中实现所需的响应时间。所以我也认为数据库不是问题。 是的,我正在使用池大小为30的连接池(10-30池大小给出相同的结果)。 因为我对节点不太了解,所以对UV_THREADPOOL_SIZE知之甚少,因此我们将对此进行调查。 关于LB,问题是最初得到没有LB的结果,看看节点是否能够处理它。 这是一个现实的目标,我试图实现或节点本身是不是没有能力,没有改变像引入LB等体系结构? –

+0

Node.js使用线程池进行一些异步IO操作。 node-oracledb使用这个线程池很多。 UV_THREADPOOL_SIZE是用于设置池中线程数的环境变量。缺省值是4,因为现在大多数CPU都有4个内核。但是,如果您保留默认值,那么最多可以同时连接4个连接。尝试将其设置为30,即池中连接的数量,然后查看它的效果。请记住,更多并不总是更好,所以尝试不同的设置。 –

+0

您可能会仔细阅读讨论UV_THREADPOOL_SIZE的手册https://github.com/oracle/node-oracledb/blob/v1.13.1/doc/api.md#numberofthreads,并检查其他调整技巧。 –