鞠宏軍 佘春燕
摘要:為了幫助IT學(xué)子能夠更加便利的獲取學(xué)習(xí)資源,該系統(tǒng)采用B/S架構(gòu)的方式,將大量學(xué)習(xí)資源通過(guò)互聯(lián)網(wǎng)整合在一起,提供給用戶學(xué)習(xí)使用。系統(tǒng)主要實(shí)現(xiàn)視頻學(xué)習(xí)、發(fā)布討論、撰寫(xiě)博客、站內(nèi)搜索、程序在線測(cè)評(píng)等功能,用戶也可以通過(guò)評(píng)論的方式實(shí)現(xiàn)問(wèn)題解答、交流互動(dòng)。
關(guān)鍵詞:負(fù)載均衡;慕課;SSM;Nginx;Redis
中圖分類(lèi)號(hào):TP311? ? ? ?文獻(xiàn)標(biāo)識(shí)碼:A
文章編號(hào):1009-3044(2020)02-0054-03
Abstract: In order to help IT students to obtain learning resources more conveniently, the system adopts the B/S architecture method to integrate a large number of learning resources through the Internet and provide them for learning and use. The system mainly realizes video learning, publishing discussion, writing blog, station search, program online evaluation function, and users can solve problems and exchange interaction through comments.
Key words: load balancing; mooc; ssm; nginx; redis
1 背景
在21世紀(jì)的今天,計(jì)算機(jī)的作用可謂是舉足輕重,互聯(lián)網(wǎng)在教育行業(yè)的發(fā)展更是突飛猛進(jìn),一種新型的教學(xué)模式——慕課,進(jìn)入人們的視野,它打破了傳統(tǒng)課堂教育的固定模式,將學(xué)習(xí)資源通過(guò)互聯(lián)網(wǎng)聯(lián)系起來(lái),彌補(bǔ)了傳統(tǒng)課堂教育的局限性,為學(xué)生提供了更廣大、開(kāi)放的學(xué)習(xí)平臺(tái)?!痘赟SM的高并發(fā)慕課網(wǎng)的設(shè)計(jì)與實(shí)現(xiàn)》是針對(duì)計(jì)算機(jī)相關(guān)專(zhuān)業(yè)學(xué)生開(kāi)發(fā)的在線學(xué)習(xí)系統(tǒng)。本系統(tǒng)提供大量視頻課程提供給學(xué)生學(xué)習(xí),通過(guò)討論和博客,實(shí)現(xiàn)了學(xué)生的交流與互動(dòng);系統(tǒng)還提供了站內(nèi)搜索引擎、程序在線測(cè)評(píng)等功能。為了給學(xué)生提供更佳的學(xué)習(xí)體驗(yàn)。本系統(tǒng)采集了學(xué)生的使用特征及有關(guān)操作,為每個(gè)用戶推薦與自己相關(guān)或者感興趣的課程,給所有學(xué)生推薦合理的課程進(jìn)行學(xué)習(xí)。
2 關(guān)鍵技術(shù)
2.1 服務(wù)器集群
當(dāng)業(yè)務(wù)量逐漸遞增,一臺(tái)服務(wù)器的單機(jī)架構(gòu)模式難以支撐整個(gè)web系統(tǒng)的正常穩(wěn)定運(yùn)行,此時(shí),需要提出了服務(wù)器集群的系統(tǒng)架構(gòu),在后臺(tái)同時(shí)啟動(dòng)多臺(tái)服務(wù)器,同時(shí)啟動(dòng)多臺(tái)數(shù)據(jù)庫(kù)服務(wù)器將業(yè)務(wù)與數(shù)據(jù)分離,在高并發(fā)的環(huán)境下,為了減輕后臺(tái) Tomcat 的壓力,得到很快的用戶訪問(wèn)速度體驗(yàn),可以做Nginx和Tomcat動(dòng)靜分離,前端Nginx和keepalived 做雙機(jī)熱備,后臺(tái) Apache 服務(wù)器做負(fù)載均衡。Nginx 將 location 做動(dòng)靜分離后的JSP等程序文件分發(fā)到后臺(tái)Tomcat集群上,將靜態(tài)資源使用前端的Nginx來(lái)處理,以減輕后臺(tái) Tomcat 的壓力,使用 Nginx 作為后臺(tái)服務(wù)器的調(diào)度者,以此實(shí)現(xiàn)后臺(tái)眾多服務(wù)器的負(fù)載均衡,當(dāng)一臺(tái)服務(wù)器因?yàn)槲锢碓蚧蛘咂渌蝈礄C(jī)以后,Nginx 會(huì)進(jìn)行檢測(cè),選擇其他可以正常工作的服務(wù)器分發(fā)請(qǐng)求。
2.2 數(shù)據(jù)庫(kù)集群
隨著系統(tǒng)的運(yùn)營(yíng),系統(tǒng)的用戶量、并發(fā)量逐漸增加,一臺(tái)數(shù)據(jù)庫(kù)的單機(jī)模式難以難度高并發(fā)情況下的讀寫(xiě)需求,當(dāng)系統(tǒng)在線上的運(yùn)營(yíng)時(shí)間逐步增加,數(shù)據(jù)庫(kù)中的數(shù)據(jù)量在量級(jí)上發(fā)生了變化,即使用 DBA 的不斷優(yōu)化,一臺(tái)數(shù)據(jù)庫(kù)的讀寫(xiě)速度還是顯得有些力不從心,此時(shí),提出了數(shù)據(jù)庫(kù)服務(wù)器集群的系統(tǒng)架構(gòu),在后臺(tái)同時(shí)啟動(dòng)多臺(tái)數(shù)據(jù)庫(kù),使用主從復(fù)制、讀寫(xiě)分離、分表分庫(kù)的機(jī)制緩解數(shù)據(jù)庫(kù)的讀寫(xiě)壓力,使用 mycat 作為數(shù)據(jù)庫(kù)中間件,將讀 sql和寫(xiě) sql分別路由到不同的數(shù)據(jù)庫(kù)中,以此緩建每臺(tái)數(shù)據(jù)庫(kù)的壓力,提高數(shù)據(jù)庫(kù)的響應(yīng)速度和性能,mycat 還提供了心跳檢測(cè)機(jī)制,當(dāng)一臺(tái)主機(jī)宕機(jī)以后, 會(huì)選擇一臺(tái)從機(jī)作為寫(xiě)庫(kù),以此保證系統(tǒng)的高可用。在大型的軟件系統(tǒng)中,為了緩解后臺(tái)數(shù)據(jù)庫(kù)的壓力,提高系統(tǒng)的數(shù)據(jù)查詢速度,提出了緩存的解決方案,當(dāng)前市場(chǎng)中Redis 是一款非常優(yōu)秀的緩存數(shù)據(jù)庫(kù),它是一款內(nèi)存數(shù)據(jù)庫(kù),所有的對(duì)數(shù)據(jù)的讀寫(xiě)操作都是面向內(nèi)存而言,因此能夠?yàn)橛脩籼峁└恿己玫臋z索速度。集群架構(gòu)圖如圖1所示。
3 需求分析
《基于SSM的高并發(fā)慕課網(wǎng)的設(shè)計(jì)與實(shí)現(xiàn)》是針對(duì)我國(guó)計(jì)算機(jī)相關(guān)專(zhuān)業(yè)學(xué)生開(kāi)發(fā)的在線學(xué)習(xí)系統(tǒng),本系統(tǒng)主要實(shí)現(xiàn):提供大量的計(jì)算機(jī)相關(guān)課程給學(xué)生進(jìn)行學(xué)習(xí),同時(shí)學(xué)生可以發(fā)布討論和撰寫(xiě)博客以及進(jìn)行評(píng)價(jià);為了方便用戶的使用,系統(tǒng)采用推薦算法為每個(gè)用戶推薦與自己相關(guān)的課程或者感興趣的課程;教師可以在后臺(tái)系統(tǒng)申請(qǐng)開(kāi)設(shè)新的課程,并且系統(tǒng)根據(jù)該教師開(kāi)設(shè)課程的學(xué)習(xí)情況生成相應(yīng)的統(tǒng)計(jì)分析圖反饋給教師;網(wǎng)站后臺(tái)管理員審核維護(hù)網(wǎng)站基本信息。慕課的教育模式可以將處于傳統(tǒng)教育模式中的教師從復(fù)雜煩瑣的工作中解放出來(lái),從而降低教師的工作量,并且可以做到隨時(shí)隨刻學(xué)習(xí),使學(xué)生的學(xué)習(xí)時(shí)間更加靈活。廣大學(xué)子可以在系統(tǒng)中發(fā)起討論,全網(wǎng)學(xué)子互相討論,不僅可以快速地解決問(wèn)題,還可以增強(qiáng)學(xué)習(xí)興趣,能夠真正做到集思廣益?;ヂ?lián)網(wǎng)行業(yè)使用的技術(shù)層出不窮,且技術(shù)更新迭代快速,傳統(tǒng)的教學(xué)模式不足以跟上知識(shí)的更新,IT知識(shí)在IT的教學(xué)模式下學(xué)習(xí)定會(huì)事半功倍。因此慕課教學(xué)應(yīng)運(yùn)而生。
學(xué)生系統(tǒng):瀏覽課程,視頻學(xué)習(xí),課程評(píng)論,課程評(píng)論點(diǎn)贊;瀏覽討論,發(fā)起討論,討論回復(fù),討論點(diǎn)贊;瀏覽博客,撰寫(xiě)博客,評(píng)論博客,博客點(diǎn)贊;根據(jù)不同用戶推薦課程及正在學(xué)習(xí)的相關(guān)課程;個(gè)人基本信息,個(gè)人發(fā)布討論、博客、正在學(xué)習(xí)的課程信息;登錄注冊(cè);程序在線測(cè)評(píng);站內(nèi)搜索。
教師系統(tǒng):個(gè)人信息;瀏覽個(gè)人開(kāi)設(shè)的課程,上傳新的課程數(shù)據(jù);根據(jù)該教師開(kāi)設(shè)的課程和學(xué)習(xí)該課程的學(xué)生信息生成統(tǒng)計(jì)分析圖,教師根據(jù)統(tǒng)計(jì)分析圖分析該課程線上的學(xué)習(xí)情況,分析其中的不足與缺陷,在之后的開(kāi)設(shè)的課程中能夠做出相應(yīng)的優(yōu)化,使課程能夠更加的適合學(xué)生的需求;登錄驗(yàn)證。
管理員系統(tǒng):個(gè)人信息;管理網(wǎng)站的基本素材信息;更新系統(tǒng)首頁(yè)推薦的最新、初級(jí)、中級(jí)、高級(jí)課程信息和用戶在未登錄的情況下的默認(rèn)推薦課程信息,教師將首頁(yè)的推薦信息存到緩存中,在高并發(fā)的環(huán)境下,以此提高首頁(yè)的響應(yīng)速度、降低后臺(tái)數(shù)據(jù)庫(kù)的壓力、提高系統(tǒng)的并行性。
4 系統(tǒng)設(shè)計(jì)
4.1 功能設(shè)計(jì)
《基于SSM的高并發(fā)慕課網(wǎng)的設(shè)計(jì)與實(shí)現(xiàn)》總共有三類(lèi)用戶:學(xué)生、教師、管理員,各自登錄各自的系統(tǒng),系統(tǒng)可以分為三個(gè)子系統(tǒng),學(xué)生使用的慕課網(wǎng)系統(tǒng),教師使用的教師后臺(tái)系統(tǒng),管理員使用的后臺(tái)管理系統(tǒng)。學(xué)生用戶的主要功能是在線視頻學(xué)習(xí),發(fā)布討論,撰寫(xiě)博客,發(fā)布評(píng)價(jià),程序在線測(cè)評(píng),站內(nèi)搜索等;教師用戶的基本功能是發(fā)布課程,生成統(tǒng)計(jì)分析圖等;管理員的主要功能是管理網(wǎng)站的基本素材信息,認(rèn)證高訪問(wèn)量的推薦課程。系統(tǒng)功能結(jié)構(gòu)圖如圖2,3,4所示:
4.2 數(shù)據(jù)庫(kù)設(shè)計(jì)
《基于SSM的高并發(fā)慕課網(wǎng)的設(shè)計(jì)與實(shí)現(xiàn)》的實(shí)體有:管理員、教師、學(xué)生等。
按照用戶類(lèi)型分類(lèi)有:管理員、教師、學(xué)生;按照需求分析,系統(tǒng)建立管理員表(admin)、博客表(blog)、博客評(píng)論表(blog_comment)、類(lèi)別表(category)、課程表(course)、課程評(píng)論表(course_comment)、課程詳情表(course_detail)、方向表(direction)、討論表(discussion)、討論評(píng)論表(discuss_comment)、學(xué)習(xí)表(learn)、等級(jí)表(level)、輪播圖表(loop_picture)、學(xué)生表(student)、操作日志表(student_log)、教師表(teacher)。系統(tǒng)總體E-R圖如圖5所示。
5 系統(tǒng)實(shí)現(xiàn)
5.1 程序在線測(cè)評(píng)模塊
當(dāng)用戶進(jìn)入在線測(cè)評(píng)頁(yè)面,為用戶展現(xiàn)兩個(gè)文本域,一個(gè)文本域提供給用戶撰寫(xiě)源程序,另一個(gè)文本域展示用于程序的運(yùn)行結(jié)果或者錯(cuò)誤提示。用戶選擇當(dāng)前撰寫(xiě)程序的類(lèi)型,系統(tǒng)提供了C/C++、Java兩種語(yǔ)言的在線測(cè)評(píng),當(dāng)用戶撰寫(xiě)完源程序之后,點(diǎn)擊測(cè)評(píng),系統(tǒng)后臺(tái)自動(dòng)將用戶提交的源程序進(jìn)行編譯、執(zhí)行。獲取其運(yùn)行結(jié)果或錯(cuò)誤提示信息發(fā)送到用戶界面進(jìn)行展示。功能執(zhí)行流程圖如圖6所示。
5.2 站內(nèi)搜索模塊
首先獲取用戶輸入的搜索關(guān)鍵詞,根據(jù)用戶輸入的搜索關(guān)鍵詞,在數(shù)據(jù)庫(kù)中使用模糊查詢,獲取搜索集,在同一個(gè)搜索集中,根據(jù)搜索關(guān)鍵詞和搜索集中的數(shù)據(jù)進(jìn)行相似度計(jì)算,然后將搜索集中的數(shù)據(jù)很具相似度降序排序呈現(xiàn)給用戶,將相似度最高的數(shù)據(jù)盡量呈現(xiàn)在頁(yè)面的前方,展示給用戶。
在字符串相似度的計(jì)算中采用余弦相似度的方式計(jì)算機(jī)兩個(gè)字符串的相似度,首先根據(jù)搜索關(guān)鍵詞和目標(biāo)字符串進(jìn)行分詞,然后計(jì)算出分解之后每個(gè)詞出現(xiàn)的詞頻率,根據(jù)兩個(gè)字符串的詞頻率生成測(cè)評(píng)向量a(x1, x2, x3…xn),b(y1, y2, y3…yn),最后根據(jù)生成的兩個(gè)向量計(jì)算出他們的相似余弦值,公式如圖(1):
若向量之間的余弦值越接近于1,則兩個(gè)向量越相似,則兩個(gè)字符串相似。若向量時(shí)間的余弦值越接近于0,則兩個(gè)向量越不相似,則兩個(gè)字符串不相似。綜上所述:兩個(gè)字符串的相似余弦可以用來(lái)度量?jī)蓚€(gè)字符串的相似程度,因此在同一搜索集合中,分別計(jì)算該集合中的各個(gè)數(shù)據(jù)與目標(biāo)搜索關(guān)鍵詞的相似度,根據(jù)相似度降序排序之后,將集合中的數(shù)據(jù)展示給用戶。
5.3 在線視頻學(xué)習(xí)模塊
當(dāng)用戶登錄之后,實(shí)現(xiàn)在線視頻學(xué)習(xí),因?yàn)轭?lèi)似視頻這種大的二進(jìn)制文件而言就,如果直接存儲(chǔ)到數(shù)據(jù)庫(kù)中,無(wú)疑會(huì)降低數(shù)據(jù)庫(kù)的讀寫(xiě)性能,將重負(fù)載壓到了數(shù)據(jù)庫(kù)中,所以系統(tǒng)數(shù)據(jù)庫(kù)中知識(shí)存儲(chǔ)了該視頻在服務(wù)器中的存儲(chǔ)路徑,并不是直接將該視頻文件存儲(chǔ)到數(shù)據(jù)庫(kù)中,這樣若是要獲取一個(gè)視頻,只需要獲取該視頻的路徑即可,以此降低數(shù)據(jù)庫(kù)的讀寫(xiě)壓力。
5.4 首頁(yè)熱點(diǎn)數(shù)據(jù)加載
首頁(yè)功能模塊主要是實(shí)現(xiàn)課程方向,課程類(lèi)別輪播圖的展示,緊接著展示出系統(tǒng)推薦的最新、初級(jí)、中級(jí)、高級(jí)課程以及優(yōu)秀博客和優(yōu)秀教師的基本信息。因?yàn)槭醉?yè)信息類(lèi)型復(fù)雜,所需計(jì)算量大,數(shù)據(jù)量大的原因,系統(tǒng)將首頁(yè)推薦信息存儲(chǔ)到redis緩存中,以提高系統(tǒng)的獲取數(shù)據(jù)的速度,提高系統(tǒng)的響應(yīng)速度。
6 結(jié)束語(yǔ)
系統(tǒng)基于Linux平臺(tái),采用B/S結(jié)構(gòu),采用Layui、JSP、SSM、Redis、MySQL、Mycat、Nginx等技術(shù)實(shí)現(xiàn)。本系統(tǒng)主要包括三個(gè)子系統(tǒng),分別是:慕課網(wǎng)、教師上傳課程系統(tǒng)、后臺(tái)管理系統(tǒng)。主要實(shí)現(xiàn)了課程展示、在線視頻播放學(xué)習(xí)、討論展示、發(fā)布討論、博客展示、撰寫(xiě)博客、評(píng)論點(diǎn)贊、個(gè)人信息瀏覽、上傳課程、統(tǒng)計(jì)分析、系統(tǒng)基本設(shè)計(jì)、推薦認(rèn)定等功能。系統(tǒng)具有較強(qiáng)的穩(wěn)定性,能夠穩(wěn)定的為用戶提供服務(wù),具有一定的推廣和實(shí)用價(jià)值。
在系統(tǒng)實(shí)現(xiàn)期間,夯實(shí)了SSM三大框架的知識(shí)架構(gòu),對(duì)SSM產(chǎn)出了更深的理解。在高并發(fā)的環(huán)境下,傳統(tǒng)的用戶、服務(wù)器、數(shù)據(jù)庫(kù)的網(wǎng)站架構(gòu)難以滿足用戶的需求,此時(shí)意識(shí)到一臺(tái)服務(wù)器的網(wǎng)站架構(gòu)需要做出進(jìn)一步的升級(jí),需要在后臺(tái)同時(shí)部署多臺(tái)web服務(wù)器和數(shù)據(jù)庫(kù)服務(wù)器,在用戶與服務(wù)器之間使用Nginx做反向代理,以此實(shí)現(xiàn)多臺(tái)服務(wù)器的調(diào)度,在web應(yīng)用于數(shù)據(jù)庫(kù)之間使用Mycat中間件代理多臺(tái)數(shù)據(jù)庫(kù),在多臺(tái)數(shù)據(jù)庫(kù)之間啟用主從復(fù)制、讀寫(xiě)分離的機(jī)制,將讀SQL和寫(xiě)SQL分別路由到不同的數(shù)據(jù)庫(kù),以此降低單臺(tái)數(shù)據(jù)庫(kù)的讀寫(xiě)壓力,提高系統(tǒng)的并行性。在整個(gè)系統(tǒng)的實(shí)現(xiàn)過(guò)程中,新學(xué)習(xí)了Layui、Redis、Nginx的使用,對(duì)高并發(fā)情況下的網(wǎng)站有了新的解決方案——使用Redis做數(shù)據(jù)庫(kù)緩存、使用Nginx實(shí)現(xiàn)負(fù)載均衡,以此降低高并發(fā)給后臺(tái)服務(wù)器和后臺(tái)數(shù)據(jù)庫(kù)帶來(lái)的壓力。
參考文獻(xiàn):
[1] 苗澤. Nginx高性能Web服務(wù)器詳解[M]. 北京: 電子工業(yè)出版社, 2013.
[2] Baron Schwartz, Peter Zaitsev, Vadim Tkachenko. High Performance MySQL[M]. New York: OReilly Media, INC, 2013.
[3] 唐文. 大型網(wǎng)站性能監(jiān)測(cè)、分析與優(yōu)化[M]. 北京: 電子工業(yè)出版社, 2016.
[4] 劉同. 負(fù)載均衡技術(shù)在數(shù)據(jù)庫(kù)集群系統(tǒng)中的應(yīng)用與實(shí)現(xiàn)[D]. 長(zhǎng)沙: 國(guó)防科學(xué)技術(shù)大學(xué), 2009.
[5] ??藸? Java編程思想[M]. 4版. 北京: 機(jī)械工業(yè)出版社,2007.
[6] Walter Savitch, Kenrick Mock. Absolute Java[M].6th ed.New York: PEARSON EDUCATION, INC. 2018.
[7] 范勇, 蘭景英, 李繪卓. 軟件測(cè)試技術(shù)[M]. 西安: 西安電子科技大學(xué)出版社, 2009.
【通聯(lián)編輯:謝媛媛】