电商平台 lnmp 和 lamp 架构介绍

LNMP和LAMP都是常见的服务器架构,分别基于Nginx和Apache。LNMP以其轻量级、高性能和资源占用少的特点常用于处理高并发场景,而LAMP则以Apache的模块化和易配置性见长。Nginx通过fastcgi与PHP-FPM交互,处理动态请求,而Apache则直接集成PHP模块。两者的区别在于Nginx的epoll I/O模型更适合高并发,而Apache的select模型在效率上较低。
摘要由CSDN通过智能技术生成

1. Lnmp 介绍

  1. Lnmp的含义
    LNMP 是指一组通常一起使用来运行动态网站或者服务器的自由软件名称首字母缩写。其中L指Linux,N 指Nginx,M一般指MySQL,也可以指 MariaDB,P一般指PHP,也可以指Perl或Python。
    LNMP 代表的就是:Linux系统下Nginx+MySQL+PHP这种网站服务器架构;
    Nginx 是一个高性能的 HTTP 和反向代理服务器,也是一个 IMAP/POP3/SMTP代理服务器;
    Mysql 是一个小型关系型数据库管理器;
    PHP 是一种在服务器端执行的嵌入HTML文档的脚本语言;
    这四种软件均为免费开源软件,组合到一起,成为一个免费、高效、扩展性强的网站服务系统。

  2. lnmp 工作原理

  • 客户端通过http协议发起请求,该请求最先会到达lnmp架构中的nginx;
  • nginx会根据用户的请求进行判断,该判断是由nginx中的location模块完成的;
    若nginx判断请求是静态页面,则由nginx直接处理并返回客户端;
    如果请求是动态页面,nginx会将该请求交给fastcgi协议进行下发;
  • fastcgi会将请求交给php-fpm管理进程,该进程接收到后会调用具体的工作进程wrapper;
  • wrapper线程会调用php进行解析,如果是单纯的解析php代码,那么结果会直接返回给客户端;
    如果有数据库操作,那么php会连接到数据库,然后发起操作;
    最后数据原路返回,由mysql–>php–>php-fpm–>fastcgi–>nginx–>http–>client

浏览器发送http request请求到服务器(Nginx),服务器响应并处理web请求,将一些静态资源(CSS,图片,视频等)保存服务器上,然后将php脚本通过接口传输协议(网关协议)PHP-FCGI(fast-cgi)传输给PHP-FPM(进程管理程序),PHP-FPM不做处理,然后PHP-FPM调用PHP解析器进程,PHP解析器解析php脚本信息。PHP解析器进程可以启动多个,进行并发执行。然后将解析后的脚本返回到PHP-FPM,PHP-FPM再通过fast-cgi的形式将脚本信息传送给Nginx.服务器再通过Http response的形式传送给浏览器。浏览器再进行解析与渲染然后进行呈现。

注意:PHP-FPM(FastCGI Process Manager)是一个FastCGI管理器,fast-cgi是php的一个模块。

  1. lnmp 特点

    Nginx性能稳定、功能丰富、运维简单、处理静态文件速度快且消耗系统资源极少。

  • 优点
    占用VPS(虚拟专用服务器)资源较少,Nginx配置起来也比较简单,利用fast-cgi的方式动态解析PHP脚本。
    作为 Web 服务器:相比 Apache,Nginx 使用更少的资源,支持更多的并发连接,体现更高的效率;
    作为负载均衡服务器:Nginx 既可以在内部直接支持Rails和PHP,也可以支持作为 HTTP代理服务器对外进行服务;
    Nginx 安装非常的简单,配置文件非常简洁,Nginx支持平滑加载新的配置,还能够在不间断服务的情况下进行软件版本的升级。

  • 缺点
    php-fpm组件的负载能力有限,在访问量巨大的时候,php-fpm进程容易僵死,容易发生502 错误

2. Lamp 介绍

  1. lamp 含义
    LAMP是指一组通常一起使用来运行动态网站或者服务器的自由软件名称首字母缩写。
    lamp是指Linux+Apache+MySQL+PhP架构

  2. lamp简介

    lamp架构的工作流程是由浏览器发送http请求,Apache服务器接受请求,而PHP是Apache的一个模块,具有相同的生命周期,两者通过共享内存的方式通信,因此php作为Apache的组件模块也会一起启动。Apache会将一些静态资源保存,然后调用php模块进行php的脚本的处理。php处理完后,Apache会将处理完的数据通过http response的方式发送回客户端浏览器解析,然后呈现整个网页。

