国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

LAMP架構(gòu)在嵌入式平臺(tái)上的移植與搭建

2018-10-24 04:39李小娜張釋如張雨珊趙榕
現(xiàn)代電子技術(shù) 2018年20期
關(guān)鍵詞:WEB服務(wù)S架構(gòu)網(wǎng)絡(luò)應(yīng)用

李小娜 張釋如 張雨珊 趙榕

摘 要: 基于嵌入式的Web服務(wù)應(yīng)用體系提出將通用服務(wù)器架構(gòu)LAMP應(yīng)用于嵌入式系統(tǒng)的設(shè)計(jì)思想。分析LAMP架構(gòu)在嵌入式領(lǐng)域的應(yīng)用優(yōu)勢,設(shè)計(jì)嵌入式平臺(tái)上LAMP架構(gòu)的具體實(shí)現(xiàn)方案,并給出LAMP中各個(gè)組件在移植、配置和優(yōu)化中的具體方法。該架構(gòu)為嵌入式系統(tǒng)的高級(jí)網(wǎng)絡(luò)應(yīng)用提供了一種通用解決方案,其具體實(shí)現(xiàn)方法對(duì)嵌入式網(wǎng)絡(luò)服務(wù)及其監(jiān)控系統(tǒng)的應(yīng)用具有借鑒和參考價(jià)值。

關(guān)鍵詞: LAMP; MySQL; B/S架構(gòu); 嵌入式系統(tǒng); Web服務(wù); 網(wǎng)絡(luò)應(yīng)用

中圖分類號(hào): TN915?34; TP368.5 文獻(xiàn)標(biāo)識(shí)碼: A 文章編號(hào): 1004?373X(2018)20?0114?04

Abstract: A design idea of applying the general server architecture Linux?Apache?MySQL?PHP (LAMP) to the embedded system is proposed based on the embedded Web service application system. The advantages of applying the LAMP architecture in the embedded field are analyzed. The specific implementation scheme of the LAMP architecture on the embedded platform is designed. The specific methods for transplantation, configuration and optimization of every component in LAMP are presented. The architecture provides a general solution for the advanced network application of the embedded system. The specific implementation method of the architecture has a reference value for applications of embedded network service and its monitoring system.

Keywords: LAMP; MySQL; B/S architecture; embedded system; Web service; network application

0 引 言

隨著嵌入式系統(tǒng)對(duì)網(wǎng)絡(luò)功能需求的不斷提升,越來越多的嵌入式平臺(tái)移植了B/S架構(gòu)的Web服務(wù)來提供網(wǎng)絡(luò)控制功能,在嵌入式網(wǎng)絡(luò)服務(wù)及其監(jiān)控系統(tǒng)等方面有廣泛應(yīng)用[1]。

目前,嵌入式平臺(tái)的Web服務(wù)做法基本是:以thttpd,boa,lighttpd等輕型服務(wù)器為主,配合移植SQLite,eXtremeDB等小型嵌入式數(shù)據(jù)庫,最后利用后臺(tái)CGI(Common Gateway Interface)服務(wù)程序,將采集的數(shù)據(jù)反映到Web頁面或存入數(shù)據(jù)庫。這些精簡架構(gòu)雖然小巧靈活、結(jié)構(gòu)簡單,但是其功能有限,也不具備普遍適用性,存在許多應(yīng)用方面的問題。第一,在水質(zhì)監(jiān)測、農(nóng)田信息檢測、糧倉監(jiān)控等環(huán)境監(jiān)控系統(tǒng)中,需要長期監(jiān)測采集的信息,而大多數(shù)輕型嵌入式Web服務(wù)器穩(wěn)定性不夠;第二,在智能家居、機(jī)房監(jiān)控等場合,要求數(shù)據(jù)或系統(tǒng)能以動(dòng)態(tài)模擬的方式呈現(xiàn)給用戶,僅靠CGI程序很難實(shí)現(xiàn);第三,在工業(yè)控制領(lǐng)域中的預(yù)警處理、故障分析、安全監(jiān)測等需要對(duì)數(shù)據(jù)庫表進(jìn)行長期跟蹤與智能分析,而利用CGI操作大多數(shù)精簡型嵌入式數(shù)據(jù)庫不能實(shí)現(xiàn)完善的智能監(jiān)測。

