【摘要】Moodle架設和性能優(yōu)化是Moodle應用難點。先給出了WAMP開源平臺架設方案,然后給出了簡體中文Moodle 1.9.10+系統(tǒng)架設和性能優(yōu)化方法,最后對Moodle架設進行了實踐檢驗,是Moodle架設的第一手資料,為Moodle的應用推廣提供了關鍵技術支持。
【關鍵詞】Moodle;WAMP;開源;課程管理系統(tǒng);性能優(yōu)化
【中圖分類號】G40-057 【文獻標識碼】A 【論文編號】1009—8097(2011)04—0136—04
引言
Moodle(Modular Object-Oriented Dynamic Learning Environment,模塊化面向對象的動態(tài)學習環(huán)境)是由澳大利亞教師Martin Dougiamas主持開發(fā)的免費開源的課程管理系統(tǒng)(CMS),是目前世界上應用最廣泛的網絡教學平臺之一[1]。
根據Moodle官方網站的統(tǒng)計數(shù)字[2],截止2011年5月20日,已有212個國家和地區(qū),54436個注冊站點在使用Moodle,形成了全球教師學習應用Moodle的熱潮。根據世界著名的教育軟件評估中心(Centre for Learning and Performance Technologies)的最新評選,在2010年世界學習工具和教育軟件的排序中,Moodle在全部教育軟件中排序第十位,在課程管理系統(tǒng)類中排在第一位。這反映了Moodle強大的教學功能越來越受到人們的好評[3]。
由于Moodle采用開源平臺,各種部件版本多樣且配置復雜,Moodle架設成為應用難點;高并發(fā)性是Moodle訪問的重要特征,未經優(yōu)化就不能有效使用。為了讓Moodle在我國盡快應用普及,本文結合作者多年對WAMP開源平臺的研究成果[4],提供了一套基于WAMP平臺的簡體中文Moodle系統(tǒng)架設的完全解決方案,是國內的第一手資料。
一 架設WAMP平臺
1 定義
安裝Moodle前,需先要架設好WAMP 平臺。WAMP平臺是指Windows運行環(huán)境下的免費開源軟件組合Apache+MySQL+Perl/PHP/Python,是Moodle系統(tǒng)運行的基礎平臺[5]。根據以下方案架設的WAMP平臺,適用于Moodle 2.0,也適合Moodle 1.9.10+及以下所有版本。WAMP平臺如圖1。

