NodeJS 性能问题 - 单线程
NodeJS Performance question - Single Threaded
需要一些关于如何在 NodeJs 中处理操作的建议。我试过搜索东西但找不到任何地方,所以我想我会 post 在这里得到专家的反馈。
我们已经使用 NextJS 和 NodeJS 构建了一个电子商务平台。
我仍然需要进行测试并进行负载测试以确认我们的性能如何,但我有点担心所有关于 nodejs 不是多线程语言并且它是一个表演障碍的陈述和声明和 bla bla bla。所以我来这里是为了让您 suggestion/feedback 了解我们正在做的事情是否合适。这是我的:
身份验证微服务:用于验证请求并确定用户是否有权访问特定模块
支付微服务:用于接受支付和退款。
- 购物服务
- MySQL 和续集
我将尝试用 "order processing" 的例子来解释我的问题。因此,当我收到确认订单的请求时,这就是我对请求进行身份验证并确认详细信息是否充分证明的方法。
确认请求已通过 jwt 令牌进行身份验证
请求用户授权并确认用户是有效用户并且可以访问订单模块。
通过数据库验证商品价格(因为我假设有效载荷可以被黑客攻击并且可以发送错误的价格)
验证折扣是否从数据库中正确验证
验证优惠券是否有效以及应用的折扣是否正确
检查发送的奖励积分是否正确-发送用户服务请求
我们的支付网关是 Razor Pay,在这里,我们确认发送的支付 ID 是否是有效的支付 ID,以及从用户收到的金额是否与要收取的总金额相符。
这是我们现在在 NodeJS 进行的一长串验证。
单个请求速度超快。当我们深入进行负载测试时,我肯定会调整一切......但我目前的困境是我们是否选择了正确的方法。 NodeJS 是否足以执行这种执行。我预计在 6-7 个月内并发用户不超过 200 个,所以我不太担心性能。我可以进行集群和对接以提高性能。我想知道在 NodeJS 中我是否做出了正确的选择。这不是一个 cpu 密集度很高的算法,只是一些“for 循环”和一些数据库请求。
我应该将其保留在 Node 中,还是应该将此算法代码移动到另一个用不同语言(如 C++)编写的服务中,或者 python。
现在很困惑。任何帮助将不胜感激。
Node.js 可能是 single-threaded,但你所做的应该没问题。它非常适合水平 scaling/clustering 并且已经有很多节点模块可以帮助您解决这个问题。
此外,Node.js 是异步的,可以处理并发请求。
我还包括了一个较早的 link 如何扩展 node.js,其中列出了每种扩展方法可以帮助支持的用户数量。长话短说,您可以使用垂直扩展、水平扩展、微服务(听起来您已经在看)和自动化来轻松扩展您的应用程序。 Node.js 应该可以正常工作。
https://adrianmejia.com/how-to-scale-a-nodejs-app-based-on-number-of-users/
需要一些关于如何在 NodeJs 中处理操作的建议。我试过搜索东西但找不到任何地方,所以我想我会 post 在这里得到专家的反馈。
我们已经使用 NextJS 和 NodeJS 构建了一个电子商务平台。
我仍然需要进行测试并进行负载测试以确认我们的性能如何,但我有点担心所有关于 nodejs 不是多线程语言并且它是一个表演障碍的陈述和声明和 bla bla bla。所以我来这里是为了让您 suggestion/feedback 了解我们正在做的事情是否合适。这是我的:
身份验证微服务:用于验证请求并确定用户是否有权访问特定模块
支付微服务:用于接受支付和退款。
- 购物服务
- MySQL 和续集
我将尝试用 "order processing" 的例子来解释我的问题。因此,当我收到确认订单的请求时,这就是我对请求进行身份验证并确认详细信息是否充分证明的方法。
确认请求已通过 jwt 令牌进行身份验证
请求用户授权并确认用户是有效用户并且可以访问订单模块。
通过数据库验证商品价格(因为我假设有效载荷可以被黑客攻击并且可以发送错误的价格)
验证折扣是否从数据库中正确验证
验证优惠券是否有效以及应用的折扣是否正确
检查发送的奖励积分是否正确-发送用户服务请求
我们的支付网关是 Razor Pay,在这里,我们确认发送的支付 ID 是否是有效的支付 ID,以及从用户收到的金额是否与要收取的总金额相符。
这是我们现在在 NodeJS 进行的一长串验证。
单个请求速度超快。当我们深入进行负载测试时,我肯定会调整一切......但我目前的困境是我们是否选择了正确的方法。 NodeJS 是否足以执行这种执行。我预计在 6-7 个月内并发用户不超过 200 个,所以我不太担心性能。我可以进行集群和对接以提高性能。我想知道在 NodeJS 中我是否做出了正确的选择。这不是一个 cpu 密集度很高的算法,只是一些“for 循环”和一些数据库请求。
我应该将其保留在 Node 中,还是应该将此算法代码移动到另一个用不同语言(如 C++)编写的服务中,或者 python。
现在很困惑。任何帮助将不胜感激。
Node.js 可能是 single-threaded,但你所做的应该没问题。它非常适合水平 scaling/clustering 并且已经有很多节点模块可以帮助您解决这个问题。
此外,Node.js 是异步的,可以处理并发请求。
我还包括了一个较早的 link 如何扩展 node.js,其中列出了每种扩展方法可以帮助支持的用户数量。长话短说,您可以使用垂直扩展、水平扩展、微服务(听起来您已经在看)和自动化来轻松扩展您的应用程序。 Node.js 应该可以正常工作。
https://adrianmejia.com/how-to-scale-a-nodejs-app-based-on-number-of-users/