LAMP(Linux?Apache?MySQL?PHP)是指由 Linux 操作系統(tǒng)、Apache Web服務(wù)器、MySQL數(shù)據(jù)庫,以及超文本預(yù)處理器(Hypertext Pre?Proeessor,PHP)腳本語言組成的一種B/S服務(wù)架構(gòu),是當(dāng)今能與 J2EE 和.Net 齊名的三大 Web 典型架構(gòu)之一。由于J2EE中Oracle成本過高,而.Net移植性不好,所以LAMP成為目前唯一一個(gè)經(jīng)過配置和優(yōu)化能夠移植到嵌入式系統(tǒng)中的通用架構(gòu)。LAMP架構(gòu)基于Linux系統(tǒng),Linux 作為一種 UNIX 操作系統(tǒng),它是真正的多用戶、多任務(wù)、多平臺(tái)操作系統(tǒng),具有穩(wěn)定健壯、低成本、高性能、互操作性和開放源代碼等特點(diǎn)[2]。不同于傳統(tǒng)嵌入式精簡架構(gòu),Linux選用高穩(wěn)定性的Apache服務(wù)器軟件,使用PHP動(dòng)態(tài)頁面設(shè)計(jì),并利用MySQL數(shù)據(jù)庫與PHP跨平臺(tái)連接的優(yōu)勢,能夠?qū)崿F(xiàn)具有普遍適用性的B/S服務(wù)系統(tǒng),滿足信息監(jiān)控對(duì)嵌入式系統(tǒng)的要求。

1 嵌入式LAMP系統(tǒng)的整體設(shè)計(jì)

LAMP 架構(gòu)由4個(gè)組件構(gòu)成,呈分層結(jié)構(gòu)。每一層都提供了整個(gè)軟件的一個(gè)關(guān)鍵部分。

1) Linux:最底層,是整個(gè)架構(gòu)的操作系統(tǒng)平臺(tái)。其穩(wěn)定性很好,內(nèi)核裁減配置方便,通用性好,支持絕大多數(shù)嵌入式硬件平臺(tái);

2) Apache:次底層,是當(dāng)今網(wǎng)站建設(shè)最常用的通用型Web服務(wù)器,具有良好的跨平臺(tái)和安全特性[3];

3) MySQL:代碼精簡的小型關(guān)系數(shù)據(jù)庫[4],與Apache服務(wù)器和PHP的兼容性好,通用性強(qiáng),功能更加完善,其為深度嵌入,編程時(shí)需通過API接口進(jìn)行訪問和操作,而不是直接使用SQL查詢命令;

4) PHP:簡單有效的動(dòng)態(tài)Web頁面編程語言,與CGI和Perl相比,PHP動(dòng)態(tài)頁面的執(zhí)行效率更高,對(duì)MySQL提供的特殊接口能充分發(fā)揮PHP的數(shù)據(jù)處理優(yōu)勢[5]。嵌入式環(huán)境下的LAMP采用PHP與CGI的配合共同完成服務(wù)程序的功能。

嵌入式的Web服務(wù)主要是在嵌入式設(shè)備中搭建Web服務(wù)架構(gòu)軟件組,實(shí)現(xiàn)用戶與嵌入式設(shè)備之間的信息交流。在嵌入式系統(tǒng)中實(shí)現(xiàn)完整的B/S服務(wù)架構(gòu),需要根據(jù)嵌入式系統(tǒng)的特性做出相應(yīng)調(diào)整,嵌入式的LAMP架構(gòu)是以Apache服務(wù)器為服務(wù)核心;MySQL作為后臺(tái)數(shù)據(jù)庫支持;利用PHP實(shí)現(xiàn)Web前端網(wǎng)頁的高級(jí)動(dòng)態(tài)顯示功能;并利用PHP實(shí)現(xiàn)與MySQL數(shù)據(jù)庫的交互;最后使用CGI與嵌入式系統(tǒng)其他數(shù)據(jù)采集或控制程序交互。圖1給出了嵌入式 LAMP在ARM平臺(tái)上的架構(gòu)框圖。

