陽波 劉輝 王進(jìn) 湯清明
摘要:edX信息化教學(xué)平臺因功能強(qiáng)大且代碼完全開源而備受關(guān)注。在分析edX平臺功能模塊、技術(shù)構(gòu)架和存儲結(jié)構(gòu)的基礎(chǔ)上,筆者基于Nginx服務(wù)器、keepalived和磁盤陣列技術(shù),提出了一種用于構(gòu)建edX服務(wù)器的雙機(jī)熱備技術(shù),它能提高edX平臺的數(shù)據(jù)可靠性,增強(qiáng)服務(wù)器的穩(wěn)定性和負(fù)載能力。
關(guān)鍵詞:開源edX;教育信息化;Nginx;雙機(jī)熱備;負(fù)載均衡
中圖分類號:G642 文獻(xiàn)標(biāo)識碼:A 論文編號:1674-2117(2016)17-0095-04
● 引言
構(gòu)建技術(shù)先進(jìn)、功能強(qiáng)大、教學(xué)方式靈活的教學(xué)信息化平臺是MOOC開展的前提條件。目前已經(jīng)成熟且商業(yè)化的教學(xué)平臺有Udacity、Coursera、edX等,其中edX平臺面向全世界免費(fèi)開源所有代碼和課程,這為各國高校進(jìn)一步設(shè)計(jì)滿足自身教學(xué)要求的教學(xué)平臺提供了一種全新的選擇方式,如清華大學(xué)、北京大學(xué)等高校紛紛基于開源edX設(shè)計(jì)了自己的教學(xué)平臺,取得了良好的教學(xué)效果。開源edX平臺結(jié)構(gòu)設(shè)計(jì)先進(jìn)、功能豐富,但是體系復(fù)雜,運(yùn)維難度較高,所以如何實(shí)現(xiàn)平臺數(shù)據(jù)安全、服務(wù)器不間斷運(yùn)行,是自主運(yùn)維edX平臺的關(guān)鍵技術(shù)之一。
筆者在分析edX教學(xué)平臺的功能模塊、系統(tǒng)架構(gòu)和數(shù)據(jù)存儲方式的基礎(chǔ)上,研究了磁盤陣列和雙機(jī)熱備份技術(shù)的特點(diǎn),提出了一個(gè)雙機(jī)熱備和負(fù)載均衡的edX服務(wù)器部署方案,該方案具有服務(wù)器部署簡單、數(shù)據(jù)安全性高和運(yùn)行可靠的特點(diǎn)。
● 開源edX平臺的技術(shù)框架與數(shù)據(jù)存儲方式
1.開源edX平臺的功能與技術(shù)框架
開源edX平臺默認(rèn)搭建在64位的Ubuntu系統(tǒng)上,課程管理模塊(Content Management System,CMS)、學(xué)習(xí)管理模塊(Learning Management System,LMS)和通用模塊(Common Moudle,CM)是它的3個(gè)核心模塊,每個(gè)核心模塊又由若干個(gè)子功能模塊組成。課程管理模塊中最基本的模塊是課程存儲模塊,負(fù)責(zé)創(chuàng)建和管理課程的教學(xué)內(nèi)容信息。學(xué)習(xí)管理模塊包括課件功能模塊、代碼codejail模塊、討論模塊、評分模塊等。其中課件功能模塊負(fù)責(zé)從數(shù)據(jù)庫中讀取課程相關(guān)信息,并將課程內(nèi)容顯示給用戶;代碼codejail模塊用于檢查學(xué)生錄入Python代碼的合法性,保護(hù)系統(tǒng)的安全;討論模塊支持教學(xué)平臺的在線討論和交流;評分模塊實(shí)現(xiàn)學(xué)生作業(yè)、在線考試的成績評價(jià),并保存評價(jià)結(jié)果。通用模塊主要包括用戶注冊、日志、認(rèn)證、輸入檢查、消息隊(duì)列管理等功能。其中日志功能用于記錄學(xué)生和教師的學(xué)習(xí)和教學(xué)行為;認(rèn)證功能包括內(nèi)部認(rèn)證和外部認(rèn)證兩種,用于用戶登錄平臺時(shí)進(jìn)行身份合法性驗(yàn)證。edX教學(xué)平臺各模塊之間既相互獨(dú)立,又相互聯(lián)系,構(gòu)成功能強(qiáng)大的教學(xué)平臺。
開源edX平臺運(yùn)行在主流的Nginx服務(wù)器上,采用MVC編程設(shè)計(jì)模式開發(fā),MVC設(shè)計(jì)模式的核心思想是實(shí)現(xiàn)業(yè)務(wù)邏輯、數(shù)據(jù)和界面顯示的分離,修改界面不需要重新編寫業(yè)務(wù)邏輯,從而提高了程序設(shè)計(jì)的效率。edX的Web應(yīng)用程序基于Django框架,采用Python、Ruby、NodeJS等多種程序語言混合編寫。Django框架通過中間件處理所有的HTTP請求,從而降低了各模塊之間的耦合程度,對于用戶的每一個(gè)HTTP請求,由一組中間件處理。edX界面與后端服務(wù)器的數(shù)據(jù)通訊采用異步更新技術(shù)Ajax方式實(shí)現(xiàn),用戶無須刷新整個(gè)頁面就可以向服務(wù)器傳送數(shù)據(jù),減少數(shù)據(jù)通訊,降低占用帶寬的時(shí)間,從而降低對服務(wù)器和網(wǎng)絡(luò)的要求,提升整個(gè)系統(tǒng)的用戶體驗(yàn)。界面編程采用JQuery標(biāo)準(zhǔn)庫和SCSS框架(CSS預(yù)處理器框架)設(shè)計(jì),不需要考慮瀏覽器的兼容性問題,在提高界面用戶體驗(yàn)的同時(shí),提高了界面設(shè)計(jì)的效率,edX平臺的技術(shù)框架如圖1所示。