3. lamp与lnmp的区别

  • 在LNMP中,Nginx本身对脚本不做任何的处理,只是进行转发,把请求发给fast-cgi管理进程处理fast-cgi管理进程选择cgi子进程处理结果并返回,二者是相互独立的;

  • 在LAMP中,PHP是Apache的一个模块,具有相同的生命周期,两者通过共享内存的方式通信,php作为Apache的组件模块会一起启动
    LAMP方式会多占用资源较多,且配置虚拟主机要同时修改Nginx和Apache的配置文件,操作较为复杂;

  • LNM使用资源更少,支持更多并发连接,效率更高。作为负载均衡服务器,nginx即可对内进行支持,也可对外进行服务,安装简单,配置简洁

  • Apache本身处理PHP的能力比php-fpm强,适合访问量较大的站点使用
    注意:Apache编译的PHP不能用nginx用户。

为什么在大多数情况下 nginx 都比 apache 响应要迅速?

主要是因为 nginx高并发的功能优越于 apache;

  • 因为他们所采用的 I/O复用方式不同,Nginx使用了epoll 的I/O模型,而Apache使用的是传统的select模型;
  • select 方式仅仅知道有I/O事件发生了,却不知道是哪几个流,所以只能无差别轮询所有流,找出能读出数据,或者写入数据的流,然后进行操作;
  • 而 epoll 会主动通知哪个流发生了怎样的I/O事件,所以 epoll 实际上是事件驱动的,对这些流的操作就比较高效;
  • 目前 Linux下能够承受高并发访问的Squid、Memcached 缓存都采用的是epoll网络I/O模型,该模型可以处理大量的连接的读写,Apache所采用的select网络I/O模型较为低效。

cgi fastcgi php-fpm

一个完整的动态PHP Web访问流程: 当Web Server收到 index.php 这个请求后,会启动对应的 CGI 程序,这里就是PHP的解析器。接下来PHP解析器会解析php.ini文件,初始化执行环境,然后处理请求,再以规定CGI规定的格式返回处理后的结果,退出进程,Web server再把结果返回给浏览器。

  • 基础概念

    CGI:是 Web Server 与 Web Application 之间数据交换的一种协议。
    FastCGI:同 CGI,是一种通信协议,但比 CGI 在效率上做了一些优化。同样,SCGI 协议与 FastCGI 类似。
    PHP-CGI:是 PHP (Web Application)对 Web Server 提供的 CGI 协议的接口程序。
    PHP-FPM:是 PHP(Web Application)对 Web Server 提供的 FastCGI 协议的接口程序,额外还提供了相对智能一些任务管理。CGI工作原理 web服务器收到用户请求,就会把请求提交给cgi程序(如php-cgi),cgi程序根据请求提交的参数作应处理(解析php),然后输出标准的html语句,返回给web服服务器,WEB服务器再返回给客户端,这就是普通cgi的工作原理CGI缺点: 每一次web请求都会有启动和退出过程

  • FAST-CGI工作原理

    Web Server启动时载入FastCGI进程管理器(Apache Module或IIS ISAPI等)
    FastCGI进程管理器自身初始化,启动多个CGI解释器进程(可建多个php-cgi),并等待来自Web Server的连接。
    当客户端请求到达Web Server时,FastCGI进程管理器选择并连接到一个CGI解释器。Web server将CGI环境变量和标准输入发送到FastCGI子进程php-cgi。
    FastCGI子进程完成处理后,将标准输出和错误信息从同一连接返回Web Server。当FastCGI子进程关闭连接时,请求便告处理完成。FastCGI子进程接着等待,并处理来自FastCGI进程管理器(运行在Web Server中)的下一个连接。 在CGI模式中,php-cgi在此便退出了。fast_cgi与cgi区别CGI,每一个Web请求PHP都必须重新解析php.ini、重新载入全部扩展,并重新初始化全部数据结构。FastCGI,所有这些都只在进程启动时发生一次。一个额外的好处是,持续数据库连接(Persistent database connection)可以工作。

FastCGI是多进程,所以比CGI多线程消耗更多的服务器内存,php-cgi解释器每进程消耗7至25兆内存,将这个数字乘以50或100就是很大的内存数。

要了解php-fpm,需要先了解php-cgi,PHP-CGI就是PHP实现的自带的FastCGI管理器。而PHP-CGI只是个CGI程序,他自己本身只能解析请求,返回结果,不会进程管理。所以就出现了一些能够调度 php-cgi 进程的程序,比如说由lighthttpd分离出来的spawn-fcgi。同样,PHP-FPM也是用于调度管理PHP解析器php-cgi的管理程序,PHP-FPM可以通过生成新的子进程可以实现php.ini修改后的平滑重启。

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值