电商平台 lnmp 架构介绍
1. Lnmp 介绍
-
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文档的脚本语言;
这四种软件均为免费开源软件,组合到一起,成为一个免费、高效、扩展性强的网站服务系统。 -
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的一个模块。
-
lnmp 特点
Nginx性能稳定、功能丰富、运维简单、处理静态文件速度快且消耗系统资源极少。
-
优点
占用VPS(虚拟专用服务器)资源较少,Nginx配置起来也比较简单,利用fast-cgi的方式动态解析PHP脚本。
作为 Web 服务器:相比 Apache,Nginx 使用更少的资源,支持更多的并发连接,体现更高的效率;
作为负载均衡服务器:Nginx 既可以在内部直接支持Rails和PHP,也可以支持作为 HTTP代理服务器对外进行服务;
Nginx 安装非常的简单,配置文件非常简洁,Nginx支持平滑加载新的配置,还能够在不间断服务的情况下进行软件版本的升级。 -
缺点
php-fpm组件的负载能力有限,在访问量巨大的时候,php-fpm进程容易僵死,容易发生502 错误
2. Lamp 介绍
-
lamp 含义
LAMP是指一组通常一起使用来运行动态网站或者服务器的*软件名称首字母缩写。
lamp是指Linux+Apache+MySQL+PhP架构 -
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模型较为低效。