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