我正在嘗試擴展應用程序服務器以處理每分鐘超過20,000個請求。如何在每分鐘內處理很多請求的同時在Rails中創建HTTP請求?
當我壓力測試請求時,大多數請求很容易處理20,000 RPM或更多。
但是,這需要進行外部HTTP請求(例如,Facebook登錄)關閉服務器如蝸牛(3000 RPM)的請求。
我概念理解我目前的環境的限制 - 每個服務器4名麒麟工人3負載平衡服務器只能同時處理12名的請求,即使所有的人都在等待HTTP請求。
我的選擇是什麼讓這個更好?我想一次處理更多的連接。
可能的解決方案我的理解:
蠻力:多采用麒麟工人(即,更多RAM)和更多的服務器。
推動所有的阻塞操作到後臺/工作進程,以釋放網絡的進程。客戶需要定期輪詢,以確定他們的請求何時完成。
移動到彪馬而不是獨角獸(可能是來自MRI的Rubinius),這樣我可以使用線程而不是進程 - 這可能會(?)提高每個連接的內存使用量,因此允許工人數量增加。
從根本上說,就是我正在尋找的是:是否有更好的方式來增加阻塞數/排隊請求一個工人可以處理這樣我就可以增加每個服務器的連接數?
例如,我聽說過使用Thin with EventMachine進行討論。這是否會打開一個Rails工作者的可能性,它可以放下它當前正在處理的Web請求(因爲那個人正在等待外部服務器),然後在等待的時候接收到另一個請求?如果是這樣,與獨角獸和彪馬相比,這是追求性能的有效途徑嗎? (是否在很大程度上取決於應用程序的運行時的活動?)