2 選型
WAMP架構各部件升級速度快,版本多樣。如果選型不當,極易造成WAMP平臺運行不穩(wěn)定、效率低下甚至崩潰。大量應用經驗表明,MySQL 5.1.53、 Apache 2.2.17 和PHP 5.2.0是架構WAMP的首選。
3 全局編碼選擇
WAMP架構各部件對文字的編碼必須采用同一套標準才能確保相互之間正確交換數(shù)據。由于AMP具有跨平臺特征,所以,MySQL數(shù)據庫、Apache服務器、PHP模塊、PHP程序和客戶端瀏覽器應當采用UTF-8編碼來對文字進行編碼和解碼。UTF-8編碼包含了世界上所有的文字,也是Linux操作系統(tǒng)默認的編碼方式。
4 部件間的連接
通過在Apache配置文件httpd.conf最后加上兩行命令,讓Apache知道PHP模塊的安裝路徑:
PHPIniDir \"C:\\Program Files\\PHP\\\"
LoadModule php5_module \"C:\\Program Files\\PHP
php5apache2_2.dll\"
通過在Apache的mime.types文件最后加上這兩行命令,讓Apache去執(zhí)行文件擴展名為“php”程序,而不是讓客戶端瀏覽器去下載*.php程序:
application/x-httpd-phpphp
application/x-httpd-php-sourcephps
而PHP通過安裝MySQLi擴展(改進的MySQL驅動)來與MySQL數(shù)據庫通信。
二 架設Moodle
1 版本選擇
2010年11月25日,經過全球數(shù)百程序員兩年半時間的努力,Moodle 2.0正式發(fā)布。這就使得目前有Moodle 2.0和Moodle 1.9.x兩套系統(tǒng)在保持更新。實驗證實,Moodle 2.0對WAMP平臺版本和客戶端瀏覽器要求太高,對各版本的IE兼容性不好。而目前1.9.10+已十分成熟穩(wěn)定,因此,現(xiàn)階段應用Moodle,1.9.10+系統(tǒng)仍是首選。
2 安裝方法
在Moodle官方網站http://moodle.org/downloads/上直接下載Moodle標準安裝包(Standard Moodle packages)1.9.10+后,解壓縮到Apache的web根目錄下,再需在http://download.moodle.org/lang16/中下載簡體中文語言包(Chinese(Simplified))zh_cn_utf8.zip解壓縮在Moodle的lang文件夾內,最后在瀏覽器地址欄中輸入http://127.0.0.1后,就會自動安裝。安裝時,注意把Moodle數(shù)據目錄放在其它盤,如D盤。在規(guī)劃磁盤時,D盤應當劃分得足夠大,以便存儲課程中不斷增長的上傳文件。
3 設定訪問IP
由于Moodle只支持一個IP地址,安裝完后,需要立即設置訪問Moodle的IP地址,才能正確運行。如果申請的IP為http://61.164.87.150:5481,那么,需將安裝根目錄config.php文件中$CFG->wwwroot='http://127.0.0.1'修改為$CFG->wwwroot = 'http://61.164.87.150:5481'。如果安裝Moodle的服務器沒有外網IP,那么,必需要將該IP設置為服務器的內網IP地址。
4 簡體中文問題的修正
Moodle1.9.x針對簡體中文存在三個常見的問題,可相應采取如下三種修正方案:
(1)有些地方漢化不妥當或遺漏,可直接打開Moodle安裝目錄下的lang\\zh_cn_utf8文件夾內去修改moodle.php等相應文件;
(2)對于上傳文件名不能包含漢字,可采取把文件主名修改成時間戳+0~32768隨機數(shù)+擴展名的方法,這樣同時解決了文件名沖突,如上傳test.doc后,會修改為形如1304062173_28055.doc的文件名。只需把下面這塊代碼拷貝在 moodle安裝目錄下lib\\uploadlib.php文件的 if (move_uploaded_file($this->files[$i]['tmp_name'], $destination.'/'.$this->files[$i]['name']))語句上方:
$parts = explode('.', $this->files[$i]['name']);
if (count($parts) > 1) {//存在擴展名
$extension = '.'.array_pop($parts);
$name = implode('.', $parts);}
else{
$extension = \"\";//擴展名為空字符串
$name = $this->files[$i]['name'];}
$this->files[$i]['name']=time().\"_\".rand().$extension;
(3)針對首頁日歷上出現(xiàn)亂碼“2011騫”的修訂方案,解決辦法:先用記事本打開Moodle安裝目錄下的lang\\zh_cn_utf8\\ langconfig.php,把該文件中的“簡體中文”四個字修改為“Chinese (Simplified)”。再單擊“文件-另存為”菜單,以ANSI編碼方式保存該文件。
5 使用SMTP方式發(fā)送郵件和Moodle Cron服務
SMTP方式發(fā)送郵件提高了Moodle的交互性。admin用戶登錄Moodle,在“網站管理-服務器-郵件”中設置第三方SMTP服務器信息后,Moodle就可通過該服務器來方式發(fā)送郵件,而不必在本機安裝SMTP服務器。
由于郵件不會自動發(fā)送出去,所以, Windows中可以安裝Moodle Cron服務來自動執(zhí)行郵件發(fā)送任務??傻絟ttp://www.emoodle.org/vread-187.html上下載MoodleCron程序。安裝該項服務時,只需設置發(fā)送郵件的時間頻率(通常設置為5分鐘)和http://example.com//admin/cron.php的URL即可。
三 優(yōu)化Moodle性能
很多研究者懷疑WAMP架構的性能,提出應當把Moodle架設到象LAMP架構這樣的全開源環(huán)境中去[6]。其實Moodle訪問慢的主要原因在于缺少系統(tǒng)優(yōu)化。針對Moodle系統(tǒng),主要從以下幾方面進行性能優(yōu)化:
(1)盡量提高服務器硬件速度與容量。CPU一般采用多核心的,內存3.5GB以上。
(2)根據實際情況調整MySQL,可不定期通過show variables和show status命令分別查看MySQL變量設定值和當前值,主要調整MySQL緩存,使其達到最佳性能[7]。修改MySQL的配置文件my.ini,包括增加并發(fā)連接數(shù)max_connections,增大查詢緩沖區(qū)query_cache_size,增大打開表緩沖table_cache,增大線程緩沖thread_cache_size,增加innodb數(shù)據庫引擎的表緩沖池innodb_buffer_pool_size到物理內存的50%~80%。可以在MySQL的命令行客戶端中通過使用show variables來觀察MySQL變量設定值和使用show status命令來觀察MySQL變量當前值,通過觀察,動態(tài)調整MySQL各項參數(shù),以使MySQL性能達到最優(yōu)化。應當主要觀察以下幾個狀態(tài)值:
Uptime:MySQL服務器運行時長,計量單位為秒;
Max_used_connections:MySQL服務器已產生的最大并發(fā)連接數(shù);
Open_tables:當前打開表的數(shù)量,這個值應當小于table_cache設置;
Qcache_free_memory:查詢緩存中的空閑內存。
Qcache_hits:每次查詢在緩存中命中時就該值增大。
Qcache_inserts:每次插入一個查詢時就增大。
Qcache_lowmem_prunes:緩存出現(xiàn)內存不足并且必須要進行清理以便為更多查詢提供空間的次數(shù)。
(3)修改PHP配置文件php.ini,包括延長會話生存周期session.gc_maxlifetime來增加系統(tǒng)的穩(wěn)定性;增加memcache內存緩沖擴展php_memcache.dll,再在Moodle的“網站管理-服務器-性能-緩存類型”中使用memcached內存緩沖模式,這樣,moodle對象將緩存在內存中,直接減少了對外存的訪問次數(shù),這將大大提高moodle訪問速度。
(4)在Apache中使用MPM多路處理模塊提高Apache性能,使moodle能應對多達上千的訪問高峰[8]。在Windows中,mpm_winnt主要通過ThreadsPerChild和MaxRequestsPerChild兩條指令來優(yōu)化Apache性能。使用WinNT多路處理模塊MPM后,Apache在Windows操作系統(tǒng)中只有一個父進程httpd.exe(監(jiān)控進程),父進程再會啟動一個子進程httpd.exe(工作進程)。父進程在創(chuàng)建完子進程后,把80端口的監(jiān)控權轉交給子進程,而此時父進程主要監(jiān)管子進程運行狀態(tài),子進程則直接監(jiān)聽80端口。子進程在生成時會一次性創(chuàng)建ThreadsPerChild個線程(以后不再創(chuàng)建新線程,所以,這個數(shù)值要足夠大,以便可以處理可能的請求高峰,但最大值不能超過1920,一般300~500為宜)。子進程(工作進程)接到訪問請求后,將該請求交由線程去處理。在子進程的生命周期內,子進程處理完MaxRequestsPerChild個請求后,子進程將會被父進程殺死,并釋放所占資源,然后會重新創(chuàng)建新的子進程和相應線程。如果 MaxRequestsPerChild設為0,父進程(監(jiān)控進程)則永遠不會將子進程(工作進程)殺死。下面是error_2011_04_12.log 日志中MPM啟動信息:
Apache/2.2.17 (Win32) PHP/5.2.0 configured -- resuming normal operations
Server built: Oct 18 2010 01:58:12
Parent: Created child process 8588
Child 8588: Child process is running
Child 8588: Acquired the start mutex.
Child 8588: Starting 1920 worker threads.
Child 8588: Starting thread to listen on port 80.
(5)將KeepAlive設置為On,允許持續(xù)HTTP連接。一方面,可以減少TCP連接建立和關閉的次數(shù),從而節(jié)約了CPU時間和TCP協(xié)議控制塊消耗的內存;另一方面,在一次TCP連接上就可以實現(xiàn)HTTP請求和應答的流水線作業(yè),這意味著客戶端程序可以不必等待應答就可以連續(xù)發(fā)出多個請求,減少了系統(tǒng)延遲,提高了單個TCP連接的利用率[9]。
(6)按日期存儲Apache錯誤日志和訪問日志文件[10]。Apache默認將錯誤日志和訪問日志以追加方式分別保存在logs/error.log和logs/access.log文件中,使得這兩個文件尺寸會不斷增大,從而影響Apache服務器運行效率,直至寫滿磁盤。解決辦法:1)在D盤根目錄下新建日志存放目錄D:\\ApacheLogs;2)將httpd.conf文件的ErrorLog \"logs/error.log\"和CustomLog \"logs/access.log\" common修改為:ErrorLog\"|bin/rotatelogs.exe D:/ApacheLogs/error_%Y_%m_%d.log 86400 480\"和CustomLog \"|bin/rotatelogs.exe
D:/ApacheLogs/access_%Y_%m_%d.log 86400 480\" common,這樣,Apache就會每天產生兩個名如“error_2011_04_12.log”和“access_2011_04_12.log”的日志文件。
經過性能優(yōu)化,Moodle訪問速度有明顯提高,系統(tǒng)能輕松應付訪問高峰。
四 網絡教學互動平臺應用實例
按以上的架設方法,筆者使用Moodle 1.9.10+系統(tǒng)成功架設了寧波職業(yè)技術學院電子信息工程系網絡教學互動平臺,網址http://61.164.87.150:5481。服務器CPU為telreg; Xeon#8482; CPU 3.40GHz雙核,內存為3.5G配置信息和WAMP平臺配置如表1所示。

