Apache-2.2

推薦的伺服器堆棧

  • June 7, 2011

我們在我們的網路伺服器上執行大約 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之類的東西嗎?

如果您的應用程序可能,我建議切換到一些非同步模型。

很粗糙的:

  1. 只需將“收集”作業送出到隊列並
  2. 立即發回 HTTP 202,並將內容位置設置為您期望內容出現的位置(如果客戶端是瀏覽器,則返回 302/303 和位置)
  3. 只要你沒有從工人那裡得到消息,就返回一個帶有一些預設內容的 200 和
  4. 如果它以實際內容完成 200

硬體方面:

很難說,但似乎只要投入更多的 Apache 伺服器就可以解決問題。您已經有 6 個為什麼不只是添加更多並完成它 - 計算開發人員時間或硬體是否更便宜應該不會太難。無論如何:我不會立即丟棄“舊”伺服器,只需在負載均衡器中為它們分配較低的優先級。

您還提到了“反向代理”(單數)您是否嘗試過在該層進行縮放?

總的來說,我會說:你似乎有能力通過向它扔更多的 LAMP 伺服器來擴展。你為什麼不這樣做呢?

引用自:https://serverfault.com/questions/277963