企业级高可用、高并发lnmp集群——基础知识篇(主要搞清楚lnmp架构的工作原理)

news/2024/7/8 5:46:40

1.什么是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文档的脚本语言
这四种软件均为免费开源软件,组合到一起,成为一个免费、高效、扩展性强的网站服务系统
在这里插入图片描述

2.lnmp的特点(主要是nginx)

Nginx是一个小巧而高效的Linux下的Web服务器软件,是由 Igor Sysoev 为俄罗斯访问量第二的 Rambler 站点开发的
已经在一些俄罗斯的大型网站上运行多年,相当的稳定
Nginx性能稳定、功能丰富、运维简单、处理静态文件速度快且消耗系统资源极少
作为 Web 服务器:相比 Apache,Nginx 使用更少的资源,支持更多的并发连接,体现更高的效率
作为负载均衡服务器:Nginx 既可以在内部直接支持Rails和PHP,也可以支持作为 HTTP代理服务器对外进行服务
Nginx 用C编写,不论是系统资源开销还是CPU使用效率都比Perlbal要好的多
作为邮件代理服务器:Nginx同时也是一个非常优秀的邮件代理服务器
(最早开发这个产品的目的之一也是作为邮件代理服务器),Last/fm 描述了成功并且美妙的使用经验
Nginx 安装非常的简单,配置文件非常简洁(还能够支持perl语法)
Nginx支持平滑加载新的配置,还能够在不间断服务的情况下进行软件版本的升级

3.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好得多
在这里插入图片描述

4.LAMP和LNMP区别是什么?

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

5.lnmp和lamp的工作原理

  • (1)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的形式传送给浏览器,浏览器再进行解析与渲染然后进行呈现。

  • (2)lamp的工作原理

浏览器向服务器发送http请求,服务器 (Apache) 接受请求,由于php作为Apache的组件模块也会一起启动,它们具有相同的生命周期。Apache会将一些静态资源保存,然后调用php去处理模块进行php脚本的处理。脚本处理完后,Apache将处理完的信息通过http response的方式发送给浏览器,浏览器解析,渲染等一系列操作后呈现整个网页。

6.Fast-CGI 介绍

CGI全称是“公共网关接口”(Common Gateway Interface)
HTTP服务器与你的或其它机器上的程序进行“交谈”的一种工具,其程序须运行在网络服务器上
cgi是通用网关接口,是外部应用程序与Web服务器之间的接口标准
cgi是为了保证web server传递过来的数据是标准格式的,方便cgi程序的编写者
Fast-CGI是语言无关的、可伸缩架构的CGI开放扩展,其主要行为是将CGI解释器进程保持在内存中并因此获得较高的性能
众所周知,CGI解释器的反复加载是CGI性能低下的主要原因
如果CGI解释器保持在内存中并接受FastCGI进程管理器调度,则可以提供良好的性能、伸缩性、Fail- Over特性等等
Fast-cgi像是一个常驻(long-live)型的cgi,是用来提高cgi程序性能的
fast-CGI是nginx和php之间的一个通信接口,该接口实际处理过程通过启动php-fpm进程来解析php脚本
即php-fpm相当于一个动态应用服务器,从而实现nginx动态解析php
因此,如果nginx服务器需要支持php解析,需要在nginx.conf中增加php的配置
将php脚本转发到fastCGI进程监听的IP地址和端口(php-fpm.conf中指定)
同时,php安装的时候,需要开启支持fastCGI选项,并且编译安装php-fpm补丁/扩展
同时,需要启动php-fpm进程,才可以解析nginx通过fastCGI转发过来的php脚本
在这里插入图片描述
在这里插入图片描述

7.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)可以工作

8.Fast-CGI的不足

因为是多进程,所以比CGI多线程消耗更多的服务器内存
PHP-CGI解释器每进程消耗7至25兆内存,将这个数字乘以50或100就是很大的内存数
Nginx 0.8.46+PHP 5.2.14(FastCGI)服务器在3万并发连接下,开启的10个Nginx进程消耗150M内存(15M10=150M)
开启的64个php-cgi进程消耗1280M内存(20M
64=1280M),加上系统自身消耗的内存,总共消耗不到2GB内存
如果服务器内存较小,完全可以只开启25个php-cgi进程,这样php-cgi消耗的总内存数才500M
上面的数据摘自Nginx 0.8.x + PHP 5.2.13(FastCGI)搭建胜过Apache十倍的Web服务器(第6版)PHP-FPM

9.PHP-FPM

PHP-FPM是一个实现了Fastcgi的程序,PHP-FPM的管理对象是php-cgi,被PHP官方收了
后来PHP内核集成了PHP-FPM之后就方便多了,使用enalbe-fpm这个编译参数即可