經過三個月累計10萬次訪問處理表明,該網絡教學互動平臺各項功能都能正常使用,事件查看器中無一異常事件,系統(tǒng)運行穩(wěn)定,服務器負載輕松,響應速度快,能輕松應付Web并發(fā)數(shù)高達1500的網絡訪問高峰,很好地滿足了全系1500人的網絡教學互動。
五 結語
本文先講述了WAMP開源平臺架設方案,然后再講述了moodle 1.9.10+架設和性能優(yōu)化方法,最后對moodle系統(tǒng)架設與性能優(yōu)化進行了實證。利用本文提供的思路,在Windows上運行moodle就可以獲得最佳性能。moodle 平臺架設好了,要深入應用moodle,接下去的事情,還得稍加學習專門的moodle培訓教材。
參考文獻
[1] 曾棕根. Moodle網絡課程平臺[M].北京:北京大學出版社,2010:1.
[2] Moodle統(tǒng)計[EB/OL].
[3] 黎加厚:課程管理系統(tǒng)Moodle (魔燈)在中國的發(fā)展[EB/OL].
[4] 曾棕根.源程序在線評測系統(tǒng)技術改進[J].計算機工程與應用,2011,47(4):68-71.
[5] 丁革建,曾棕根,等.LAMP開發(fā)實踐教程[M].北京:中國鐵道出版社,2009:1.
[6] 連仙枝.淺析網絡教學平臺Moodle的構建與應用[J].太原大學學報,2010,11(4):105-107.
[7] 楊鵬.Linux服務器架設[M].北京:清華大學出版社,2008:532-534.
[8] PHPChina:多路處理模塊MPM. [EB/OL]
[9] 張中慶,等.Apache源代碼全景分析第1卷[M].北京:電子工業(yè)出版社,2009:385-386.
[10]百度空間:apache日志文件每天一個文件.[EB/OL]
The Platform Erection and Performance Optimization of Simplified Chinese Moodle Based on WAMP
ZENG Zong-gen
(Electronic Information Engineering Department, Ningbo Polytechnic, Ningbo, Zhejiang 315800, China)
Abstract: Moodle erection and Performance Optimization are difficult. This paper gives the erection method of WAMP open-source platform firstly, then gives the erection and Performance Optimization method of Simplified Chinese 1.9.10+, finally, Successfully tested moodle. This paper is a first-hand information on moodle, provides key technical support for moodle application and promotion.
Key words: moodle; WAMP; open-source; CMS; performance optimization
收稿日期:2011年3月11日
編輯:紅葉