2012-04-18 87 views
1

我們正在運行一個對時間非常敏感的Web應用程序(響應時間必須低於100ms),並提出了很多請求(每分鐘峯值約有200k次請求)。該架構非常簡單:負載平衡器,多個Web服務器,運行Apache和PHP,以及運行MySQL的數據庫。生成對時間敏感的Web應用程序的統計信息

我們還需要能夠根據這些請求生成統計信息。我們開發了一些bash/python腳本來定期從mysql轉儲日誌,將它們轉發到另一臺服務器,再次導入它們並在那裏運行統計數據,這個想法是讓生產服務器儘可能少地做,以便我們可以縮短響應時間。

正如你可能想象的那樣,這個解決方案並沒有很好地擴展,目前,stat服務器幾乎沒有跟上。我們需要一種實時生成統計數據的方法。

你對這種設置有什麼經驗嗎?我們目前的想法是讓Web服務器在每個請求上實時調用統計服務器。

的兩個主要問題是:

  • 我們應該如何處理這個,這樣的響應時間不會增加太多
  • 的統計數據服務器或服務器處理來自所有webheads所有請求/或者它需要能夠水平擴展。

回答

2

爲什麼要使用數據庫?隨着請求的進入計算內存中的平均值和標準偏差。您不會有這種延遲,並且您可以使用MBean控制檯訪問值。

這隻能在單個服務器上工作,而不能在羣集上工作。

+0

是MBean Java特定的嗎?我們正在使用PHP。但是你給了我一個想法:我們可以即時生成統計數據並將它們存儲在APC中,並定期收集它們 – 2012-04-18 20:52:16

+0

對不起,MBean是Java特定的。 – duffymo 2012-04-18 22:13:38

2

1)單獨的MySQL服務器 爲什麼不直接連接到另一臺MySQL服務器並在那裏寫統計信息?在這一刻我從頭頂開始,每天都會創建桌子,這樣我就可以在不需要時輕鬆移動舊桌子。這裏的問題是缺乏水平可擴展性,雖然...

2)NoSQL 也許你應該使用MongoDB或Redis這樣的事情?由於它們基於內存並提供分片,因此速度更快。

3)獨立統計服務器 如果您提供HTML,你可以添加JavaScript方法來調用腳本(和小IMG標籤內使用的URL具有可寫在地址給PARAMS統計遠程服務器上禁用JavaScript)的用戶。這將完全卸載應用程序服務器上的所有內容,並且您可以嘗試#1或#2的建議...

+0

1.我認爲連接到另一臺服務器會增加響應時間。 2.我們確實想到了nosql,但我們對redis或mongodb沒有多少經驗。主要問題是我們不確定一個redis呼叫會在多少毫秒內增加響應時間。 3.對於我們來說,這不是一種選擇,因爲大多數情況下我們沒有向瀏覽器提供請求 – 2012-04-18 22:20:11

+0

1)連接到當前mysql服務器需要多少時間?我檢查了,我們有大約2-5ms的連接... 2)不知道,我現在只用於測試目的和本地主機上使用MongoDB,但你應該能夠很容易地測試它。安裝mongo非常簡單快捷,連接+插入是一個包含最多20行代碼的簡短腳本(用於測試目的,將其用作程序化PHP代碼段) 3)我認爲這是因爲您會使用Google Anaylitics那種情況:) – Miro 2012-04-18 22:39:39