我正在构建一个简单的REST-API,它有一个端点,会被大量渗透。我们称之为POST /message
。我必须决定使用Node还是PHP。数据库是MySQL。
此路线内发生了什么: - 将通过从数据库中读取凭据来检查通过HTTP-Auth的凭据。 - 请求另一个REST-API。 - 将执行另一个写入数据库操作。
因此,有2个数据库连接和另一个REST-API的http请求。路线应该都是关于速度的。我会选择PHP,因为当前的系统基于PHP,但是路由中的请求让我感到害怕,因为在使用PHP时它不是异步的。我不关心这个请求的结果,在节点中我只能检查凭据并返回success
,异步发送请求并在请求返回后执行数据库写入性能。我不认为我可以在PHP中这样做,因为当我使用success
返回REST调用时,一切都必须在之前完成,对吗?
转到PHP还是节点?
答案 0 :(得分:10)
您写道:
因为使用PHP
时没有异步制作
你确定不可能吗?甚至没有使用Guzzle Async Requests?
无论如何,我用几种语言实现了相同的REST API服务器并在同一台机器上测试(Ubuntu Linux 16.04,i7 Intel NUC,16GB RAM)并找到:
请注意,Node.js是唯一无法有效使用多个核心的平台。
为了模拟您的要求,我尝试将一个15ms的usleep添加到PHP一个,并将一个15ms的setTimeout添加到Node.js,并发现当用2000个并发请求命中它时Node.js的吞吐量更高(4300 vs 1800 req / sec),但也有更高的延迟(450 vs 130 ms / req)。可能是因为它只使用一个核心并且必须响应许多事件。使用事件循环可能导致具有更高吞吐量的更高延迟。使用Apache(pre)fork可能更昂贵,但能够实现更高的并发性。
我不确定这一切对你有什么帮助,但它可能会为你自己的研究提供一个起点。玩得开心!