999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

一種基于LNMP的Moodle 2分布式計算架構*

2013-04-29 00:44:03曾棕根
計算機時代 2013年6期

摘 要: Moodle 2需要運行在PHP 5.3平臺上,如何利用PHP 5.3通過PHP-FPM服務器管理PHP FastCGI進程的特性來提升Moodle 2系統性能是一個亟待解決的關鍵問題。為此,提出了一種基于LNMP的Moodle 2分布式計算架構,并成功研制出樣機。經功能測試和性能測試表明,該系統較單服務器系統提高了5倍的并發訪問能力,而CPU使用率卻降低了26.2%,實現了Moodle 2的高并發和高速訪問,并具有負載均衡、彈性伸縮和容錯性強的特點,為PHP系統特別是Moodle 2系統的大規模推廣應用提供了重要技術參考。

關鍵詞: Moodle; LNMP; 分布式系統; 高并發; 高性能

中圖分類號:TP302.7 文獻標志碼:A 文章編號:1006-8228(2013)06-05-04

Moodle 2 distributed computing architecture based on LNMP

Zeng Zonggen

(Electronic Information Engineering Department, Ningbo Polytechnic, Ningbo, Zhejiang 315800, China)

Abstract: Moodle 2 operates on PHP 5.3 platform. It is an urgent problem how to use PHP 5.3's characteristic of PHP-FPM server managing PHP FastCGI process to enhance the Moodle system performance. Moodle 2 distributed computing architecture based on LNMP is proposed. A prototype is developed successfully. The functional testing and performance testing show that five-fold increase concurrent access capability is obtained compared to the single-server systems, while CPU usage is reduced by 26.2%. Moodle 2's high concurrency and high-speed access are achieved, together with characteristics of balance, flexibility, fault-tolerance, which provides an important technical reference for PHP system and especially for the Moodle system's large-scale application.

Key words: Moodle; LNMP; distributed system; high concurrency; high performance

0 引言

Moodle 2是澳大利亞Martin Dougiamas博士主持研發的第二代Moodle免費開源網絡課程平臺[1],其功能之強大使得在全球范圍內掀起了一股Moodle 2升級、應用熱潮。

但由于Moodle 2要求運行在PHP 5.3以上,而PHP 5.3是PHP技術發展的分水嶺,它采用PHP-FPM[2]服務方式管理PHP FastCGI進程,如何利用這一特性來有效提高Moodle 2訪問速度和并發處理能力是一個亟待解決的關鍵問題。

本文經過深入研究與實驗,成功研制出一種Moodle分布式計算架構,使用源代碼編譯方式成功編譯、安裝、優化了LNMP[3],并在LNMP上安裝了Moodle 2系統,樣機連接地址為http://61.164.87.150:5483/,經httperf測試證實,該樣機實現了Moodle 2的高性能。

1 Moodle 2分布式計算架構

Moodle過去多運行在WAMP[4]或LAMP[5]架構上,性能方面表現得總是不太理想。而采用LNMP分布式計算架構,即CentOS+Nginx+MySQL+PHP,能有效解決上述問題,主要原因:

⑴ 高并發下CentOS操作系統(Linux 2.6+內核)的epoll網絡模型CPU利用率較Windows操作系統僅有的select網絡模型高很多[6];

⑵ Nginx是由俄羅斯人Igor Sysoev設計的開源、高并發HTTP和反向代理服務器[7],據業界測算,它可支持單臺服務器超過3萬的純PHP腳本并發訪問,性能超過Apache服務器的10倍之多;

⑶ PHP 5.3以FastCGI這一目前公認為效率最高的方式運行,并由PHP-FPM服務器集中管理,實現了PHP高效率、高并發和分布式處理,其通信示意圖[8]如圖1所示。

圖1 Nginx+PHP-FPM通信示意圖

圖1中,如果客戶端瀏覽器發出HTML請求,則Nginx直接將HTML文件發送給客戶端;如果客戶端瀏覽器發出PHP請求,則Nginx將此請求轉發給PHP-FPM服務去處理,PHP-FPM服務與MySQL數據庫服務通信,處理完成后,PHP-FPM將處理結果以HTML的形式返回給Nginx服務,Nginx服務再把此HTML文檔返回給客戶端瀏覽器。