在整個(gè)架構(gòu)中,數(shù)據(jù)采集控制程序利用驅(qū)動(dòng)程序提供的接口采集傳感器中的數(shù)據(jù),將其傳給CGI服務(wù)程序且同時(shí)存入數(shù)據(jù)庫。CGI程序通過與服務(wù)器的標(biāo)準(zhǔn)接口將數(shù)據(jù)傳至服務(wù)器完成信息的實(shí)時(shí)顯示,同時(shí)接收從Web頁面表單傳入的請求信息,并將這些信息經(jīng)過解碼重編后傳給控制程序,再由控制程序?qū)崿F(xiàn)對(duì)設(shè)備的控制。PHP利用數(shù)據(jù)庫API對(duì)MySQL數(shù)據(jù)庫進(jìn)行操作,經(jīng)過分析處理之后,反映到由PHP設(shè)計(jì)的動(dòng)態(tài)頁面上。

2 嵌入式Apache服務(wù)器的搭建

嵌入式Apache服務(wù)器是指在嵌入式系統(tǒng)中移植Apache服務(wù)器。服務(wù)器端軟件的守護(hù)程序始終在HTTP端口守候客戶的連接請求,當(dāng)客戶端向服務(wù)器發(fā)起一個(gè)連接請求后,客戶和服務(wù)器之間建立起連接。守護(hù)程序在接收到客戶端HTTP請求消息后,對(duì)其進(jìn)行解析,并將解析后的請求交給后臺(tái)處理程序。本文的后臺(tái)程序是PHP程序和CGI程序,待后臺(tái)程序處理完后,將客戶端需要的數(shù)據(jù)轉(zhuǎn)交給服務(wù)器,最后反映到Web頁面上。

2.1 Apache服務(wù)器的移植

Apache服務(wù)器在ARM?Linux系統(tǒng)上的移植主要步驟有[6]:

1) 添加Apache服務(wù)器的root權(quán)限

在編譯ARM源碼之前,由于PHP擴(kuò)展了socket功能,需要用到socket的相關(guān)函數(shù),而這類socket需要root權(quán)限,所以要讓Apache運(yùn)行在root權(quán)限下。在Apache源碼包的include/http_config.h文件最開始添加下面語句:

然后在linux文件系統(tǒng)的/etc/目錄中建立兩個(gè)文件passwd,group,即添加一個(gè)用戶和用戶組,最后將Apache的配置文件httpd.conf中的user和group選項(xiàng)都改為root。

2) 移植Apache庫文件

Apache服務(wù)器的運(yùn)行需要移植庫文件,可以在宿主機(jī)上直接編譯Apache源碼包,利用/user/local/目錄下生成的Apache庫文件,并將其移植到ARM平臺(tái)相同目錄下。

3) 配置Apache的PHP支持

配置Apache的PHP支持需要修改配置文件httpd.conf,將對(duì)應(yīng)行改為對(duì)PHP的支持。

2.2 Apache服務(wù)器的配置與優(yōu)化

對(duì)于嵌入式環(huán)境對(duì)服務(wù)器需求來看,一般同時(shí)訪問數(shù)量不會(huì)很大,訪問的請求類型比較固定,數(shù)據(jù)量也不會(huì)很大。如果每個(gè)請求都單獨(dú)開一個(gè)進(jìn)程的話,就會(huì)占用太多的內(nèi)存空間,但如果在單個(gè)進(jìn)程中開太多線程處理請求,又會(huì)降低訪問成功率。

