设为首页 收藏本站
查看: 3590|回复: 0

LAMP原理架构解析

[复制链接]

尚未签到

发表于 2017-10-17 09:16:52 | 显示全部楼层 |阅读模式
目录:

1.LAMP架构解析

2.LAMP中PHP 种工作模式

2.1 PHP模块化工作模式

2.2 PHP模块化+XCache工作模式

2.3 PHP的FPM工作模式

3.PHP的编译

3.1 PHP的模块编译

3.2 PHP的FPM编译

一、LAMP架构解析

   现如今打开浏览器,搜索LAMP关键词,出现大量的关于LAMP的介绍,包括LAMP的一键脚本、LAMP的yum安装、LAMP的编译安装,但是对于一个非开发或非专业人员有可能根据网络参考资源实现LAMP的搭建并成功运行各种服务,也有部分人员完全照搬某些博客知识进行搭建,最后以失败告终,因此抱怨互联网资源不够成熟,其实根本原因并非如此,主要原因如下:

    初学者对LAMP架构原理不熟悉

    初学者实验时所用系统和软件版本和某些博客资源并不相同

因此导致大量初学者以失败告终,其实只有了解并掌握LAMP的工作原理才能轻松的搭建成功,其次参数的配置都是次要因素,因为互联网上拥有大量的参考资料供查询,下面将逐一介绍

   L:很显然L代表Linux系统,但此L需注意系统的版本号,如Centos6.9或Centos7.3;

   A:表示apache,在传统行业中,多数采用Apache服务器,因此也很有必要了解学习Apache;

   M:表示数据库,多数采用mysql或mariadb,作为专业的数据库工程师需经多年的历练;

   P:表示PHP、python、perl等等编程语言。

   在这里注意讲解Linux+apache+mariadb+PHP组合的架构,架构图如下:

wKiom1nkByKQ1lIpAAHbqtbmux8712.jpg

图1-1 LAMP架构图

    根据图1-1中访问数据流可知,处理一次动态页面请求,服务器主要经历:Apache处理请求——通过CGI接口访问PHP的的应用程序——PHP应用程序调用PHP解释器执行PHP代码——PHP程序访问调用数据库——最后给客户做反馈。故在LAMP的环境机构中,apache、mariadb和php的主要功能分别如下。

    apache主要实现如下功能:

    第一:处理http的请求、构建响应报文等自身服务;

    第二:配置让Apache支持PHP程序的响应(通过PHP模块或FPM);

    第三:配置Apache具体处理php程序的方法,如通过反向代理将php程序交给fcgi处理。

    mariadb主要实现如下功能:

    第一:提供PHP程序对数据的存储;

    第二:提供PHP程序对数据的读取(通常情况下从性能的角度考虑,尽量实现数据库的读写分离)。

    php主要实现如下功能:

    第一:提供apache的访问接口,即CGI或Fast CGI(FPM);

    第二:提供PHP程序的解释器;

    第三:提供mairadb数据库的连接函数的基本环境。

    由此可知,要实现LAMP在配置每一个服务时,安装功能需求进行配置,即可实现LAMP的架构,当然apache、mariadb和php服务都可配置为独立服务,安装在不同电脑之上。

二.LAMP中PHP 种工作模式

    通过LAMP架构及功能介绍可知,PHP在的作用是承上启下,在搭建LAMP的环境时,仅需深刻理解PHP并会成功编译PHP的不同运行模式即可实现不同基于LAMP的应用服务成功搭建。

2.1 PHP模块化工作模式

    PHP模块化工作方式,可以理解为将PHP封装为HTTPD中的一个函数,既然是HTTPD的一个函数,则PHP必须封装HTTPD中,因此PHP必须与HTTPD配置在同一台服务器中,而且不会作物独立的程序或进程运行,工作架构图如下:

wKiom1nkBsKQgT4fAAKxHXLMA_U550.jpg

图2-1 PHP模块化架构图

    由上图可知在安装PHP的rpm包后,生成httpd的模块目录下生成libphp5.so的模块,因此httpd在启动时可以自动加载此模块,从而提供CGI接口和PHP解释的功能,在安装php-mysql后,可以看出生成3中连接数据库的方法,但是通常采用mysql.ini和mysqli-ini的方法连接数据库,具体连接语法如下:

    数据库连接mysql.ini函数及测试脚本如下表:

$conn = mysql_connect('H-host','DBuser','DBpass'); #通常用在centos6

if ($conn)

     echo "DB connetct normal!";

else

     echo "DB connect Failure!";