⑷ 由于Nginx、PHP-FPM和MySQL都是獨立的服務,所以可以將這幾個服務分別安裝在不同物理服務器上,分攤單臺服務器的負載,這就實現了分布式和高性能的Moodle。

研究表明,PHP處理是高性能LNMP的瓶頸,因此,應安裝多臺PHP-FPM服務器,以實現PHP-FPM負載均衡[9],并安裝NFS文件服務器來同步PHP文件和session共享(也可將session寫到數據庫中來解決session共享問題),統一訪問同一臺MySQL數據庫。圖2為本文提出的分布式LNMP架構。

圖2 分布式LNMP架構示意圖

圖2的分布式計算架構中,Moodle的程序文件分別拷貝在每臺PHP-FPM服務器中,Moodle的數據文件即moodledata文件夾放在NFS文件服務器中供所有PHP-FPM服務器共享,Moodle的數據庫則存放在MySQL服務器中供所有PHP-FPM服務器統一調用,而Moodle的session則保存在MySQL數據庫中。當用戶訪問Moodle網站時,PHP請求被Nginx服務器接收后,它的upstream模塊按輪詢方式將此請求發送給一臺PHP-FPM服務器去處理,或采用ip_hash方式確定一個訪問者發出的請求總是由一臺固定的PHP-FPM服務器來處理,例如:

Upstream phpfpm {

ip_hash; //如果采用輪詢方式選擇PHP-FPM服務器則注釋掉此行

server 192.168.0.50:9000; //PHP-FPM

server 192.168.0.51:9000; //PHP-FPM

server 192.168.0.52:9000; //PHP-FPM

}

PHP-FPM服務器接收到PHP請求后,則編譯執行本機中的Moodle程序,如果需要存取Moodle數據就從NFS文件服務器中的moodledata程序文件中去存取文件,如果需要存取數據庫就去訪問MySQL數據庫服務器,最后,PHP-FPM服務器把運行結果以HTML方式返回給Nginx服務器,Nginx服務器則將結果返回給客戶端瀏覽器,完成一次Moodle請求。

2 編譯安裝LNMP架構和Moodle 2

確定了分布式架構后,需要在服務器中將LNMP架構和Moodle程序安裝好。由于Moodle 2需要LNMP架構特定模塊支持,必須采用編譯LNMP各部件源代碼方式來安裝LNMP架構而不能安裝二進制發行版。另外,通過本機編譯源碼方式安裝的部件會更好地發揮硬件性能。本文采用的部件及版本如表1所示。

表1 LNMP架構各部件版本一覽表

[部件\&文件名或版本要求\&CentOS\&i386 ,6.2版,32位\&MySQL\&mysql-5.5.19.tar.gz\&mysqlcc\&mysqlcc-1.0.1-fc14.1.i686.rpm\&PCRE\&pcre-8.30.zip\&Nginx\&nginx-1.2.4.tar.gz stable穩定版\&PHP\&php-5.4.8.tar.gz\&eAccelerator\&eaccelerator-42067ac.tar.gz for php 5.4\&Moodle\&moodle-latest-22.tgz\&]

由于編譯安裝LNMP架構和部署Moodle程序是Linux程序員的基本功,本節對此過程不再贅述,讀者可以參考LNMP一鍵安裝包官方網站http://lnmp.org/或張宴老師的博文《Nginx 0.8.x+PHP 5.2.13(FastCGI)搭建勝過Apache十倍的Web服務器(第6版)》[10]。

3 優化LNMP架構參數

編譯安裝好LNMP和Moodle 2后,還需要對各項服務進行優化,使得服務器性能得以充分發揮。優化服務器的主要思路是:調高系統參數、關閉不必要的日志讀寫、使用緩存、使用加速器等。

3.1 Linux內核優化方法[11]

⑴ 調高Linux內核打開文件數量為102400。

Linux默認打開文件數是1024,調高linux內核打開文件數量(必須是root帳號):

a、在/etc/profile文件最后加上:ulimit -HSn 102400

b、在/etc/rc.local文件最后加上:ulimit -HSn 102400