1、php-fpm是一个完全独立的程序,不依赖php-cgi,也不依赖php。因为php-fpm是一个内置了php解释器的FastCGI服务,启动时能够自行读取php.ini配置和php-fpm.conf配置.
2、一个master进程,支持多个pool,每个pool由master进程监听不同的端口,pool中有多个worker进程.
3、每个worker进程都内置PHP解释器,并且进程常驻后台,支持prefork动态增加.
4、每个worker进程支持在运行时编译脚本并在内存中缓存生成的opcode来提升性能.
5、每个worker进程支持配置响应指定请求数后自动重启,master进程会重启挂掉的worker进程.
6、每个worker进程能保持一个到MySQL/Memcached/Redis的持久连接,实现"连接池",避免重复建立连接,对程序透明.
7、master进程采用epoll模型异步接收和分发请求,listen监听端口,epoll_wait等待连接,
8、然后分发给对应pool里的worker进程,worker进程accpet请求后poll处理连接,
9、如果worker进程不够用,master进程会prefork更多进程,
A、如果prefork达到了pm.max_children上限,worker进程又全都繁忙,这时master进程会把请求挂起到连接队列backlog里(默认值是511).

10.PHP-CGI

php-cgi 是解释PHP脚本的程序,只是个CGI程序,他自己本身只能解析请求,返回结果,不会进程管理

11.Nginx+FastCGI运行原理

nginx不支持对外部程序的直接调用或者解析,所有的外部程序(包括PHP)必须通过FastCGI接口来调用
FastCGI接口在Linux下是socket(这个socket可以是文件socket,也可以是ip socket)

wrapper: 为了调用CGI程序,还需要一个FastCGI的wrapper(wrapper可以理解为用于启动另一个程序的程序),这个wrapper绑定在某个固定socket上,如端口或者文件socket。当Nginx将CGI请求发送给这个socket的时候,通过FastCGI接口,wrapper接收到请求,然后Fork(派生)出一个新的线程,这个线程调用解释器或者外部程序处理脚本并读取返回数据;接着,wrapper再将返回的数据通过FastCGI接口,沿着固定的socket传递给Nginx;最后,Nginx将返回的数据(html页面或者图片)发送给客户端。这就是Nginx+FastCGI的整个运作过程.在这里插入图片描述
所以,我们首先需要一个wrapper,这个wrapper需要完成的工作
1、通过调用fastcgi(库)的函数通过socket和ningx通信(读写socket是fastcgi内部实现的功能,对wrapper是非透明的)
2、调度thread,进行fork和kill
3、和application(php)进行通信


http://www.niftyadmin.cn/n/2928389.html

相关文章

LNMP架构祥解——php、nginx、mysql源码编译的过程(也就是搭建LNMP架构的过程)

前言 本文将介绍LNMP架构中PHP、Nginx、Mysql的源码编译过程 在我们使用的Linux系统中,可以从yum源中获得mysql、php,为什么要进行如此漫长复杂的过程进行编译呢? 这是因为官方为我们提供的mysql、php等其功能有限,我们自行编译&…

利用lnmp架构搭建一个可用论坛,将php、nginx、mysql三者联系起来

php、nginx、mysql现在都配置好了,接下来我将以搭建论坛并且客户使用论坛为例,演示整个过程 lnmp架构的整个访问过程如下 用户从前端页面开始访问: 先到达nginx,由nginx判断是静态资源还是动态页面请求 如果是静态资源&#xff0…

LNMP架构之静态缓存(nginx+php+mysql+memcache)——MemCache对PHP页面的缓存加速优化

1.什么是memcache? memcache是一套分布式的高速缓存系统,由LiveJournal的Brad Fitzpatrick开发,但目前被许多网站使用以提升网站的访问速度 尤其对于一些大型的、需要频繁访问数据库的网站访问速度提升效果十分显著 ,这是一套开放…

LNMP架构——OpenResty实现缓存前移(到达Nginx前端层面)

前言 我们都知道Nginx有很多的特性和好处,但是在Nginx上开发成了一个难题,Nginx模块需要用C开发,而且必须符合一系列复杂的规则,最重要的用C开发模块必须要熟悉Nginx的源代码,使得开发者对其望而生畏。为了开发人员方便…

在linux上面合并多个windows文件乱码的问题

在linux上面单独打开每个被合并txt文件都是正确显示的。但是cat *.txt > 1.txt 打开就是乱码。 原因是1.txt虽然是utf-8编码,但是显示是用latin1显示的。解决办法: iconv -f utf-8 -t utf-8 1.txt > 2.txt 就好了。 另外,文件里面如果…

LNMP架构——nginx+jsp+tomcat完成客户端的动态请求

首先,我先给大家画一张图,来理一下lnmp架构工作的整个过程 上一个实验其实我们通过php请求的是nginx服务器上的资源,还是静态资源 现在我们想实现动态获取,利用jsp动态获取tomcat服务器上面的资源 1.什么是tomcat? …

lnmp——nginx+tomcat动态实现的tomcat服务器之间负载均衡

之前我们已经实现了客户端访问nginx服务器的时候,通过jsp动态获取tomcat服务器上面的资源 接下来实现nginx做反向代理tomcat做web服务器实现两个web(tomcat1和tomcat2)之间的负载均衡 并且客户端可以在浏览器动态注册信息,web1和w…

有道云笔记最新软件下载官方版

2019独角兽企业重金招聘Python工程师标准>>> 有道笔记是网易有道全新推出的云笔记软件,旨在以云存储技术帮助用户建立一个可以轻松访问、安全存储的云笔记空间,解决个人资料和信息跨平台跨地点的管理问题。有道云笔记目前支持安卓手机版&…