mysql_close();

    数据库连接mysqli.ini函数及测试脚本如下:

$mysqli=new  mysqli("localhost","root","centos"); #通常兼容性较好可以在centos6

if(mysqli_connect_errno()){                         或centos7中;

     echo "数据库连接失败!";

     $mysqli=null;

     exit;

}

echo "数据库连接正常!";

$mysqli->close();

因此只需深刻理解PHP的三大功能,即可理解LAMP的工作原理及过程。上图实验环境为Centos6.9

2.1 PHP模块化+XCache工作模式

    PHP模块化工作方式虽能正常运行,但是从性能角度考虑,PHP官方早前研究出内存间的缓存功能,将访问页面或请求资源多的页面在内存中做一份缓存,确保无需每次通过内存调动磁盘资源进行计算,另外XCache工作原理仅仅是在PHP模块化工作的模式基础之上安装了一个缓存功能的包,架构类似PHP模块化工作结构,具体如下所示:

wKiom1nkEXzA4oI6AALDE7duIUA832.jpg

图2-2 PHP+XCache架构图

    由上图可知,XCache功能仅需安装一个包即可实现缓存,经过实测在1颗CPU和1G内存的虚拟机主机上搭建wordpress博客,通过yum安装相关LAMP环境包,具体就不再此介绍,可参考架构图进行搭建或通过网络资源进行查看。

    在无XCache环境情况利用ab命令进行性能测试如下:

[ root@centos6 ~ ]#ab -c 10 -n 100 http://172.18.27.13/blog/

Total transferred:       928200 bytes

HTML transferred:        906100 bytes

Requests per second:     16.54 [#/sec] (mean)

Time per request:        604.766 [ms] (mean)

Time per request:        60.477 [ms] (mean, across all concurrent requests)

       在有XCache环境情况利用ab命令进行性能测试如下:

[ root@centos6 ~ ]#ab -c 10 -n 100 http://172.18.27.13/blog/

Total transferred:       928200 bytes

HTML transferred:        906100 bytes

Requests per second:     40.93 [#/sec] (mean)

Time per request:        244.307 [ms] (mean)

Time per request:        24.431 [ms] (mean, across all concurrent requests)

    通过性能测试发现在有XCache缓存的情况性,基本上能扩展到1.5倍左右,因此XCache是相当提升LAMP性能的功能模块,建议大家多多使用此功能模块。

    注意:在centos6.9中默认通过rpm 安装的lamp中,无法支持httpd的work.c模式。

    原因:在安装PHP的包时,只安装/usr/lib64/httpd/modules/libphp5.so模块,而

    在/etc/httpd/conf.d/php.conf中,此模块仅支持perfork.模式。

2.3 PHP的FPM工作模式

    在大型集群环境中,通过模块化管理从性能的角度比较不如独立的进程进行处理效率高,因此一旦访问量较大时,建议PHP的CGI接口和PHP解释器独立运行,独立作为一个单独的进程进行处理动态程序,若作为独立处理动态程序时,根据PHP的三大功能(提供CGI接口、PHP解释器和连接DB的基本环境)进行协调配置承上启下的功能配置,具体结构如下图:

wKiom1nkHn3wPZxbAAK5M6MgQEk293.jpg

图2-3 PHP+FPM架构图

    由上图可知当编译PHP的FPM后,PHP作为独立的经常运行,此时根据PHP的三大功能,第一要素:配置httpd,让httpd支持处理PHP程序并知道处理PHP请求时,交由谁来处理,建议在/etc/httpd/conf.d/目录下新建文件,配置支持处理PHP请求,第二要素:提供CGI接口和PHP解释器,此步是由编译时开启此功能,第三要素:配置支持数据库连接,此步也是有编译时开启此功能,因此总结PHP在独立运行的配置方法为:编译初期开启PHP的CGI接口、PHP的解释功能和数据库连接功能模块,在编译完成之后再次调整HTTPD和PHP的连接发放,具体可参考如下配置(在conf.d目录下新建配置文件):

LoadModule proxy_module modules/mod_proxy.so                 #确保开启
LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so       #确保开启

addtype application/x-httpd-php .php     

addtype application/x-httpd-php-source .php

DirectoryIndex   index.php

ProxyRequests  off

ProxyPassMatch ^/(.*\.php)$   fcgi://127.0.0.1:9000/var/www/html/$1 #PHP在本机

ProxyPassMatch ^/(.*\.php)$   fcgi://192.168.1.1:9000/var/www/html/$1 #PHP在其他主机

   通过PHP编译独立运行时,通过LAMP实现wordpress服务为示范,配置注意事项如下:

  (1)真正的程序是位置为:fcgi://127.0.0.1:9000/var/www/html/$1如果程序所处位置为:/var/www/html/blog/(php程序)则用户必须输入URL=http://172.18.27.14/blog/因为按照匹配模式(blog/.*.php)----提交给----fcgi://127.0.0.1:9000/var/www/html/blog/.*.php处理,刚好和提供动态资源php和静态资源图片的PHP资源位置相同,正常对外提供服务。

  (2)错误设置提醒,ProxyPassMatch ^/(.*\.php)$  fcgi://127.0.0.1:9000/var/www/html/blog/$1用户输入URL=http://172.18.27.14按照匹配模式:(.*.php)动态资源跳转至/var/www/html/blog/*取请求资源,而非php的请求在172.18.27.14的/var/www/html/目录中,然而WordPress在根目录下并无资源,因此会出现只解析出动态资源而无静态资源

  (3)总上所述配置此时,参考点在于想让用户输入什么链接时,则在服务器端设置什么样的目录,同时如下示范配置是通用配置,可以放在任何PHP程序:

   ProxyPassMatch^/(.*\.php)$ fcgi://127.0.0.1:9000/var/www/html/$1

3.PHP的编译

3.1 PHP的模块编译

    将PHP编译为httpd的模块时,需要注意要根据PHP的功能进行开启响应的功能,具体编译过程可参考如下示例:

centos7.3]#yum install libxml2-devel bzip2-devel libmcrypt-devel

centos7.3]#tar xvf php-7.1.10.tar.xz