2.開源edX平臺的數(shù)據(jù)存儲方式
開源edX平臺采用數(shù)據(jù)庫與文件系統(tǒng)結(jié)合的方式進(jìn)行數(shù)據(jù)管理,同時(shí)采用MySQL和MongoDB兩種類型的數(shù)據(jù)庫技術(shù)。MySQL數(shù)據(jù)庫用于存儲改動較少的結(jié)構(gòu)化數(shù)據(jù)信息,如用戶注冊信息、配置信息等;MongoDB數(shù)據(jù)庫用于存儲數(shù)據(jù)量大、訪問頻繁的非結(jié)構(gòu)化數(shù)據(jù)信息,并且為用戶輸入提供數(shù)據(jù)緩存。MongoDB是一種面向文檔的,實(shí)現(xiàn)分布式文件存儲的非關(guān)系型數(shù)據(jù)庫,具有模式自由、動態(tài)查詢、二進(jìn)制數(shù)據(jù)存儲、云計(jì)算的特點(diǎn)。edX平臺利用MongoDB解決了平臺需要存儲大量短視頻、學(xué)生作業(yè)和課程資料的問題。除此之外,統(tǒng)計(jì)日志、圖片等信息則以文件的方式存儲在系統(tǒng)中,通過Python的文件操作函數(shù)對文件進(jìn)行管理。因此,開源edX平臺數(shù)據(jù)存儲方式是在傳統(tǒng)文件系統(tǒng)的基礎(chǔ)上,融合兩種數(shù)據(jù)庫技術(shù)進(jìn)行數(shù)據(jù)存取操作,能滿足大規(guī)模數(shù)據(jù)訪問的需要。
● 數(shù)據(jù)可靠性與服務(wù)器熱備技術(shù)研究
雖然開源edX平臺功能強(qiáng)大、性能高效,但隨著系統(tǒng)規(guī)模擴(kuò)大,用戶增多,文件總量從GB向TB級增長,教學(xué)平臺的數(shù)據(jù)可靠性和安全運(yùn)行成為一個(gè)重要問題。
目前常用的存儲技術(shù)有磁盤陣列、網(wǎng)絡(luò)存儲、云存儲等多種方式,其中磁盤陣列因性能優(yōu)異、操作簡單而備受關(guān)注。磁盤陣列技術(shù)(Redundant Array of Independent Disks,RAID)是一種將多塊獨(dú)立的物理硬盤按不同的方式組合起來,邏輯構(gòu)成一個(gè)硬盤(邏輯硬盤)的技術(shù),于1987年由美國加州大學(xué)伯克利分校首次提出。磁盤陣列控制器將數(shù)據(jù)以分段的方式存儲在不同的磁盤中,存取數(shù)據(jù)時(shí),陣列中的相關(guān)磁盤一起動作,大幅減少了數(shù)據(jù)的讀取時(shí)間。磁盤陣列技術(shù)不但使用簡單,存儲速度快,還可以實(shí)現(xiàn)數(shù)據(jù)自動備份,一旦某個(gè)磁盤的數(shù)據(jù)損壞,它能利用備份信息迅速將數(shù)據(jù)恢復(fù),提高了用戶數(shù)據(jù)的安全性和可靠性。RAID5技術(shù)是一種性價(jià)比高的磁盤陣列技術(shù),具有讀取速度快、安全性高、空間利用率高等特點(diǎn),是目前較為理想的存儲解決方案。
雖然磁盤陣列技術(shù)能解決數(shù)據(jù)的可靠性問題,但當(dāng)服務(wù)器本身出現(xiàn)問題時(shí),服務(wù)仍然會中斷,因此,服務(wù)器的雙機(jī)或多機(jī)備份仍然非常重要。
雙機(jī)熱備是使用兩臺服務(wù)器互相備份,共同執(zhí)行同一服務(wù),當(dāng)一臺服務(wù)器出現(xiàn)故障時(shí),在不需要人工干預(yù)的情況下,另一臺服務(wù)器自動承擔(dān)服務(wù)任務(wù),保證服務(wù)繼續(xù)進(jìn)行。根據(jù)切換方式不同,雙機(jī)熱備分為主-備(Active-Standby)方式和雙主機(jī)(Active-Active)方式兩種。主-備方式是指一臺服務(wù)器處于某種業(yè)務(wù)的激活狀態(tài),另一臺服務(wù)器處于該業(yè)務(wù)的備用狀態(tài);雙主機(jī)方式是指兩種不同業(yè)務(wù)分別在兩臺服務(wù)器上互為主備狀態(tài)。雙機(jī)熱備通過心跳監(jiān)測查詢服務(wù)器的狀態(tài),一旦發(fā)現(xiàn)對方失效,立即啟動資源接管模塊來接管運(yùn)行在對方主機(jī)上的資源或者服務(wù),從而實(shí)現(xiàn)服務(wù)的不中斷運(yùn)行。
● 開源edX平臺的雙機(jī)熱備和負(fù)載均衡設(shè)計(jì)
對于中等規(guī)模的高等學(xué)校來說,開源edX平臺的主要功能是滿足自身教學(xué)改革需求,數(shù)據(jù)并發(fā)數(shù)要求并不是太高,所以開源edX平臺采用Nginx服務(wù)器完全能滿足需求。筆者基于Nginx和keepalived技術(shù),提出用磁盤陣列保存數(shù)據(jù),用兩臺服務(wù)器實(shí)現(xiàn)雙機(jī)熱備,并配置負(fù)載均衡實(shí)現(xiàn)服務(wù)器的部署。具體方案如下:先配置兩臺服務(wù)器與一個(gè)磁盤陣列,磁盤陣列采用光纖模塊與服務(wù)器相連,然后在兩臺服務(wù)器上安裝Nginx軟件,并將磁盤陣列掛載在linux操作系統(tǒng)中,接著將MYSQL、Mongodb和edX安裝在磁盤陣列上,最后安裝并配置keepalived軟件,設(shè)置2個(gè)虛擬IP地址和DNS地址,其結(jié)構(gòu)如上頁圖2所示。

