LAMP架构在嵌入式平台上的移植与搭建

2018-10-24 04:39李小娜张释如张雨珊赵榕
现代电子技术 2018年20期
关键词:WEB服务S架构网络应用

李小娜 张释如 张雨珊 赵榕

摘 要: 基于嵌入式的Web服务应用体系提出将通用服务器架构LAMP应用于嵌入式系统的设计思想。分析LAMP架构在嵌入式领域的应用优势,设计嵌入式平台上LAMP架构的具体实现方案,并给出LAMP中各个组件在移植、配置和优化中的具体方法。该架构为嵌入式系统的高级网络应用提供了一种通用解决方案,其具体实现方法对嵌入式网络服务及其监控系统的应用具有借鉴和参考价值。

关键词: LAMP; MySQL; B/S架构; 嵌入式系统; Web服务; 网络应用

中图分类号: TN915?34; TP368.5 文献标识码: A 文章编号: 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 引 言

隨着嵌入式系统对网络功能需求的不断提升,越来越多的嵌入式平台移植了B/S架构的Web服务来提供网络控制功能,在嵌入式网络服务及其监控系统等方面有广泛应用[1]。

目前,嵌入式平台的Web服务做法基本是:以thttpd,boa,lighttpd等轻型服务器为主,配合移植SQLite,eXtremeDB等小型嵌入式数据库,最后利用后台CGI(Common Gateway Interface)服务程序,将采集的数据反映到Web页面或存入数据库。这些精简架构虽然小巧灵活、结构简单,但是其功能有限,也不具备普遍适用性,存在许多应用方面的问题。第一,在水质监测、农田信息检测、粮仓监控等环境监控系统中,需要长期监测采集的信息,而大多数轻型嵌入式Web服务器稳定性不够;第二,在智能家居、机房监控等场合,要求数据或系统能以动态模拟的方式呈现给用户,仅靠CGI程序很难实现;第三,在工业控制领域中的预警处理、故障分析、安全监测等需要对数据库表进行长期跟踪与智能分析,而利用CGI操作大多数精简型嵌入式数据库不能实现完善的智能监测。

LAMP(Linux?Apache?MySQL?PHP)是指由 Linux 操作系统、Apache Web服务器、MySQL数据库,以及超文本预处理器(Hypertext Pre?Proeessor,PHP)脚本语言组成的一种B/S服务架构,是当今能与 J2EE 和.Net 齐名的三大 Web 典型架构之一。由于J2EE中Oracle成本过高,而.Net移植性不好,所以LAMP成为目前唯一一个经过配置和优化能够移植到嵌入式系统中的通用架构。LAMP架构基于Linux系统,Linux 作为一种 UNIX 操作系统,它是真正的多用户、多任务、多平台操作系统,具有稳定健壮、低成本、高性能、互操作性和开放源代码等特点[2]。不同于传统嵌入式精简架构,Linux选用高稳定性的Apache服务器软件,使用PHP动态页面设计,并利用MySQL数据库与PHP跨平台连接的优势,能够实现具有普遍适用性的B/S服务系统,满足信息监控对嵌入式系统的要求。

1 嵌入式LAMP系统的整体设计

LAMP 架构由4个组件构成,呈分层结构。每一层都提供了整个软件的一个关键部分。

1) Linux:最底层,是整个架构的操作系统平台。其稳定性很好,内核裁减配置方便,通用性好,支持绝大多数嵌入式硬件平台;

2) Apache:次底层,是当今网站建设最常用的通用型Web服务器,具有良好的跨平台和安全特性[3];

3) MySQL:代码精简的小型关系数据库[4],与Apache服务器和PHP的兼容性好,通用性强,功能更加完善,其为深度嵌入,编程时需通过API接口进行访问和操作,而不是直接使用SQL查询命令;

4) PHP:简单有效的动态Web页面编程语言,与CGI和Perl相比,PHP动态页面的执行效率更高,对MySQL提供的特殊接口能充分发挥PHP的数据处理优势[5]。嵌入式环境下的LAMP采用PHP与CGI的配合共同完成服务程序的功能。

嵌入式的Web服务主要是在嵌入式设备中搭建Web服务架构软件组,实现用户与嵌入式设备之间的信息交流。在嵌入式系统中实现完整的B/S服务架构,需要根据嵌入式系统的特性做出相应调整,嵌入式的LAMP架构是以Apache服务器为服务核心;MySQL作为后台数据库支持;利用PHP实现Web前端网页的高级动态显示功能;并利用PHP实现与MySQL数据库的交互;最后使用CGI与嵌入式系统其他数据采集或控制程序交互。图1给出了嵌入式 LAMP在ARM平台上的架构框图。

