無需資料庫互動的高效能 Web 伺服器

無需資料庫互動的高效能 Web 伺服器

我正準備設定一台伺服器,負責追蹤來自大流量流量來源的統計資料。它將平均以大約 6-7 百萬/小時的速度處理請求,所有這些都是小型 GET。我所需要的只是一個簡單的伺服器設置,可以處理獲取請求的參數並將它們寫入 CSV 檔案。

我的第一個想法是使用lighttpd+fastcgi+php,因為這是我已經熟悉的配置。但是,鑑於我無法每天做出此類效能決策,我想探索一些其他選項,看看是否有更好的方法可以達到此目的。

答案1

您希望每個 CSV 檔案執行 600-700 萬次寫入操作小時

說真的,資料庫是一個更好的主意。資料庫旨在處理並發寫入,並且可以垂直擴展(更大的機器、更快的磁碟)或水平擴展(負載分佈在多個伺服器上)。寫入單一 CSV 檔案(或任何檔案)需要某種形式的鎖定來處理並發問題,並且隨著 IO 負載和並發性的增加而擴展性很差。

為了解決這個問題,您可能最終會實現自己的快取和緩衝層,然後開始在多個檔案之間分配負載,等等。

答案2

假設您將執行大約 2000 個請求/秒或 500μs/請求平均的(意味著更高的峰值),由於並發寫入的條目被破壞,CSV 可能是不行的,因為沒有任何東西可以保證文件中的原子寫入。

一種想法是稍後收集每個進程/每個寫入器的文件,另一個想法是使用針對大量寫入進行深度調整的資料庫。您也可以查看訊息佇列或群組通訊協定(例如傳播),但我不知道他們是否能承受這麼大的音量。

無論你做什麼,快速提出一些想法並對其進行基準測試。目前的硬體可以創造效能奇蹟,僅在需要時進行最佳化。至於 PHP - 確保安裝了操作碼快取(例如APC),否則您將在不必要的腳本重新編譯中消耗許多周期。

也要記住服務的成長情況,瞄準一個在幾個月內就會不堪重負的解決方案幾乎沒有任何意義。

答案3

透過 GET 請求傳遞什麼樣的參數?是否需要即時保存在 CSV/資料庫中?或者您認為您可以建立一個虛擬 HTML 檔案(或 PHP),然後僅使用 Web 日誌進行解析並稍後將其作為批次作業轉儲到 CSV 中? (好吧..這聽起來很複雜..但很容易處理)..

答案4

我會看一下 server 2008 網路版並使用 ADO.net 寫入 CSV 檔案。您不應該遇到吞吐量問題,因為 ado.net 會緩衝寫入。

相關內容