高可用、高并发LNMP集群---了解LNMP架构的工作原理

文章目录

  • 一、什么是lnmp?
  • 二、lnmp的工作原理
    • Fast-CGI 介绍
    • Fast-CGI的工作原理
    • fastcgi的特点
  • 三、LAMP的不同
    • apache+php和nginx+php的区别
  • 四、为什么要选择LNMP?

一、什么是lnmp?

LNMP是指一组通常一起使用来运行动态网站或者服务器的自由软件名称首字母缩写。
L指Linux,N指Nginx,M一般指MySQL,也可以指MariaDB,P一般指PHP,也可以指Perl或Python。

LNMP代表的就是:Linux系统下Nginx+MySQL+PHP这种网站服务器架构。
Linux是一类Unix计算机操作系统的统称,是目前最流行的免费操作系统。代表版本有:debian、centos、ubuntu、fedora、gentoo等。
Nginx是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP代理服务器。
Mysql是一个小型关系型数据库管理系统。
PHP是一种在服务器端执行的嵌入HTML文档的脚本语言。
这四种软件均为免费开源软件,组合到一起,成为一个免费、高效、扩展性强的网站服务系统。

二、lnmp的工作原理

浏览器发送http request请求到服务器(Nginx),服务器响应并处理web请求。如果是静态文本直接返回,否则将脚本(PHP)通过接口传输协议(网关协议)PHP-FCGI(fast-cgi)传输给PHP-FPM(进程管理程序),然后PHP-FPM调用PHP解析器的其中一个进程PHP-CGI来解析php脚本信息。【PHP-FPM在启动时启动了多个PHP-CGI子进程,并发执行。】然后将解析后的脚本返回到PHP-FPM,PHP-FPM再通过fast-cgi的形式将脚本信息传送给Nginx。服务器再通过Http response的形式传送给浏览器,浏览器再进行解析与渲染然后进行呈现。

Fast-CGI 介绍

FastCGI是一个可伸缩的,高速地在HTTP服务器和动态脚本语言间通信的接口(在Linux下,FastCGI接口即为socket,这个socket可以是文件socket,也可以是IP socket),主要优点是把动态语言和HTTP服务器分离出来。多数流行的HTTP服务器都支持FastCGI,包括Apache,Nginx和Lighttpd等。
同时,FastCGI也被许多脚本语言所支持,例如当前比较流程的脚本语言PHP。FastCGI接口采用的是C/S架构,它可以将HTTP服务器和脚本解析服务器分开,同时还能在脚本解析服务器上启动一个或多个脚本来解析守护进程。当HTTP服务器遇到动态程序时,可以将其直接交付给FastCGI进程来执行,然后将得到的结果返回给浏览器。这种方式可以让HTTP服务器专一地处理静态请求,或者将动态脚本服务器的结果返回给客户端,这在很大程度上提高了整个应用系统的性能。

高可用、高并发LNMP集群---了解LNMP架构的工作原理_第1张图片
高可用、高并发LNMP集群---了解LNMP架构的工作原理_第2张图片

Fast-CGI的工作原理

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

fastcgi的特点

HTTP服务器和动态脚本语言间通信的接口或工具。
可把动态语言解析和HTTP服务器分离开。
Nginx,Apache,Lighttpd,以及多数动态语言都支持FastCGI。
FastCGI接口方式采用C/S结构,分为客户端(HTTP服务器)和服务器端(动态语言解析服务器)
PHP动态语言服务器端可以启动多个FastCGI的守护进程(例如php-fpm(fcgi process mangement))
HTTP服务器通过(例如Nginx fastcgi_pass)FastCGI客户端和动态语言FastCGI服务器端通信(例如php-fpm)

三、LAMP的不同

LAMP指的是:Linux+Apache+MySQL+Perl/PHP/Python
由于Nginx拥有超越Apache的卓越性能,LNMP正在逐渐取代LAMP
在LNMP中,Nginx本身对脚本不做任何的处理,而是把请求发给fast-cgi管理进程处理
fast-cgi管理进程选择cgi子进程处理结果并返回,二者是相互独立的,通过管道进程通信
在LAMP中,PHP是Apache的一个模块,具有相同的生命周期,两者通过共享内存的方式通信
两者的PHP环境不相互适用
相比 Apache,Nginx 使用更少的资源,支持更多的并发连接,体现更高的效率

nginx本身不能处理php,它只是个web服务器,当接收到请求后,如果是php请求,则发给php解释器处理,并把结果返回给客户端。
nginx一般是把请求发fastcgi管理进程处理,fascgi管理进程选择cgi进程处理结果并返回给nginx。

apache+php和nginx+php的区别

  apache一般是把php当作自己的一个模块来启动;而nginx则把http请求变量转发给php进程,即php独立进程,与nginx通信,这种方式叫做FastCGI运行方式。
  所以,apache所编译的php不能用于nginx

四、为什么要选择LNMP?

LNMP是一个基于CentOS/Debian编写的Nginx、PHP、MySQL、PHPMyAdmin、eAccelerator一键安装包
可以在VPS、独立主机上轻松的安装LNMP生产环境。
LNMP代表的就是:Linux系统下Nginx+MySQL+PHP这种网站服务器架构
Nginx较为稳定、功能丰富、安装配置简单、低系统资源
Nginx既可以在内部直接支持Rails和PHP,也可以支持作为HTTP代理服务器对外进行服务
Nginx用C编写,不论是系统资源开销还是CPU使用效率都比Perlbal好得多

在这里插入图片描述

你可能感兴趣的:(企业)