PHP vs. Node REST-API



我正在构建一个简单的REST-API,它有一个端点,将被大量渗透。我们称之为POST /message。我必须在使用Node还是PHP之间做出决定。数据库是MySQL。

此路线内发生的情况:-通过HTTP身份验证的凭据将通过从数据库中读取来进行检查。-请求另一个REST-API。-将执行另一个写数据库操作。

因此,有2个数据库连接和一个到另一个REST-API的http请求。路线应该都是关于速度的。我会选择PHP,因为当前的系统是基于PHP的,但路由中的请求让我害怕,因为在使用PHP时它不是异步生成的。我不在乎这个请求的结果,在节点中,我可以检查凭据并返回success,异步发送请求,并在请求返回后执行数据库写入性能。我认为我在PHP中无法做到这一点,因为当我用success返回REST调用时,所有事情都必须在之前完成,对吧?

选择PHP还是node?

您写道:

因为使用PHP 时它不是异步生成的

您确定这不可能吗?甚至连Guzzle异步请求都没有?

无论如何,我用几种语言实现了相同的REST API服务器,并在同一台机器上进行了测试(Ubuntu Linux 16.04,i7 Intel NUC,16GB RAM),发现:

  • Java,14000 req/sec(源代码)
  • Go,12000 req/sec(源代码)
  • PHP 7.6500 req/sec(源代码)
  • C#(.net Core),5000 req/sec(源代码)
  • Node.js,4200 req/sec(源代码)

(来源)

请注意,Node.js是唯一一个不能有效使用多核的平台。

为了模拟您的需求,我尝试在PHP中添加一个15ms的usleep,在Node.js中添加15ms的setTimeout,发现当处理2000个并发请求时,Node.js的吞吐量更高(4300比1800 req/sec),但延迟也更高(450比130 ms/req)。可能是因为它只使用了一个核心,并且必须对许多事件做出响应。这种具有较高吞吐量的较高延迟可能是由使用事件循环引起的。使用Apache(pre)fork可能更昂贵,但能够实现更高的并发性。

我不确定这一切是否会直接帮助你,但它可能会给你自己研究的起点。玩得高兴

最新更新