我正在研究一個應用程序,其中我可能需要記錄到達服務器的所有通信。該功能可以打開或關閉,也可以在發生異常時使用。登錄異步龍捲風(python)服務器
無論如何,我擔心磁盤I/O操作的阻塞性質及其對服務器性能的影響。在處理請求(主要是POST http請求)時應用的業務邏輯是異步的,因此每個網絡或db調用都是異步執行的。
另一方面,我擔心線程在等待磁盤IO操作完成時的延遲。記錄的消息可以是幾個字節到幾個KB,但在某些情況下是幾MB。當數據寫入磁盤時,並沒有真正需要暫停線程,http請求肯定可以完成,並且沒有理由說ioloop線程在數據寫入磁盤時不能在另一個任務上工作。
所以我的問題是:
- 上午我過分擔心這個問題?正在記錄到標準輸出 ,稍後將其重定向到「足夠好」的文件?
- 什麼是常用的方法,或者你認爲最適合登錄基於龍捲風的應用程序的方法?即使是簡單的日誌記錄,而不是我上面概述的(極端)情況?
- 這基本上是排隊日誌消息並從專用線程消耗它們的理想情況嗎?如果執行磁盤日誌記錄的線程正在等待磁盤io操作完成,那麼linux是否會將日誌記錄卸載到不同的線程(如Homer Simpson的「Can not Someone Else Do it?」)內核將該點作爲上下文切換的機會?
有任何意見或建議,我們非常感激,
埃雷茲
謝謝,本。這是我正在尋求的那種答案。 – ErezK