c、在/etc/security/limits.conf文件最后添加下面兩行內容(CentOS 6.2需要在此文件里修改,否則無效):

* hard nofile 102400

* soft nofile 102400

d、在/usr/include/bits/typesizes.h文件中,修改__FD_SET_SIZE宏定義值為102400。

⑵ 調整單個用戶最多擁有的進程數。

a、在/etc/security/limits.conf文件最后添加下面兩行內容

* hard nproc 102400

* soft nproc 102400

b、在/etc/security/limits.d/90-nproc.conf文件中修改soft nproc為102400。

⑶ 優化Linux內核的TCP選項,增加以下設置:

net.ipv4.tcp_max_syn_backlog=65536

net.core.netdev_max_backlog=32768

net.core.somaxconn=32768

net.core.wmem_default=8388608

net.core.rmem_default=8388608

net.core.rmem_max=16777216

net.core.wmem_max=16777216

net.ipv4.tcp_timestamps=0

net.ipv4.tcp_synack_retries=2

net.ipv4.tcp_syn_retries=2

net.ipv4.tcp_tw_recycle=1

net.ipv4.tcp_tw_reuse=1

net.ipv4.tcp_mem=94500000 915000000 927000000

net.ipv4.tcp_max_orphans=3276800

net.ipv4.ip_local_port_range=1024 65535

3.2 MySQL優化方法

⑴ 使用my-innodb-heavy-4G.cnf作為生產環境下的配置文件。

⑵ 調整/etc/my.cnf中的幾個參數,增加數據庫的打開文件數量和各種緩存:

open_files_limit=10240

back_log=600

max_connections=5000

max_connect_errors=6000

table_open_cache=2048

max_allowed_packet=32M

thread_cache_size=300

query_cache_size=64M

innodb_buffer_pool_size=2G

innodb_thread_concurrency=16

3.3 Nginx優化方法

⑴ 訪問日志會造成頻繁磁盤訪問并占用大量磁盤空間,對于Moodle這樣的安全性要求并不是非常苛刻的應用,應當關閉Nginx訪問日志,或者定時切割Nginx訪問日志(如每天0點0分切割一次),以避免單個日志文件太大而影響系統性能。

⑵ 使用epoll網絡I/O模型,epoll網絡模型只內建于Linux內核2.6以上的OS中。該模型有別于Windows操作系統上僅有的select網絡模型,在高并發連接下,CPU利用率會提高很多。

⑶ 打開keepalive_timeout,使TCP連接保持65秒,連續訪問時避免頻繁重建連接。

⑷ 充分發揮CPU多核心性能,指定Nginx的工作進程數worker_processes,一般為總核數或總核數的兩倍,這里的總核數是指CPU線程總數。

⑸ 開啟Nginx的gzip壓縮功能,提高傳輸速度,改善用戶體驗。啟用gzip壓縮后,Nginx在向客戶端傳送網站的.html的文件、.css和.js等文件時,會先采用gzip壓縮,使文件體積大為減小,傳輸耗時就少了,而常用的客戶端瀏覽器都內建了gzip解壓縮程序,會自動解壓。

3.4 PHP-FPM優化方法

⑴ 指定PHP-FPM允許打開最多文件數,將rlimit_files設為102400,這個參數與Linux內核參數要吻合。

⑵ 根據每個PHP FastCGI進程大約消耗20MB內存計算,4GB內存可一次性開啟128個PHP FastCGI進程,并行等待客戶端PHP腳本請求。指定PHP-FPM以靜態方式創建PHP FastCGI進程,一次性啟動128個PHP FastCGI進程,再設置每個進程在重置之前能夠執行的最多請求數為65535。在終端通過鍵入#pstree命令,可以查看到PHP-FPM服務靜態創建的PHP FastCGI進程的數量為128個,如圖3所示。

圖3 PHP-FPM服務靜態創建的PHP FastCGI進程

3.5 PHP優化方法

使用eAccelerator for PHP 5.4來對PHP進行加速。eAccelerator是一個自由開放源碼的PHP加速器,通過動態內容緩存,使PHP腳本在編譯的狀態下,對服務器的開銷幾乎完全消除。它還能優化腳本,以加快其執行效率,使PHP腳本執行效率能提高1~10倍[12]。

