輕課系統設計

已經在家隔離兩個多月了,整我的都胖了一圈。自從胖了之後,你們關注的焦點就變成了個人胖,而忽略了個人醜,真好。web

靠着微弱的手機網絡,我依然堅持在家辦公,下面就說說在家辦公我都作了什麼。redis

1. 業務需求mongodb

在經歷了購物便利性和消費民主化以後,電子商務必然會迎來新的一輪零售變革,這就是內容電商!數據庫

內容電商,就是電商的下一個風口!編程

咳咳,扯遠了!api

教育一直都是常青樹,任什麼時候候教育領域都是一個不錯的選擇。緩存

猿輔導、學而思、嘰裏呱啦、潘多拉英語、斑馬英語、叫叫閱讀等等,都是兒童教育領域的知名品牌。安全

當真是編程五分鐘,扯淡兩小時,說正題網絡

業務模型是這樣的數據結構

基於這樣的模型,很天然地,系統分爲這樣幾大塊:商品售賣(涉及商品、訂單、價格、物流、交易、會員等),課程學習(設計課程相關的各類存儲、配置、數據分析、音視頻加密、題庫、課中交互等),基礎服務接入(涉及註冊登陸、Token認證、會員權益、消息推送、網關、註冊中心等)

2. 技術實現

2.1 基本架構

簡要說明:

一、基本數據存MySQL,一些不規則數據(例如:題目、樓層數據)存MongoDB,記錄類型的數據存ES

二、緩存主要用分佈式緩存和內存緩存,定時從Redis中刷新內存緩存。更新Redis的方式通常有兩種:MQ異步刷新和直接方法調用同步刷新。Redis注意設置好鏈接池相關參數。

三、服務以前用Dubbo調用,注意設置超時時間和重試次數

四、業務網關負責用戶身份認證、統一日誌處理、統一異常處理

五、配置用攜程的Apollo。固然,用阿里的Nacos更好。

六、MyBatis plus 很好用,自動生成,基本不須要寫什麼代碼,幾乎不須要寫SQL,自帶的方法足夠使用了

七、阿里的CND、OSS、MQ、音視頻處理、容器鏡像、安全審計等服務,百度CDN,騰訊語音識別,環信等

2.2 設計要點

項目結構大概是這樣的:

cjs-commons (常量工具類等)
cjs-repository (全部數據庫操做寫在這裏)
cjs-dependency (全部依賴的服務都寫在這裏)

cjs-inner-api (內部服務調用dubbo api)
cjs-inner-service (內部服務dubbo實現)

cjs-api (面向客戶端的dubbo api服務)
cjs-service (面向客戶端的dubbo實現)

cjs-web (面向客戶端的API接口)
cjs-admin (管理後臺)

約定優於配置。項目結構、命名規範是你們共同達成的約定,定了之後遵照就完了。

 

一、音視頻要加密,圖片及音視頻上傳以前務必要按要求進行壓縮

二、課程是虛擬內容,有的課程帶教具,所以下單時候就是一個虛擬商品訂單和一個實物商品訂單。實物訂單就要考慮運費、物流等信息

(虛擬商品沒有庫存、沒有物流。虛擬訂單也是有SKU的)

三、題目類型衆多,且每種題目之間差別比較大,答案選項也是固定,這種數據就不用想了,直接放mongodb

四、首頁展現的商品是經過首頁樓層配置的,樓層數據最好也放mongodb

五、答題記錄、課程學習記錄、星星記錄這種數據量太大了,就直接放到ElasticSearch中,主要是檢索快

六、單元小結、學習報告這種的話,目前是服務端從上報的數據中計算出來的。不過最好是經過一些實時計算平臺來處理。

七、層級比較深,必定要維護好緩存關係,避免調用鏈路過長,能夠用Pinpoint查看調用鏈路

八、課程中的資源文件比較多,下載會比較耗時,不要想讓客戶端實時去網絡加載。最好是客戶端提早下好,全部url改爲本地路徑,這樣的話就能夠從本地加載資源。

九、記得不要都放到一個籃子裏。課程學習進度要定時上報(好比,正常2分鐘上報一次,當用戶暫停、退出、拖進度條等事件觸發後當即上報),不要等到學完了才上報一次,不保險。

十、接口要注意區分版本

十一、視頻沒法播放,最有多是CDN的問題

十二、用戶數據太過,redis不夠用,有兩種方案:
(1)、用SSDB替換
(2)、數據導入ES,查詢走ES

1三、記得埋點,別等到上線了纔想起來要進行數據打點

Spark Streaming

3. 協做與工具

釘釘:必備

語雀:專業的雲端知識庫

Worktile:敏捷開發,與jira相似,需求、任務、bug跟進

wiki:早期用wiki,忘了它吧

石墨文檔:過~

MindLinker:音視頻會議

Yapi:可視化接口管理平臺(忘了swagger吧,idea有插件)

 

充分理解需求,作好設計評審,同客戶端定好數據結構,然後各自開發

天天站立會、日報、週報,及時溝通,及時彙報,燃盡圖

天天各類會議,開會確實很累人,開會的成本比較高,因此要提升效率

按照需求的級別來開發,基礎的工做、優先級高的任務先作,必定要多溝通多確認,必定要注意優先級

阻塞性的問題要及時拋出

最後,多壓測,就到這兒吧

附上架構圖

相關文章
相關標籤/搜索