黃河交通學(xué)院 王超 李晶晶 朱晶晶
隨著互聯(lián)網(wǎng)通信技術(shù)的高速發(fā)展以及當(dāng)前疫情的大背景下,我國(guó)教育形式也不再局限于傳統(tǒng)的線下授課模式。線上教育開(kāi)始成為人們學(xué)習(xí)提高的重要形式,但是傳統(tǒng)的系統(tǒng)架構(gòu)應(yīng)對(duì)爆發(fā)式的在線學(xué)習(xí)顯然無(wú)法滿足大規(guī)模的用戶訪問(wèn)需求。因此提出了基于SpringCloud微服務(wù)的在線視頻教育系統(tǒng)。本系統(tǒng)通過(guò)需求分析和設(shè)計(jì)按照功能將系統(tǒng)劃分為教育管理、視頻管理、用戶管理、支付管理微服務(wù)模塊。最后對(duì)系統(tǒng)的關(guān)鍵功能模塊和部分復(fù)雜技術(shù)的實(shí)現(xiàn)進(jìn)行了詳細(xì)的介紹。此系統(tǒng)為大用戶量的訪問(wèn)提供了可靠保障。同時(shí)采用微服務(wù)的形式也為系統(tǒng)后期的擴(kuò)展性提供了可能。
傳統(tǒng)授課受限于地點(diǎn)和人數(shù)的限制,在線教育已經(jīng)成為人們學(xué)習(xí)的新的學(xué)習(xí)方式,相對(duì)于傳統(tǒng)教育在線教育不受制于空間和人數(shù)。通過(guò)在線學(xué)習(xí)可以讓人們隨時(shí)隨地的進(jìn)行學(xué)習(xí),可以節(jié)約學(xué)習(xí)的時(shí)間提高人們的學(xué)習(xí)效率。目前雖然許多學(xué)校都有自己的在線教育系統(tǒng)但這些系統(tǒng)由于大多采用的是傳統(tǒng)的單體技術(shù)架構(gòu)。前后端不能分離,前后端耦合系統(tǒng)的擴(kuò)展性不強(qiáng),不能對(duì)系統(tǒng)的模塊根據(jù)用戶的使用頻率進(jìn)行靈活的部署。此時(shí)用戶量多的情況下很容易出現(xiàn)卡頓甚至崩潰死機(jī)的情況。因此采用微服務(wù)架構(gòu)可以很好的解決上述問(wèn)題。在微服務(wù)架構(gòu)下通過(guò)將系統(tǒng)按照功能模塊進(jìn)行拆分成不同的微服務(wù),每個(gè)微服務(wù)可以單獨(dú)部署。服務(wù)之間可以通過(guò)Feign等技術(shù)實(shí)現(xiàn)調(diào)用。本系統(tǒng)通過(guò)使用基于SpringCloud的微服務(wù)框架,可以有效的解決代碼耦合度高、后期系統(tǒng)可擴(kuò)展性差、系統(tǒng)并發(fā)度不高、不能靈活部署等問(wèn)題[1]。
微服務(wù)架構(gòu)是相對(duì)于傳統(tǒng)的單體結(jié)構(gòu)而說(shuō)的,傳統(tǒng)單體架構(gòu)主要是以單體框架為主。傳統(tǒng)的單體架構(gòu)所有的功能模塊都集中在一個(gè)程序中,前臺(tái)和后臺(tái)之間以及后臺(tái)各個(gè)功能模塊之間的耦合度高。往往一處修改需要級(jí)聯(lián)修改多處。導(dǎo)致代碼維護(hù)難度成幾何倍數(shù)增加。同時(shí)這種架構(gòu)不能按照功能模塊的使用頻率進(jìn)行靈活部署。微服務(wù)架構(gòu)正是在此背景下產(chǎn)生的,微服務(wù)可以將一個(gè)程序安裝功能劃分為不同的模塊。各個(gè)功能模塊可以根據(jù)實(shí)際的業(yè)務(wù)環(huán)境動(dòng)態(tài)的部署,訪問(wèn)量大的就多部署而訪問(wèn)量少的功能模塊可以少部署。這些模塊之間相互的調(diào)用可以通過(guò)插件從而實(shí)現(xiàn)了模塊之間的松耦合度。
本系統(tǒng)采用前后端分離的架構(gòu)模式。該架構(gòu)主要目的是讓前端和后端開(kāi)發(fā)可以同步進(jìn)行最后部署可以分開(kāi)部署。前端選用的框架主要是Vue等主流的前端框架。后端選用SpringCloud框架,該框架下包括不同功能的組件。按照功能劃分選用的組件如下[2]:
(1)網(wǎng)關(guān)選擇的是Zuul,網(wǎng)關(guān)主要負(fù)責(zé)對(duì)前臺(tái)頁(yè)面進(jìn)行身份驗(yàn)證、路由管理、負(fù)載分配。前臺(tái)的所有訪問(wèn)后臺(tái)的所有路徑都通過(guò)網(wǎng)關(guān)按照路徑分發(fā)到后臺(tái)的不同微服務(wù)模塊。
(2)注冊(cè)中心選擇的是Eureka,各個(gè)微服務(wù)模塊都將自己注冊(cè)到Eureka Server。
(3)服務(wù)間調(diào)用使用組件OpenFeign,通過(guò)此組件實(shí)現(xiàn)不同的微服務(wù)之間可以通過(guò)發(fā)送Http請(qǐng)求進(jìn)行彼此之間的訪問(wèn)。
(4)由于服務(wù)之間存在依賴關(guān)系因此如果一個(gè)服務(wù)出現(xiàn)了問(wèn)題容易引起其他服務(wù)出現(xiàn)問(wèn)題從而引起雪崩。因此需要Sentinal組件,通過(guò)他保障調(diào)用其他服務(wù)出現(xiàn)問(wèn)題時(shí)候有錯(cuò)誤處理。從而提高整個(gè)系統(tǒng)的可靠性。
系統(tǒng)的總體結(jié)構(gòu)設(shè)計(jì)如圖1所示。
圖1 在線視頻教育系統(tǒng)架構(gòu)Fig.1 Online video education system architecture
(1)前臺(tái)用戶進(jìn)入登錄模塊點(diǎn)擊掃碼登錄進(jìn)入支付寶掃碼登錄用戶掃碼后返回到在線視頻教育系統(tǒng)的登錄處理中,后臺(tái)審核用戶信息如果成功將用戶信息保存到后臺(tái)數(shù)據(jù)庫(kù)再返回到主界面,失敗就返回失敗信息[3]。
(2)后臺(tái)管理員輸入用戶名、密碼注冊(cè),后臺(tái)將相關(guān)管理員信息保存到后臺(tái)數(shù)據(jù)庫(kù)。
(1)前臺(tái)用戶點(diǎn)擊講師向后臺(tái)請(qǐng)求講師信息,后臺(tái)從數(shù)據(jù)庫(kù)查詢講師信息返回前臺(tái)。前臺(tái)用戶點(diǎn)擊課程向后臺(tái)請(qǐng)求課程信息返回前臺(tái)。前臺(tái)用戶選擇某一課程跳轉(zhuǎn)到課程詳情頁(yè)如果課程是免費(fèi)的可以點(diǎn)擊觀看跳轉(zhuǎn)到播放頁(yè)播放課程。如果課程是收費(fèi)的先審核用戶是否登錄如果已經(jīng)登錄跳轉(zhuǎn)到支付界面,如果未登錄則跳轉(zhuǎn)到登錄界面。前臺(tái)用戶點(diǎn)擊課程收藏,判斷其是否登錄如果未登錄跳轉(zhuǎn)到登錄頁(yè)面。如果已經(jīng)登錄則將課程信息和用戶信息保存到課程收藏表中。
(2)后臺(tái)用戶點(diǎn)擊添加講師輸入講師信息向后臺(tái)發(fā)送請(qǐng)求后臺(tái)將講師信息保存。點(diǎn)擊查看講師將發(fā)送查詢請(qǐng)求后臺(tái),后臺(tái)從數(shù)據(jù)庫(kù)查詢講師信息分頁(yè)返回前臺(tái)。后臺(tái)用戶點(diǎn)擊發(fā)布課程輸入課程信息已經(jīng)添加課程章節(jié)和課程文件后將課程信息保存數(shù)據(jù)庫(kù)將課程文件保存到服務(wù)器。點(diǎn)擊查詢課程則后臺(tái)查詢課程并分頁(yè)后返回前臺(tái)。點(diǎn)擊導(dǎo)入,按指定格式導(dǎo)入分類信息。后臺(tái)將分類信息批量保存。前臺(tái)點(diǎn)擊查詢分類,后臺(tái)將分類信息從數(shù)據(jù)庫(kù)查詢出來(lái)返回前臺(tái)。
(1)前臺(tái)用戶在課程詳情頁(yè)通過(guò)點(diǎn)擊立即播放將視頻路徑傳遞到播放頁(yè),視頻播放頁(yè)發(fā)送請(qǐng)求獲取到真實(shí)路徑進(jìn)行播放視頻課程。
(2)后臺(tái)用戶添加課程時(shí)選擇某個(gè)小節(jié)點(diǎn)擊上傳視頻調(diào)用后臺(tái)程序?qū)⒁曨l保存到服務(wù)器,點(diǎn)擊確定將小節(jié)里的視頻地址保存到數(shù)據(jù)庫(kù),后臺(tái)用戶選擇視頻點(diǎn)刪除則調(diào)用后臺(tái)刪除方法將視頻從服務(wù)器刪除,點(diǎn)擊確定將小節(jié)中的視頻信息從數(shù)據(jù)庫(kù)刪除。
前臺(tái)用戶選擇收費(fèi)課程點(diǎn)擊立即購(gòu)買如果用戶沒(méi)有登錄則跳轉(zhuǎn)到登錄頁(yè)面,如果已經(jīng)登錄則跳轉(zhuǎn)到訂單確認(rèn)頁(yè)面點(diǎn)擊支付后向后臺(tái)發(fā)送支付請(qǐng)求后臺(tái)將支付信息發(fā)送給支付寶接口,支付成功后跳轉(zhuǎn)到在線視頻教育系統(tǒng)后臺(tái),后臺(tái)更新訂單的支付信息后跳轉(zhuǎn)到購(gòu)買過(guò)的課程詳情頁(yè)。
首先前臺(tái)用戶點(diǎn)擊掃碼登錄按鈕通過(guò)向后臺(tái)發(fā)送異步請(qǐng)求到用戶中心微服務(wù)模塊的登錄方法該方法首先到配置文件獲取應(yīng)用標(biāo)識(shí)號(hào)以及重定向的地址,然后進(jìn)行字符串拼接后跳轉(zhuǎn)到支付寶授權(quán)登錄界面,用戶掃碼登錄后跳轉(zhuǎn)到在線視頻教育系統(tǒng)的回調(diào)方法中,該方法接受支付寶服務(wù)返回的授權(quán)碼,接受到授權(quán)碼后該方法向支付寶服務(wù)發(fā)送請(qǐng)求獲取授權(quán)Token信息,通過(guò)該參數(shù)獲取用戶的用戶標(biāo)識(shí)、昵稱、電話、頭像等信息。獲取該信息后再本地?cái)?shù)據(jù)庫(kù)查找該用戶是否之前已登錄如果登錄了就不用再保存這些用戶信息,如果之前未登錄則在本地?cái)?shù)據(jù)庫(kù)保存用戶信息,接著通過(guò)JWT生成Token信息返回前臺(tái)頁(yè)面。前臺(tái)獲取Token后將Token放到Cookie中,保證用戶在一段時(shí)間內(nèi)可以保持登錄狀態(tài)。接著刷新頁(yè)面后,前臺(tái)向后臺(tái)請(qǐng)求并根據(jù)Token獲取會(huì)員信息返回到前臺(tái)頁(yè)面[4]。
當(dāng)添加課程選擇課程封面并添加的時(shí)候?qū)D片發(fā)到后臺(tái),后臺(tái)方法將圖片進(jìn)行Base64轉(zhuǎn)碼后返回前臺(tái)。前臺(tái)點(diǎn)擊保存后向后臺(tái)發(fā)送請(qǐng)求將轉(zhuǎn)碼后的圖片保存到后臺(tái)數(shù)據(jù)庫(kù)。采用這樣可以減少向后臺(tái)發(fā)送。避免圖片信息泄露。
前臺(tái)用戶點(diǎn)擊觀看的視頻教程,此時(shí)向后臺(tái)發(fā)送請(qǐng)求,后臺(tái)會(huì)接受前臺(tái)的地址路徑,但這種路徑后臺(tái)服務(wù)器是無(wú)法識(shí)別的需要轉(zhuǎn)換為具體的磁盤(pán)位置,我們這個(gè)時(shí)候就需要把本地的路徑和網(wǎng)絡(luò)地址路徑做映射處理從而實(shí)現(xiàn)對(duì)本地視頻課程的訪問(wèn)和播放[5]。
前臺(tái)用戶選擇課程后點(diǎn)擊購(gòu)買按鈕觸發(fā)下訂單方法該方法向后臺(tái)發(fā)送創(chuàng)建訂單請(qǐng)求,網(wǎng)關(guān)服務(wù)判斷用戶是否登錄如已經(jīng)登錄創(chuàng)建訂單返回前臺(tái)后跳轉(zhuǎn)到下訂單頁(yè)面,如果沒(méi)有登錄則跳轉(zhuǎn)到登錄頁(yè)。用戶點(diǎn)擊去支付后通過(guò)向后臺(tái)發(fā)送支付請(qǐng)求后臺(tái)方法依據(jù)獲取的訂單號(hào)查詢訂單后在配置文件中獲取支付網(wǎng)關(guān)、應(yīng)用標(biāo)識(shí)、編碼格式、簽名算法類型等參數(shù)后向支付寶發(fā)送支付請(qǐng)求,支付寶效驗(yàn)信息后跳轉(zhuǎn)到支付頁(yè)面,用戶掃碼支付后,支付寶跳轉(zhuǎn)到支付成功方法,此方法效驗(yàn)成功后更新數(shù)據(jù)庫(kù)訂單信息為已經(jīng)支付,最后跳轉(zhuǎn)到前臺(tái)已經(jīng)購(gòu)買的課程頁(yè)面。
創(chuàng)建網(wǎng)關(guān)鑒權(quán)類后繼承網(wǎng)關(guān)過(guò)濾器類后重寫(xiě)過(guò)濾器方法,此方法添加我們需要過(guò)濾鑒權(quán)的路徑,然后重寫(xiě)運(yùn)行方法我們根據(jù)是否能獲取到Token信息判斷前臺(tái)用戶是否登錄。如果鑒權(quán)失敗返回對(duì)應(yīng)錯(cuò)誤編號(hào),前臺(tái)依據(jù)編號(hào)重定向到登錄頁(yè)面。如果鑒權(quán)成功則到對(duì)應(yīng)的微服務(wù)模塊的方法進(jìn)行對(duì)應(yīng)的業(yè)務(wù)邏輯處理。
通用功能模塊主要是將后臺(tái)返回前臺(tái)消息的通用方法和異常處理以及通用的一些工具類文件放在此模塊。
系統(tǒng)逐漸由單體架構(gòu)到微服務(wù)架構(gòu)開(kāi)發(fā)已經(jīng)是不可避免的趨勢(shì)。因此在線視頻教育系統(tǒng)的設(shè)計(jì)開(kāi)發(fā)就選用了微服務(wù)架構(gòu)。我們依據(jù)業(yè)務(wù)實(shí)際和技術(shù)的可行性已經(jīng)開(kāi)發(fā)效率采用的前后端分離的技術(shù)路線。前臺(tái)選擇的Vue后臺(tái)選擇的SpringCloud,在此基礎(chǔ)上我們?cè)O(shè)計(jì)了在線視頻教育系統(tǒng)的整個(gè)架構(gòu),然后對(duì)系統(tǒng)按照需求將不同將系統(tǒng)劃分為多個(gè)微服務(wù)模塊。最后實(shí)現(xiàn)了各個(gè)微服務(wù)模塊。此系統(tǒng)的設(shè)計(jì)和實(shí)現(xiàn)為同類教育系統(tǒng)的實(shí)現(xiàn)提供了新的方向。
引用
[1] 林宇聰,馮祥勝,葉健安.基于分布式框架的城市內(nèi)澇智慧監(jiān)測(cè)系統(tǒng)[J].電腦知識(shí)與技術(shù),2021,17(10):30-32+36.
[2] 徐維,劉屹.微服務(wù)技術(shù)框架在智慧警務(wù)應(yīng)用中的優(yōu)勢(shì)和缺點(diǎn)[J].信息通信,2019(8):82-83.
[3] 張斌,任富彬,沈煒.基與SpringCloud的食品安全溯源系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].軟件工程,2019,22(8):27-30.
[4] 任女爾,陳辰,魏金津.基于微服務(wù)的車輛監(jiān)控系統(tǒng)架構(gòu)設(shè)計(jì)與實(shí)現(xiàn)[J].電腦知識(shí)與技術(shù),2018,14(17):218-219.
[5] 李月晴,范純超,張?jiān)?基于微服務(wù)架構(gòu)的生產(chǎn)管控平臺(tái)研究[J].金屬礦山,2021(2):173-178.