在整个架构中,数据采集控制程序利用驱动程序提供的接口采集传感器中的数据,将其传给CGI服务程序且同时存入数据库。CGI程序通过与服务器的标准接口将数据传至服务器完成信息的实时显示,同时接收从Web页面表单传入的请求信息,并将这些信息经过解码重编后传给控制程序,再由控制程序实现对设备的控制。PHP利用数据库API对MySQL数据库进行操作,经过分析处理之后,反映到由PHP设计的动态页面上。

2 嵌入式Apache服务器的搭建

嵌入式Apache服务器是指在嵌入式系统中移植Apache服务器。服务器端软件的守护程序始终在HTTP端口守候客户的连接请求,当客户端向服务器发起一个连接请求后,客户和服务器之间建立起连接。守护程序在接收到客户端HTTP请求消息后,对其进行解析,并将解析后的请求交给后台处理程序。本文的后台程序是PHP程序和CGI程序,待后台程序处理完后,将客户端需要的数据转交给服务器,最后反映到Web页面上。

2.1 Apache服务器的移植

Apache服务器在ARM?Linux系统上的移植主要步骤有[6]:

1) 添加Apache服务器的root权限

在编译ARM源码之前,由于PHP扩展了socket功能,需要用到socket的相关函数,而这类socket需要root权限,所以要让Apache运行在root权限下。在Apache源码包的include/http_config.h文件最开始添加下面语句:

然后在linux文件系统的/etc/目录中建立两个文件passwd,group,即添加一个用户和用户组,最后将Apache的配置文件httpd.conf中的user和group选项都改为root。

2) 移植Apache库文件

Apache服务器的运行需要移植库文件,可以在宿主机上直接编译Apache源码包,利用/user/local/目录下生成的Apache库文件,并将其移植到ARM平台相同目录下。

3) 配置Apache的PHP支持

配置Apache的PHP支持需要修改配置文件httpd.conf,将对应行改为对PHP的支持。

2.2 Apache服务器的配置与优化

对于嵌入式环境对服务器需求来看,一般同时访问数量不会很大,访问的请求类型比较固定,数据量也不会很大。如果每个请求都单独开一个进程的话,就会占用太多的内存空间,但如果在单个进程中开太多线程处理请求,又会降低访问成功率。

虽然Apache服务器相比其他轻型服务器需要消耗更多的系统资源,但是它可以工作在两种模式下:prefork模式和worker模式。一般来说,Apache设定在prefork工作模式下,每个Apache进程只能同时服务于一个HTTP请求。这种模式的优势在于每个进程不会互相干扰,稳定性较好,但每个进程需使用约2 000 kB内存,100个并发连接需用约200 MB的内存。当Apache服务器工作在worker模式下时,使用混合多线程多路处理模块,让每个子进程有多个处理线程,而每个线程服务于一个HTTP请求,这样极大地削减了内存开销,从而满足高流量的服务场合。

利用Apache服务器MPM(Multi?Processing Module)多处理模块的特点,通过对MPM配置,能够优化多进程和多线程的操作,其中重要参数有[7]:

1) StartServers:设置httpd启动时启动的子进程数;

2) MinSpareServers:设置最小空闲进程数;

3) MaxSpareServers:设置最大空闲进程数;

4) MaxClients:设置Apache可同时处理的请求数;

5) MaxRequestsPerChild:设置每个子进程可处理的请求数。

这些参数对Apache服务器性能有很大影响,可以针对实际应用和板卡资源来设置Apache服务器;同時响应请求的个数、最多处理的进程数量以及每个进程开启的线程数量,充分利用多进程与多线程的不同优势。对于这些参数,可能需要经过反复调整试验,使嵌入式服务器既能及时响应每个请求,又不至于因为负荷太大导致响应失败。

3 嵌入式MySQL数据库的搭建

嵌入式MySQL数据库是一种为其宿主软件或环境提供数据的模块,通过对数据表合理的设计及数据存储方式的科学选择,使数据库接到查询指令后立即检索信息并提交。

3.1 MySQL的移植

移植嵌入式MySQL数据库的主要步骤有:

1) 添加ncurses支持

MySQL的交叉编译过程需要ncurses库的支持[8],所以首先要解压安装ncurses?5.9.tar.gz库,并且需要修改configure文件,使编译过程支持交叉编译。即将文件中的if test "$cross_compiling"设置为yes;并注销掉后面的错误打印语句。

2) 定义数据堆栈初值

需要在sql_parse.cc这个文件中添加对堆栈生长方面初值的定义,ARM平台为1,所以添加定义语句:#define STACK_DIRECTION 1。

3) 安装授权表