Keepalived軟件的核心是VRRP協(xié)議,將兩臺服務(wù)器虛擬成一臺服務(wù)器,對外提供虛擬路由器IP,通過預(yù)先設(shè)置或競選機(jī)制,確認(rèn)其中一臺服務(wù)器為主服務(wù)器,另一臺則為備用服務(wù)器,且只有主服務(wù)器對外提供服務(wù)。當(dāng)Keepalived檢測模塊發(fā)現(xiàn)主服務(wù)器失效時(shí),通過VRRP協(xié)議發(fā)送通告,僅需幾秒備用服務(wù)器便可以接管原來主服務(wù)器的網(wǎng)絡(luò)功能,從而實(shí)現(xiàn)整個(gè)平臺的可靠運(yùn)行。
另外,為了實(shí)現(xiàn)服務(wù)器的負(fù)載均衡,筆者將兩臺服務(wù)器配置為互為主備模式,設(shè)置兩個(gè)虛擬IP地址Vip1和Vip2,并將它們作為A記錄增加到DNS服務(wù)器中,然后DNS服務(wù)器根據(jù)解析請求隨機(jī)分配不同的虛擬IP,從而實(shí)現(xiàn)了edX服務(wù)器的負(fù)載均衡。
參考文獻(xiàn):
[1]王啟浩.論我國MOOC平臺的未來發(fā)展——基于Coursera、edX和學(xué)堂在線的對比分析[J].科技與出版,2015(6):108-111.
[2]王書瑤,王小根,晉步.中外MOOC課程對比研究——以edX和“學(xué)堂在線”為例[J].軟件導(dǎo)刊,2014(7):154-156.
[3]王秀婷.基于edX的MOOC互動交流平臺的設(shè)計(jì)與實(shí)現(xiàn)[D].哈爾濱:哈爾濱工業(yè)大學(xué),2014.
[4]高峰,楊連賀.Flex技術(shù)與Django開發(fā)框架的整合研究[J].計(jì)算機(jī)與數(shù)字工程, 2010,38(1):94-96.
[5]Annenkov D V,Cherkashin E A.Generation technique for Django MVC web framework using the stratego transformation language[C]//International Convention on Information & Communication Technology Electronics & Microelectronics.2013:1084-1087.
[6]肖佳,王古城,楊旭,等.雙機(jī)熱備與負(fù)載均衡的設(shè)計(jì)與實(shí)現(xiàn)[J].電子設(shè)計(jì)工程,2015,23(18):176-179.
[7]高俊峰.高性能Linux服務(wù)器構(gòu)建實(shí)戰(zhàn):運(yùn)維監(jiān)控、性能調(diào)優(yōu)與集群應(yīng)用[M].北京:機(jī)械工業(yè)出版社,2012.
作者簡介:陽波(1976.4—),男,湖南冷水江人,教授,碩士生導(dǎo)師,研究方向?yàn)閭鞲衅鳌⑽?納制造和大數(shù)據(jù)理論與應(yīng)用。
基金項(xiàng)目:本文得到湖南省普通高等學(xué)校教學(xué)改革研究項(xiàng)目“基于edX開源自主構(gòu)建地方高校MOOC課程平臺的教學(xué)改革研究”支持。