推薦的伺服器堆棧
我們在我們的網路伺服器上執行大約 1000 個請求/秒,並且在到達最終 LAMP 堆棧之前有層記憶體和平衡。我們有 6 台 Apache (Prefork MPM; 2.2.12) + PHP (5.3.2) 伺服器,帶有通用的記憶體記憶體來服務最終請求,以防它沒有命中 varnish。現在我們面臨的問題是縮放。我們對響應時間非常挑剔,如果後端在一秒鐘內沒有響應,我們的反向代理就會與後端斷開連接。隨著每秒請求數的增加,我們面臨越來越多的上游錯誤,我們的 LAMP 機器無法承受負載。
我們正在重新考慮新的伺服器架構,現在正在尋找一些好的替代方案。
沒有靜態圖像/不涉及靜態內容。到達這些伺服器的唯一 4 個請求是(3 個收集數據,1 個 sedning 數據 - 最大 2KB 動態文件)
我們正在研究 Apache (worker MPM) + PHP CLI nginx + PHP FPM
我想知道是否有我可以參考的好的教程或基準測試報告,如果有任何其他配置我可以試一試
謝謝斯帕什古普塔
對於伺服器堆棧,這是非常少的資訊:
您是否要求硬體或軟體推薦(假設軟體)
為什麼上游伺服器失敗?(CPU、網路、磁碟 IO,是上游失敗的上游——讀取數據庫或任何類型的持久性)
你似乎可以優雅地失敗。如果您在一秒鐘內超時並返回某些內容,那麼您無論如何都會這樣做。你應該有數字:
- 多少失敗是可以接受的?
- 您何時(日期/時間和請求數量)通過了可接受的失敗率?
我想知道是否有我可以參考的好的教程或基準測試報告,如果有任何其他配置我可以試一試
請不要依賴其他人在另一個案例上所做的基準測試。請為您的數據、客戶行為、系統做基準測試
我可以假設:
- 收集數據 == POST(或在伺服器上儲存數據的東西)
- 發送數據 == GET(回复客戶)
這實際上並不重要,但您是否嘗試將“收集”伺服器與“發送”伺服器分開?
客戶端記憶體似乎對您的情況沒有幫助,因為收集部分不可能被記憶體。
對應用程序架構的瘋狂猜測(軟體方面):
您使用的是APC之類的東西嗎?
如果您的應用程序可能,我建議切換到一些非同步模型。
很粗糙的:
- 只需將“收集”作業送出到隊列並
- 立即發回 HTTP 202,並將內容位置設置為您期望內容出現的位置(如果客戶端是瀏覽器,則返回 302/303 和位置)
- 只要你沒有從工人那裡得到消息,就返回一個帶有一些預設內容的 200 和
- 如果它以實際內容完成 200
硬體方面:
很難說,但似乎只要投入更多的 Apache 伺服器就可以解決問題。您已經有 6 個為什麼不只是添加更多並完成它 - 計算開發人員時間或硬體是否更便宜應該不會太難。無論如何:我不會立即丟棄“舊”伺服器,只需在負載均衡器中為它們分配較低的優先級。
您還提到了“反向代理”(單數)您是否嘗試過在該層進行縮放?
總的來說,我會說:你似乎有能力通過向它扔更多的 LAMP 伺服器來擴展。你為什麼不這樣做呢?