在运行数据库之前,需要运行mysql_install_db ?u root安装授权表,修改MySQLD的.cnf配置文件,并设置MySQL的安装路径basedir和data文件路径datadir。

3.2 MySQL数据库的配置与优化

嵌入式环境一般对数据的查询时间要求并不是很高,且储存的数据量也不会很大。因此需要配置MySQL数据库,使其尽可能在保证查询速率的同时减少内存开销。通过在 my.cnf文件中添加以下代码来配置慢查询时间并启动慢查询:

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

然后根据需要设置慢查询时间(例如long_query_time=4),经过一段时间使用之后找到比较慢的SQL查询请求,并对它们进行针对性优化。另一方面,MySQL数据库对相同查询的反复执行会进行查询缓处理,即利用内存暂存数据,这种方式不但增加了内存开销,而且也无法存取到实时更新的数据。因此,可以在 MySQLD中强制加入一些限制来降低缓冲命中率,降低缓存空间,以保证有限的内存资源。

4 嵌入式动态交互方式的实现

目前的嵌入式Web页面的开发模式是将界面不变的部分作为一个静态页面,以HTML格式存储在ROM中,以方便嵌入式系统直接操作;利用标记替代法提供Web动态服务,对需要动态变化的内容作特殊标记,并将标记变量传递给CGI服务程序,由CGI完成与后台数据的交互。本文中部分静态和简单动态的服务程序由CGI完成,而高级复杂的动态页面通过PHP设计。

本文设计的CGI程序利用C语言编写,能够更方便地与底层驱动或嵌入式系统的其他应用层程序交互,主要CGI服务程序分为两个模块:

1) 程序交互模块:CGI通过进程间通信的方式与底层控制程序、采集程序、驱动程序交互,实现对底层数据的获取和控制命令的传达。

2) 服务器交互模块:CGI通过服务器提供的标准接口,接收表单的标记变量,并将从底层程序获取的数据反馈给服务器。

在嵌入式Web页面中实现高级动态功能需要用到PHP动态脚本或动态程序。由于PHP代码是运行在服务器端的,利用服务器端的PHP程序实现对数据库的操作,将数据库中的数据动态地显示到网页上来。

实现PHP动态网页[9],需要有PHP支持包,其移植需要先安装移植zlib库和libxml2库。为了降低内存开销,可以对PHP 配置文件php.ini中的一些参数进行配置:

1) max_execution_time:单一脚本占用CPU的时间(s);

2) max_input_time:单一脚本等待数据输入的时间(s);

3) memory_limit:单一脚本运行时可占用的内存(B);

4) output_buffering :发送给客户端的数据所占的缓存(B)。

根据具体应用情况,若用户需要载入的数据不多,可适当减少max_input_time,并通过降低memory_limit值以降低单一脚本在运行中占用的内存。

5 结 语

嵌入式系统网络化是嵌入式领域的市场发展方向,利用嵌入式LAMP能够建立稳定性更好、数据处理能力更强、应用功能更加完善的监控系统。嵌入式设备成本低、体积小[10],这样的监控系统一方面满足了环境监测中对系统稳定性的要求,另一方面解决了照明控制、电源管理、阀门智能仪表中对数据的处理问题。笔者按照本文提出的设计方法,在ARM11开发板(核心芯片为S3C6410)上成功实现了一个嵌入式LAMP系統。该系统实现了服务器组件与嵌入式程序的交互,完成了数据的动态显示与更新,可以对环境温度和湿度进行实时监控。嵌入式的LAMP虽然功能强大,但系统开销相对较大,这可通过PHP与AJAX,Java Applet等技术融合使客户端与服务器的处理资源合理分配,并通过对LAMP各个组件的配置与优化,减小这种架构的运行开销。随着系统硬件性能的不断提升,这种架构方案将会在图书馆嵌入式服务系统以及更多的嵌入式系统中得以应用。

参考文献

[1] 刘风华,杨丽君.基于ARM的嵌入式煤矿视频监控系统设计[J].现代电子技术,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平台的通信软件的设计与实现[J].现代电子技术,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服务器的搭建[J].数字技术与应用,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服务S架构网络应用
交通领域中面向D2D的5G通信网络应用探析
基于数字电子技术的通信网络应用研究
B/S架构下的学生信息管理系统的设计
基于Web服务的SPSS与.NET系统集成开发
基于线性回归的航班延误预测研究与系统开发
基于ASP技术下的大学生跳蚤书街平台的设计与实施
大气环境质量评价工作中基于MATLAB的BP神经网络应用探究
基于B/S架构的高校实验管理平台的设计与实现
教学工作量管理系统的设计与实现
一种基于SOA的web异构数据集成方法研究