2017-01-22 55 views
4

我正在構建一個簡單的REST-API,它有一個端點,將會被大量穿透。我們稱之爲POST /message。我必須決定使用Node還是PHP。數據庫是MySQL。PHP與節點REST-API

這條路線裏面會發生什麼: - 通過HTTP的驗證憑證將通過從數據庫讀取它們進行檢查。 - 請求另一個REST-API。 - 將執行另一個寫入數據庫操作。

所以有2個數據庫連接和HTTP請求到另一個REST的API。這條路線應該都是關於速度的。我會去PHP,因爲目前的系統是基於PHP的,但路由內的請求讓我感到害怕,因爲它不是在使用PHP時異步的。我不關心這個請求的結果,並且在節點中,我可以只檢查憑據並返回success,異步發送請求並在請求返回後執行數據庫寫入性能。我不認爲我可以在PHP中這樣做,因爲當我返回success的REST調用時,一切都必須在之前完成,對吧?

轉到了PHP或者節點?

回答

7

您寫道:

因爲它使用PHP的時候不是做異步

你確定那是不可能的?甚至沒有Guzzle Async Requests

無論如何,我實現了相同的REST API服務器在幾種語言,並在同一臺機器上測試(Ubuntu Linux操作系統16.04,i7處理器英特爾NUC,16GB RAM),並發現:

(source)

注意,Node.js的是,沒能有效使用多個核心的唯一平臺。

爲了模擬您的需求,我嘗試添加一個15ms的usleep到PHP一個和一個15ms的setTimeout到Node.js之一,發現當用2000個併發請求觸發時,Node.js的吞吐量更高(4300 vs 1800 req/sec),但也有更高的延遲(450 vs 130 ms/req)。可能是因爲它只使用了一個核心,不得不響應許多事件。使用事件循環可能會導致吞吐量更高的較高延遲。使用Apache(預)分支可能更昂貴,但能夠實現更高的併發性。

我不知道這一切是要去幫助你多少直接,但它可能給你自己研究的起點。玩的開心!