centos7.3]#cd php-7.1.10/

centos6.9]./configure \

--prefix=/app/php \                       #配置安装目录

--enable-mysqlnd \                        #开启连接数据库功能

--with-mysqli=mysqlnd \                   #开启连接数据库的支持方式msyqli

--with-openssl \                          #开启支持认证

--with-pdo-mysql=mysqlnd \                #开启连接数据库的支持方式pdo

--enable-mbstring \

--with-freetype-dir \

--with-jpeg-dir \

--with-png-dir \

--with-zlib \

--with-libxml-dir=/usr \

--enable-xml \

--enable-sockets \                       

--with-apxs2=/app/httpd24/bin/apxs \      #安装为模块方式运行

--with-mcrypt \

--with-config-file-path=/etc \

--with-config-file-scan-dir=/etc/php.d \

--enable-maintainer-zts \

--disable-fileinfo

centos7.3]#make -j 4 &&  make install

centos7.3]#cp php.ini-production /etc/php.ini

3.2 PHP的FPM编译

   将PHP编译为FPM的独立运行进程时,需要注意要根据PHP的功能进行开启响应的功能,具体编译过程可参考如下示例:

centos6.9]yum install libxml2-devel bzip2-devel libmcrypt-devel

centos6.9]tar xvf php-5.6.31.tar.xz

centos6.9]cd php-5.6.31

centos6.9]./configure \

--prefix=/app/php5 \

--with-mysql=/usr/local/mysql \

--with-openssl \

--with-mysqli=/usr/local/mysql/bin/mysql_config \

--enable-mbstring \

--with-freetype-dir  \

--with-jpeg-dir \

--with-png-dir \

--with-zlib \

--with-libxml-dir=/usr \

--enable-xml \

--enable-sockets \

--enable-fpm \                         #将PHP编译为FPM独立进程格式

--with-mcrypt \

--with-config-file-path=/etc/php5 \

--with-config-file-scan-dir=/etc/php5.d \

--with-bz2

centos6.9]make -j 4 && make install

centos6.9]vi /etc/profile.d/lamp.sh    #调整系统环境变量

PATH=/app/php5/bin:/app/httpd24/bin/:/usr/local/mysql/bin/:$PATH

centos6.9]. /etc/profile.d/lamp.sh

centos6.9]mkdir /etc/php5/

centos6.9]cp php.ini-production /etc/php5/php.ini          #创建php的基本参数配置文件

centos6.9]cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm   #创建启动脚本

centos6.9]chmod +x /etc/init.d/php-fpm                    

centos6.9]chkconfig --add php-fpm

centos6.9]chkconfig --list   php-fpm

centos6.9]cd /app/php5/etc                                 #创建fpm的基本参数配置文件

centos6.9]cp php-fpm.conf.default php-fpm.conf

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-405513-1-1.html 上篇帖子: 安装LAMP部署Discuz论坛脚本 下篇帖子: lamp(apache2.2mysql5.0php5.3)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表