雖然Apache服務(wù)器相比其他輕型服務(wù)器需要消耗更多的系統(tǒng)資源,但是它可以工作在兩種模式下:prefork模式和worker模式。一般來說,Apache設(shè)定在prefork工作模式下,每個(gè)Apache進(jìn)程只能同時(shí)服務(wù)于一個(gè)HTTP請求。這種模式的優(yōu)勢在于每個(gè)進(jìn)程不會(huì)互相干擾,穩(wěn)定性較好,但每個(gè)進(jìn)程需使用約2 000 kB內(nèi)存,100個(gè)并發(fā)連接需用約200 MB的內(nèi)存。當(dāng)Apache服務(wù)器工作在worker模式下時(shí),使用混合多線程多路處理模塊,讓每個(gè)子進(jìn)程有多個(gè)處理線程,而每個(gè)線程服務(wù)于一個(gè)HTTP請求,這樣極大地削減了內(nèi)存開銷,從而滿足高流量的服務(wù)場合。

利用Apache服務(wù)器MPM(Multi?Processing Module)多處理模塊的特點(diǎn),通過對(duì)MPM配置,能夠優(yōu)化多進(jìn)程和多線程的操作,其中重要參數(shù)有[7]:

1) StartServers:設(shè)置httpd啟動(dòng)時(shí)啟動(dòng)的子進(jìn)程數(shù);

2) MinSpareServers:設(shè)置最小空閑進(jìn)程數(shù);

3) MaxSpareServers:設(shè)置最大空閑進(jìn)程數(shù);

4) MaxClients:設(shè)置Apache可同時(shí)處理的請求數(shù);

5) MaxRequestsPerChild:設(shè)置每個(gè)子進(jìn)程可處理的請求數(shù)。

這些參數(shù)對(duì)Apache服務(wù)器性能有很大影響,可以針對(duì)實(shí)際應(yīng)用和板卡資源來設(shè)置Apache服務(wù)器;同時(shí)響應(yīng)請求的個(gè)數(shù)、最多處理的進(jìn)程數(shù)量以及每個(gè)進(jìn)程開啟的線程數(shù)量,充分利用多進(jìn)程與多線程的不同優(yōu)勢。對(duì)于這些參數(shù),可能需要經(jīng)過反復(fù)調(diào)整試驗(yàn),使嵌入式服務(wù)器既能及時(shí)響應(yīng)每個(gè)請求,又不至于因?yàn)樨?fù)荷太大導(dǎo)致響應(yīng)失敗。

3 嵌入式MySQL數(shù)據(jù)庫的搭建

嵌入式MySQL數(shù)據(jù)庫是一種為其宿主軟件或環(huán)境提供數(shù)據(jù)的模塊,通過對(duì)數(shù)據(jù)表合理的設(shè)計(jì)及數(shù)據(jù)存儲(chǔ)方式的科學(xué)選擇,使數(shù)據(jù)庫接到查詢指令后立即檢索信息并提交。

3.1 MySQL的移植

移植嵌入式MySQL數(shù)據(jù)庫的主要步驟有:

1) 添加ncurses支持

MySQL的交叉編譯過程需要ncurses庫的支持[8],所以首先要解壓安裝ncurses?5.9.tar.gz庫,并且需要修改configure文件,使編譯過程支持交叉編譯。即將文件中的if test "$cross_compiling"設(shè)置為yes;并注銷掉后面的錯(cuò)誤打印語句。

2) 定義數(shù)據(jù)堆棧初值

需要在sql_parse.cc這個(gè)文件中添加對(duì)堆棧生長方面初值的定義,ARM平臺(tái)為1,所以添加定義語句:#define STACK_DIRECTION 1。

3) 安裝授權(quán)表

在運(yùn)行數(shù)據(jù)庫之前,需要運(yùn)行mysql_install_db ?u root安裝授權(quán)表,修改MySQLD的.cnf配置文件,并設(shè)置MySQL的安裝路徑basedir和data文件路徑datadir。

3.2 MySQL數(shù)據(jù)庫的配置與優(yōu)化

嵌入式環(huán)境一般對(duì)數(shù)據(jù)的查詢時(shí)間要求并不是很高,且儲(chǔ)存的數(shù)據(jù)量也不會(huì)很大。因此需要配置MySQL數(shù)據(jù)庫,使其盡可能在保證查詢速率的同時(shí)減少內(nèi)存開銷。通過在 my.cnf文件中添加以下代碼來配置慢查詢時(shí)間并啟動(dòng)慢查詢:

log?slow?queries = /data/mysqldata/slowquery.log

