2012-12-19 42 views
1

我正在編寫一個應用程序,用於繪製和分析大量的日誌數據。基本上,我們的應用程序(web,Tomcat,控制檯等)將自定義log4j appender將日誌條目發送到我們的遠程服務器。什麼是通過HTTP POST處理大量數據的有效方式?

現在我想通過普通的HTTP POST來接受這些日誌條目。此時,Web服務會將條目記錄到數據庫中。

我在Node.jsAkka之間的柵欄上。主要是因爲我在Java和JavaScript方面都有經驗。但是我對Akka的演員模式不熟悉,並且我已經讀過Node並非真正的並行,除非您運行多個Node服務器?

我的邏輯是這樣的:

1)應用程序發送日誌條目到服務器

2)Server將HTTP請求並創建一個Amazon SQS條目(或天青服務Bus..haven't決定)

3)工作人員清理隊列並將條目存儲在數據庫中。

我認爲這將允許真正快速的輸入,但調用SQS操作將是一個很長的IO過程。

我的另一個想法是接受POST請求,將其存儲在memcached或Redis中,然後讓工作人員從緩存中拉出,發送到SQS,然後清除隊列以插入數據庫。這將具有HTTP請求儘可能快地傳遞數據的優點,並讓其他工作人員處理它的記錄。

這聽起來很像Akka的工作,因爲我不能爲每個請求分配一個actor,然後讓它產生其他actor來處理將其移入/移出緩存?

在測試階段,我一次可以輕鬆看到20-500個請求。取決於我們在測試中打開多少個應用程序。但是一旦完全運行,我可以從我們擁有的所有應用程序中看到每秒幾千個請求。

所以我的問題是如何最好地處理我將得到的海量數據。我關心的是線程鎖定,HTTP阻塞等。

+1

問題是什麼?確切地說, –

+0

看看卷,我會傾向於一個基於MQ的解決方案,請求進入隊列,然後您可以控制讀取隊列並推送到AWS的線程數。再一次,只是一個想法,並不確定你真正想要在流式傳輸日誌上實現什麼。 – muruga

+2

分析和存儲每秒幾千個請求的日誌聽起來不像那麼多。我會盡可能使用最簡單的解決方案,看看這是否還不夠。當你知道它是必需的時,我只會增加複雜性。 –

回答

2

從體系結構上說,將入站日誌數據卸載到隊列以進行下游處理(過濾,分析,推送到數據庫等)是正確的方法。如果您關心音量和縮放比例,那麼您需要在入站端使用較輕的基於TCP的協議。 HTTP雖然方便,但對於直接的數據傳輸來說卻是非常沉重的。 (至少處理入站數據的服務器端組件應該直接從套接字連接中讀取,這在HTTP POST處理中通常不會發生。)

相關問題