標籤:部署 新版本 管理系 實現 發送 方法 環境 form 命令
需求:
用戶端向服務端發送一次請求,請求是一系列設定檔的檔案名稱、當前用戶端所持有檔案的版本號碼、期待服務端返回的資料形式(url或位元據)。當請求的設定檔有更新,服務端返回相應的url或位元據。之所以要分url和位元據,因為有的設定檔比較小且比較重要需要馬上擷取到資料;而有的設定檔稍微大一些,重要性比較低,可以在用戶端拉線程慢慢下。
最終實現:
分為後台管理系統(負責檔案上傳)和資料更新服務。
檔案上傳部分是用Vue.js+KOA實現。其中關於檔案上傳那塊,瀏覽器端使用Ajax發送FormData;Node那塊之前是用co-busboy模組處理檔案,body-parser模組基於co-body不支援檔案資料(TODO1:之後研究HTTP協議,需要回頭看看這塊代碼),在官方樣本中是用pipe將formData檔案流直接匯入磁碟檔案中(TODO2:出現了檔案資料成功寫入本地磁碟卻沒有存入資料庫的情況),但是當我想直接用變數儲存檔案資料時,上傳多檔案卻只能接受到一個檔案的資料(TODO3:查明原因,需要瞭解流的相關知識)。調用SQL語句儲存資料時借鑒了ORM的設計思想以及js物件導向編程的思想(TODO4:ORM實現十分粗糙,需要最佳化)。由於檔案大小有限,也沒有(TODO5)考慮斷點續傳和秒傳。
更新服務大概思路是服務不斷的掃描資料庫,將新版本資料載入記憶體(資料總量不大),並暫時使用Nginx做檔案伺服器,後期接入CDN。達到快速響應的目的。
收穫:
1)寫後台管理系統的時候,最初是以檔案的形式儲存在伺服器上,沒有考慮檔案備份、多機部署的問題。(TODO6:瞭解分布式檔案儲存體系統),簡單的方法就是用MYSQL儲存檔案資料,資料備份和多機部署方便,但這也只適合資料比較小的情況。最終還是要用分布式檔案儲存體。(TODO7:Redis使用hmset等命令同樣能達到目的),由於對效能要求不高,故沒有採用Redis方案。
2)學會了使用事務來進行多表(有關聯性)操作
TODO:
TODO8:之前理解的檔案服務是後端即時讀取檔案資料並返回資料,但這樣不適合生產環境。需要參考和學習Nginx檔案服務的實現機制
TODO9:使用JS處理Pb協議
檔案上傳更新服務相關