然后根據(jù)需要設(shè)置慢查詢時(shí)間(例如long_query_time=4),經(jīng)過一段時(shí)間使用之后找到比較慢的SQL查詢請求,并對(duì)它們進(jìn)行針對(duì)性優(yōu)化。另一方面,MySQL數(shù)據(jù)庫對(duì)相同查詢的反復(fù)執(zhí)行會(huì)進(jìn)行查詢緩處理,即利用內(nèi)存暫存數(shù)據(jù),這種方式不但增加了內(nèi)存開銷,而且也無法存取到實(shí)時(shí)更新的數(shù)據(jù)。因此,可以在 MySQLD中強(qiáng)制加入一些限制來降低緩沖命中率,降低緩存空間,以保證有限的內(nèi)存資源。

4 嵌入式動(dòng)態(tài)交互方式的實(shí)現(xiàn)

目前的嵌入式Web頁面的開發(fā)模式是將界面不變的部分作為一個(gè)靜態(tài)頁面,以HTML格式存儲(chǔ)在ROM中,以方便嵌入式系統(tǒng)直接操作;利用標(biāo)記替代法提供Web動(dòng)態(tài)服務(wù),對(duì)需要?jiǎng)討B(tài)變化的內(nèi)容作特殊標(biāo)記,并將標(biāo)記變量傳遞給CGI服務(wù)程序,由CGI完成與后臺(tái)數(shù)據(jù)的交互。本文中部分靜態(tài)和簡單動(dòng)態(tài)的服務(wù)程序由CGI完成,而高級(jí)復(fù)雜的動(dòng)態(tài)頁面通過PHP設(shè)計(jì)。

本文設(shè)計(jì)的CGI程序利用C語言編寫,能夠更方便地與底層驅(qū)動(dòng)或嵌入式系統(tǒng)的其他應(yīng)用層程序交互,主要CGI服務(wù)程序分為兩個(gè)模塊:

1) 程序交互模塊:CGI通過進(jìn)程間通信的方式與底層控制程序、采集程序、驅(qū)動(dòng)程序交互,實(shí)現(xiàn)對(duì)底層數(shù)據(jù)的獲取和控制命令的傳達(dá)。

2) 服務(wù)器交互模塊:CGI通過服務(wù)器提供的標(biāo)準(zhǔn)接口,接收表單的標(biāo)記變量,并將從底層程序獲取的數(shù)據(jù)反饋給服務(wù)器。

在嵌入式Web頁面中實(shí)現(xiàn)高級(jí)動(dòng)態(tài)功能需要用到PHP動(dòng)態(tài)腳本或動(dòng)態(tài)程序。由于PHP代碼是運(yùn)行在服務(wù)器端的,利用服務(wù)器端的PHP程序?qū)崿F(xiàn)對(duì)數(shù)據(jù)庫的操作,將數(shù)據(jù)庫中的數(shù)據(jù)動(dòng)態(tài)地顯示到網(wǎng)頁上來。

實(shí)現(xiàn)PHP動(dòng)態(tài)網(wǎng)頁[9],需要有PHP支持包,其移植需要先安裝移植zlib庫和libxml2庫。為了降低內(nèi)存開銷,可以對(duì)PHP 配置文件php.ini中的一些參數(shù)進(jìn)行配置:

1) max_execution_time:單一腳本占用CPU的時(shí)間(s);

2) max_input_time:單一腳本等待數(shù)據(jù)輸入的時(shí)間(s);

3) memory_limit:單一腳本運(yùn)行時(shí)可占用的內(nèi)存(B);

4) output_buffering :發(fā)送給客戶端的數(shù)據(jù)所占的緩存(B)。

根據(jù)具體應(yīng)用情況,若用戶需要載入的數(shù)據(jù)不多,可適當(dāng)減少max_input_time,并通過降低memory_limit值以降低單一腳本在運(yùn)行中占用的內(nèi)存。

5 結(jié) 語

