lnmp架构入门之php+memcache

一、lnmp架构介绍

lnmp架构和lamp架构的区别:

LNMP 的全称是linux + nginx + mysql + php,LAMP 的全称是linux + apache + mysql +php。除了nginx和apache有区别之外,其他的都一样。

1、二者最核心的区别在于 Apache 是同步多进程模型,一个连接对应一个进程;Nginx 是异步的,多个连接(万级别)可以对应一个进程 。Nginx 处理静态文件好, 耗费内存少. 但无疑 Apache 仍然是目前的主流, 有很多丰富的特性. 所以还需要搭配着来. 当然如果能确定 Nginx 就适合需求, 那么使用 Nginx 会是更经济的方式。同时,Nginx 的负载能力比 Apache 高很多。

2、Nginx 是很不错的前端服务器,负载性能很好;Apache 对 php 等语言的支持很好,此外 Apache 有强大的支持网络;但是 Apache 有先天不支持多核心处理负载均衡的缺点,建议使用 Nginx 做前端,后端用 Apache。

3、Nginx 处理动态请求是鸡肋,一般动态请求要 Apache 去做,Nginx 只适合静态和反向。

4、大部分情况下 Nginx 都优于 Apache,比如说静态文件处理、PHP-CGI 的支持、反向代理功能、前端 Cache、维持连接等。在 Apache+PHP(prefork)模式下,如果 PHP 处理慢或者前端压力很大的情况下,很容易出现 Apache 进程数飙升,从而拒绝服务的现象。

总结:需要性能的 web 服务,用 Nginx 。如果不需要性能只求稳定,那就 Apache 吧。

Lnmp架构:

Lnmp(web应用软件组合)
Linux+Nginx+Mysql/MariaDB+Perl/PHP/Python一组常用来搭建动态网站或者服务器的开源软件,本身都是各自独立的程序,但是因为常被放在一起使用,拥有了越来越高的兼容度,共同组成了一个强大的Web应用程序平台。

LNMP的架构以及通信过程

Lnmp是一个cs架构的平台(client/server架构, 即客户端/服务器架构),web客户端基于TCP/IP通过http协议发起请求,这个请求可能是动态的也可能是静态的,所有的服务器通过发起请求的后缀来判断。如果是静态的就由web服务器自己处理,然后将资源发给客户端。如果请求是动态的这时web服务器会通过FSATCGI协议发给php,通过php模块去MySQL拿数据在通过Nginx交给客户端。

lnmp架构入门之php+memcache_第1张图片

web服务器

php是为web而生的一门后端语言。所以php仅仅是一门后端语言,那么它就必须借助于web服务器,才能提供web功能。当然其他的后端语言如果做web应用,也必须借助于web服务器。

lnmp架构入门之php+memcache_第2张图片

epoll 全称 eventpoll,是 linux 内核实现IO多路复用(IO multiplexing)的一个实现。IO多路复用的意思是在一个操作里同时监听多个输入输出源,在其中一个或多个输入输出源可用的时候返回,然后对其的进行读写操作。

二、nginx结合php-fpm发布页面

进入上文编译时设置的路径,将此路径写到用户主目录里去:

lnmp架构入门之php+memcache_第3张图片

 lnmp架构入门之php+memcache_第4张图片

进入php/etc,copy一份模板 ,就改一个pid其他不动:

 lnmp架构入门之php+memcache_第5张图片

再进入etc/php-fpm.d,copy一份模板,此文件保持默认参数即可:

lnmp架构入门之php+memcache_第6张图片

进入php源码路径,copy一份生产环境配置文件,此文件只需要更改默认时区为亚洲上海:

lnmp架构入门之php+memcache_第7张图片

 进入php源码路径,copy一份系统文件,把保护关闭(更改完毕之后记得 systemctl daemon-reload):

lnmp架构入门之php+memcache_第8张图片

 lnmp架构入门之php+memcache_第9张图片

 此时可以启动服务:

lnmp架构入门之php+memcache_第10张图片

 在nginx.conf 中设置php发布页面(设置完记得 nginx -s reload):

lnmp架构入门之php+memcache_第11张图片

 此时在nginx默认发布目录里创建index.php页面,设置一个测试用的页面:

 lnmp架构入门之php+memcache_第12张图片

 此时,使用nginx发布php页面就完成了

lnmp架构入门之php+memcache_第13张图片

三、php添加memcache功能模块

Memcached 是高性能的分布式内存缓存服务器,用于动态Web应用以减轻数据库的负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高了网站访问的速度。

#软件下载:http://pecl.php.net/package/memcache
#软件安装:
tar zxf memcache-4.0.5.2.tgz
cd memcache-4.0.5.2
phpize
./configure
make && make install
#配置php加载模块:
vim php.ini
extension=memcache.so
systemctl reload php-fpm
php -m |grep memcache
memcache

memcache即给php加缓存。

首先,下载一个memcache包(可以去阿里云上找):

一般在php相关包里,首先用phpize产生相关文件等;

 由错误可知没有安装autoconf:

lnmp架构入门之php+memcache_第14张图片

此时正常了:

通过  ./configure --help 查看得知我们要编译的参数:./configure --enable-memcache,然后进行编译三部曲:

lnmp架构入门之php+memcache_第15张图片

 编译成功:

lnmp架构入门之php+memcache_第16张图片

进入php的主配置文件,修改并且平滑重载:

lnmp架构入门之php+memcache_第17张图片

 此时,memcache模块就加载成功了:

测试:

首先,从源码目录里复制两个php文件到nginx发布目录:

 修改memcache.php文件;

lnmp架构入门之php+memcache_第18张图片

安装memcache服务:

开启服务:

lnmp架构入门之php+memcache_第19张图片

 用网页登陆输入用户名密码:

lnmp架构入门之php+memcache_第20张图片

 lnmp架构入门之php+memcache_第21张图片

再使用刚刚复制的example.php,此文件的作用是将数据写到memcache中。我们在浏览器上访问exameple.php就可以给memcache增加访问量:

 lnmp架构入门之php+memcache_第22张图片

 lnmp架构入门之php+memcache_第23张图片

 此时我们不断访问example.php发现命中率不断上升,表示所有的访问都来自于memcache。

 我们在客户端使用ab压测工具对index.php进行压测:

lnmp架构入门之php+memcache_第24张图片

 由于nginx配置文件里设置,所有由php结尾的文件都由后端的9000端口处理,都是由php处理的,所以此时处理的生命周期就不归nginx管。此时的处理机制是FASTcgi反向代理机制,即

client -> nginx:80 *.php -> php-fpm:9000 -> nginx -> client ,用户端在nginx将请求传给phpfpm后是阻塞的,因为要等待phpfpm将请求处理完,虽然nginx是高并发的,但是在phpfpm中是阻塞的。

 我们再使用ab对example.php进行压测,此时访问example.php走的是memcache缓存机制:

lnmp架构入门之php+memcache_第25张图片

我们发现走memcache缓存所有请求都成功,没有报错。 这说明php+memcached缓存机制比单php访问机制更高效。

你可能感兴趣的:(nginx,php,服务器)