前言
本文源於我在開發和管理眾多專案時遇到的統一問題和因此萌生出來的想法,那就是無論採用什麼開發框架和架構,對於系統日誌的處理都是必須且繁雜的工作
首先,在開發除錯時,無論以控制檯輸出日誌內容,或者是以匯出檔案流輸出日誌內容,都是較為分散精力的工作;其次,日誌的管理也是嚐嚐令人煩惱的問題,比如日誌的儲存,日誌的查詢,日誌的分類等等
對於大部分中小型系統而言,如果要包含一個功能強大的日誌系統,顯然是不現實的。尤其個人專案,所以我搜尋尋找想知道是否有公開易用的日誌管理服務,但是很遺憾的是我並沒有找到這樣的雲服務
所以,這也就導致了實現一個雲端日誌服務的想法,目的很簡單,個人開發者們只需通過RESTful網路介面上傳日誌,然後通過統一的視覺化控制檯管理檢視日誌即可,截止本文釋出,該日誌服務已經實現,有興趣的可以看一下【雲端日誌服務UPLOG】
思路
作為日誌服務,總體分為上傳和檢視兩大部分
1、對於日誌的上傳,最通用簡單的方案就是採用RESTful標準的網路介面。這樣開發者們可以選擇非同步或者同步地通過網路上傳日誌流
2、對於日誌的檢視,最好是能夠提供視覺化的查詢系統,可以按照日期和日誌的欄位屬性進行排序分類,這樣已然可以滿足大部分中小型系統的日誌管理需求
設計
1、上傳
一個通用的雲端日誌服務,應該可以提供不同使用者使用,所以日誌的儲存核心是根據使用者分割槽,且對於日誌,除了分割槽儲存,按照時間排序也是十分關鍵。於此同時,上傳介面要儘可能的簡單和滿足資料安全性 所以,最終UPLOG雲日誌服務的上傳介面設計如下:
POST https://dl57vasdud645.cloudfront.net/uplog
BODY {"sid":"服務標識","log":"日誌內容", ...}
複製程式碼
該介面採用application/json
的請求,其中【sid】是由平臺提供的服務標識,【log】為必須的日誌內容,其餘可擴充任意欄位
2、查詢
日誌系統儲存資料量十分巨大,但是對查詢時間也十分敏感,開發者們能夠越快查詢到日誌內容,對於開發效率的提升明顯。關於這一點,是我長時間使用AWS的CloudWatch之後的體會,亞馬遜雲提供的雲日誌服務訪問效能和查詢便捷性都很差,體驗不好
所以在UPLOG雲日誌服務的查詢設計上,我希望能儘可能簡單和高效,最終實現效果是如下圖所示(未來還會繼續功能增強和展示美化)
架構
這一個雲日誌服務,我不希望它很重,相反,我希望它很輕,但是需要有強大的吞吐能力和擴充性,最終我選擇了採用 以 nodejs 中介軟體元件為核心開發 的後端架構
1、採用nodejs作為核心開發語言,開發框架為【up-koa】,利用koa的中介軟體複用提升開發效率和速度,以及利用nodejs高非同步能力進行計算處理 2、採用up部署服務,依託與AWS的Lambda平臺,實現無服務架構 3、採用dynamodb作為資料庫儲存,這是一個無服務架構的NOSQL資料庫,特點自適應資料量吞吐擴充
後記
UPLOG雲日誌服務,我最終花費了一個週末完成,並且將其納入【UPServer雲應用開發平臺】中,UPServer官網預覽如下
另外,需要說明的是可能很多人都擔憂日誌儲存的私密性和資料安全性,這的確是一個值得考量問題,不過對於UPLOG而言,日誌的上傳內容是由開發者自己決定的,雖然UPLOG做了資料加密,但是依然沒有辦法對資料的絕對100%安全私密保證,畢竟這只是個人的興趣專案。只是覺得應該有這麼個東西,能夠更讓開發者更專注於核心業務邏輯。而且我更希望類似AWS和阿里雲等這樣的大型雲平臺在未來也能夠推出這樣的應用元件級的雲服務,我所設想的未來雲架構,開發者們只要像搭積木一樣,把各種雲服務自由組合,甚至不需要編寫任意一行程式碼,就能完成一個靈活可擴充的業務系統應用(這也是UPServer的設想和理念)
感謝你的閱讀,希望本文能夠給你帶來幫助:)
作者:CheneyXu
郵箱:457299596@qq.com
關於:UPServer官網