嵌入式系統(tǒng)網(wǎng)絡(luò)化是嵌入式領(lǐng)域的市場發(fā)展方向,利用嵌入式LAMP能夠建立穩(wěn)定性更好、數(shù)據(jù)處理能力更強(qiáng)、應(yīng)用功能更加完善的監(jiān)控系統(tǒng)。嵌入式設(shè)備成本低、體積小[10],這樣的監(jiān)控系統(tǒng)一方面滿足了環(huán)境監(jiān)測中對(duì)系統(tǒng)穩(wěn)定性的要求,另一方面解決了照明控制、電源管理、閥門智能儀表中對(duì)數(shù)據(jù)的處理問題。筆者按照本文提出的設(shè)計(jì)方法,在ARM11開發(fā)板(核心芯片為S3C6410)上成功實(shí)現(xiàn)了一個(gè)嵌入式LAMP系統(tǒng)。該系統(tǒng)實(shí)現(xiàn)了服務(wù)器組件與嵌入式程序的交互,完成了數(shù)據(jù)的動(dòng)態(tài)顯示與更新,可以對(duì)環(huán)境溫度和濕度進(jìn)行實(shí)時(shí)監(jiān)控。嵌入式的LAMP雖然功能強(qiáng)大,但系統(tǒng)開銷相對(duì)較大,這可通過PHP與AJAX,Java Applet等技術(shù)融合使客戶端與服務(wù)器的處理資源合理分配,并通過對(duì)LAMP各個(gè)組件的配置與優(yōu)化,減小這種架構(gòu)的運(yùn)行開銷。隨著系統(tǒng)硬件性能的不斷提升,這種架構(gòu)方案將會(huì)在圖書館嵌入式服務(wù)系統(tǒng)以及更多的嵌入式系統(tǒng)中得以應(yīng)用。

參考文獻(xiàn)

[1] 劉風(fēng)華,楊麗君.基于ARM的嵌入式煤礦視頻監(jiān)控系統(tǒng)設(shè)計(jì)[J].現(xiàn)代電子技術(shù),2014,37(16):8?10.

LIU Fenghua, YANG Lijun. Design of ARM?based embedded video monitoring system in coal mine [J]. Modern electronics technique, 2014, 37(16): 8?10.

[2] 雷文禮,任新成,高瑛.基于Linux平臺(tái)的通信軟件的設(shè)計(jì)與實(shí)現(xiàn)[J].現(xiàn)代電子技術(shù),2015,38(17):30?33.

LEI Wenli, REN Xincheng, GAO Ying. Design and implementation of communication software based on Linux platform [J]. Modern electronics technique, 2015, 38(17): 30?33.

[3] 陸志烽.Linux下Apache服務(wù)器的搭建[J].數(shù)字技術(shù)與應(yīng)用,2016(5):100.

LU Zhifeng. Construction of Apache server under Linux [J]. Digital technology and application, 2016(5): 100.

[4] NIXON R. Learning PHP, MySQL, JavaScript, CSS & HTML5 [M]. 3rd ed. Sebastopol: O′Reilly Media, 2014.

猜你喜歡
WEB服務(wù)S架構(gòu)網(wǎng)絡(luò)應(yīng)用
交通領(lǐng)域中面向D2D的5G通信網(wǎng)絡(luò)應(yīng)用探析
基于數(shù)字電子技術(shù)的通信網(wǎng)絡(luò)應(yīng)用研究
B/S架構(gòu)下的學(xué)生信息管理系統(tǒng)的設(shè)計(jì)
基于Web服務(wù)的SPSS與.NET系統(tǒng)集成開發(fā)
基于線性回歸的航班延誤預(yù)測研究與系統(tǒng)開發(fā)
基于ASP技術(shù)下的大學(xué)生跳蚤書街平臺(tái)的設(shè)計(jì)與實(shí)施
大氣環(huán)境質(zhì)量評(píng)價(jià)工作中基于MATLAB的BP神經(jīng)網(wǎng)絡(luò)應(yīng)用探究
基于B/S架構(gòu)的高校實(shí)驗(yàn)管理平臺(tái)的設(shè)計(jì)與實(shí)現(xiàn)
教學(xué)工作量管理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
一種基于SOA的web異構(gòu)數(shù)據(jù)集成方法研究