lnmp架构——架构理解

lnmp架构——架构理解

  • 1 lnmp简介
  • 2 lnmp工作原理
  • 3 lnmp特点
  • 4 lamp与lnmp的区别
    • 4.1 lamp简介
    • 4.2 对比

1 lnmp简介

  • LNMP是指一组通常一起使用来运行动态网站或者服务器的自由软件名称首字母缩写。其中L指Linux,N指Nginx,M一般指MySQL,也可以指MariaDB,P一般指PHP,也可以指Perl或Python。
  • 一般情况下LNMP代表的就是:Linux系统下Nginx+MySQL+PHP这种网站服务器架构。其中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

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

3 lnmp特点

  • 优点
    • 占用VPS(虚拟专用服务器)资源较少,Nginx配置起来也比较简单,利用fast-cgi的方式动态解析PHP脚本。
    • 作为 Web 服务器:相比 Apache,Nginx 使用更少的资源,支持更多的并发连接,体现更高的效率。
    • Nginx性能稳定、功能丰富、运维简单、处理静态文件速度快且消耗系统资源极少。
    • 作为负载均衡服务器:Nginx 既可以在内部直接支持Rails和PHP,也可以支持作为 HTTP代理服务器对外进行服务。
    • Nginx 安装非常的简单,配置文件非常简洁。Nginx支持平滑加载新的配置,还能够在不间断服务的情况下进行软件版本的升级。
  • 缺点
    • php-fpm组件的负载能力有限,在访问量巨大的时候,php-fpm进程容易僵死,容易发生502 错误

4 lamp与lnmp的区别

4.1 lamp简介

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

4.2 对比

  • 在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高并发的功能更加强大?

  • 主要是因为他们所采用的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模型较为低效

你可能感兴趣的:(企业实战,运维,apache,nginx,linux)