安裝好eAccelerator后,重新啟動PHP-FPM和Nginx,再運行phpinfo.php程序,可以看見這條信息,說明eAccelerator生效了:with eAccelerator v1.0-dev, Copyright (c) 2004-2012 eAccelerator, by eAccelerator。

4 樣機性能測試

經過上述的編譯、安裝和優化,成功研制了LNMP + Moodle 2服務器樣機,網址為http://61.164.87.150:5483/。該服務器硬件配置如表2所示。

表2 Moodle 2服務器樣機硬件配置

[硬件\&參數\&內存\&4GB\&處理器0\&Intel(R) Core(TM) i5-2400S CPU @2.50GHZ\&處理器1\&Intel(R) Core(TM) i5-2400S CPU @2.50GHZ\&處理器2\&Intel(R) Core(TM) i5-2400S CPU @2.50GHZ\&處理器3\&Intel(R) Core(TM) i5-2400S CPU @2.50GHZ\&]

4.1 功能測試

經過三個月“JAVA程序設計”網絡課程的教學使用證實,該樣機在開設課程、上傳用戶、注冊用戶、用戶授權、上傳文件、上傳圖像、上傳用戶、討論板、作業模塊、考試模塊、主題選擇、郵件自動發送、模塊升級和卸載等方面都能正常使用,無任何bug, Moodle 2軟件質量非常高,系統響應速度也非常快,無任何延遲感,學生普遍反映非常滿意。

4.2 性能測試

采用HP實驗室研發的服務器負載測試工具httperf[13]對單服務器和分布式服務器樣機進行對比測試。

【測試樣例】#httperf --server 10.61.0.2 --port 80 --uri/index.php --rate 100 --num-conn 1000 --num-call 1 --timeout 5。

【測試含義】測試機以每秒100個并發連接的速度向服務器(服務器的IP是<10.61.0.2>,端口為80)發起連接(Connection),每個連接產生1個請求(Request),請求的網頁是index.php,如果此連接5秒內還未從服務器返回處理結果,就記為一次錯誤(連接失敗),共要完成1000個連接。

測試結果見表3。

表3 單服務器與分布式服務器性能測試對比表

[ \&單服務器\&分布式服務器\&完成總連接(個)\&230\&1500\&連接速度(連接數/秒)\&18.1\&107.3\&CPU用戶時間(秒)\&5.12\&1.97\&CPU系統時間(秒)\&7.6\&12.01\&]

從以上的對比測試可以看出,在同等條件下,采用單服務器部署方式,Moodle系統平均每秒僅能處理18.1個有效請求,CPU用戶時間占用率高達40.3%;而采用分布式計算的部署方式,Moodle系統平均每秒能處理107.3個有效請求,CPU用戶時間占用率卻低至14.1%。由此可以看出,此分布式系統較單服務器系統并發處理能力提高了近5倍,而CPU用戶時間卻降低了26.2%,系統非常輕松,響應敏捷。

5 結束語

本文在PHP 5.3最新技術的基礎上,提出了一種基于LNMP的Moodle 2分布式計算架構,研制出了一套樣機,并經過了實踐檢驗和服務器負載測試,證明該系統性能得到了很大提升,并具有容錯功能和彈性伸縮的特征。當一臺PHP-FPM服務器當機時,并不會影響整套系統的正常運行;隨著系統應用規模的逐步擴大,還能夠任意將新的PHP-FPM服務器接入到該系統中,分擔計算負載,實現彈性伸縮。限于目前實驗條件所限,本文只針對3臺PHP-FPM服務器進行了實驗。

另外需要指出的是,本文研制的由1臺Nginx服務器、3臺PHP-FPM服務器、1臺NFS文件服務器和1臺MySQL服務器等6臺2核心4線程的服務器組成的Moodle 2分布式計算系統,每秒能處理107.3個有效請求,按以10秒產生一次做題請求來計算,該系統能支持至少1073個學生同時在線考試,能滿足一所2000~3000人訪問的中等學校的應用需求。如果要滿足一所上萬人大學的使用需求,那就需要增加服務器的硬件性能(如CPU超過24線程)和PHP-FPM服務器數量,具體數量應當以httperf服務器負載測試結果為準。

本文提出的LNMP分布式計算構架,適用性廣,不僅適用于Moodle 2系統,也能滿足其他PHP系統的大規模訪問需求。

參考文獻:

[1] Moodle官網[EB/OL].

[2] php-fpm[EB/OL].

[3] LNMP官網[EB/OL].

[4] 曾棕根.基于WAMP的簡體中文Moodle架設與性能優化[J].現代教

育技術,2011,21(4):136-139.

[5] 曾棕根.源程序在線評測系統技術改進[J].計算機工程與應用,

2011.47(4):68-71.

[6] 張宴.實戰Nginx:取代Apache的高性能Web服務器[M].電子工業出

版社,2010.

[7] Nginx官網[EB/OL].

[8] (法)Clément Nedelcu.Nginx HTTP Server[M].France:Packt Publishing,

2010.6:207-208

[9] 使用多fastcgi進行php負載均衡[EB/OL].

com/in-loading/archive/2012/03/29/

[10] Nginx 0.8.x + PHP 5.2.13(FastCGI)搭建勝過Apache十倍的Web

服務器[EB/OL].< http://blog.s135.com/nginx_php_v6/>

[11] 陶利軍.決戰Nginx:高性能Web服務器詳解與運維[M].清華大學出

版社,2012.6:43-48

[12] eAccelerator官網[EB/OL].

[13] httperf官網[EB/OL].

httperf/>

主站蜘蛛池模板: 国产精品美人久久久久久AV| 亚洲成人福利网站| 亚洲另类国产欧美一区二区| 免费A∨中文乱码专区| 1024你懂的国产精品| 欧美激情第一欧美在线| 亚洲欧美精品在线| 国产精品99r8在线观看| 国产福利在线免费观看| 毛片卡一卡二| 亚洲综合国产一区二区三区| 亚洲一道AV无码午夜福利| www.91在线播放| 亚洲视频无码| 亚洲美女操| 国产精品内射视频| 婷婷亚洲视频| 不卡的在线视频免费观看| 亚洲人成电影在线播放| 伊在人亚洲香蕉精品播放| 日韩精品一区二区三区视频免费看| 青青青视频91在线 | 国产无码性爱一区二区三区| 成人日韩视频| 国产欧美日韩另类精彩视频| 在线播放国产一区| 777国产精品永久免费观看| 亚洲精品无码专区在线观看| 欧美黄网站免费观看| 91久久青青草原精品国产| 宅男噜噜噜66国产在线观看| 91精品网站| 国产综合日韩另类一区二区| www.91在线播放| 99视频在线免费看| 四虎永久在线精品国产免费| 亚洲欧美自拍视频| 为你提供最新久久精品久久综合| 亚洲欧美日韩视频一区| 99久久国产精品无码| 91青草视频| 国产精品精品视频| 欧美第二区| 欧美日本激情| 日韩精品久久久久久久电影蜜臀| 内射人妻无码色AV天堂| 人妻熟妇日韩AV在线播放| 凹凸国产分类在线观看| 成人福利在线看| 亚洲狠狠婷婷综合久久久久| 国产精品视频免费网站| 亚洲狠狠婷婷综合久久久久| 色婷婷国产精品视频| 成年看免费观看视频拍拍| 久久综合丝袜长腿丝袜| 91系列在线观看| 欧美视频在线播放观看免费福利资源 | 色综合综合网| 成年人国产网站| 九九精品在线观看| 亚洲国产系列| 国产浮力第一页永久地址| 精品视频福利| 国产99视频精品免费视频7| 亚洲综合片| 日韩国产亚洲一区二区在线观看| 国产一线在线| 久久综合亚洲鲁鲁九月天| 亚洲成人免费在线| 婷婷亚洲视频| 国产精品久久久久久久久| 丝袜亚洲综合| 国禁国产you女视频网站| 国产精品久久久久久影院| 五月天天天色| 欧美视频在线第一页| 最新国产精品鲁鲁免费视频| 69免费在线视频| 六月婷婷精品视频在线观看| 精品少妇人妻av无码久久| 91麻豆国产精品91久久久| 国产成人亚洲日韩欧美电影|