LNMP架构——OpenResty实现php缓存前移(将memcache移到nginx前端层面)

本次实验是在LNMP架构——给php页面添加memcache缓存优化,搭建nginx+php+memcache+mysql搭建lnmp+memcache环境基础上进行的,接下来我将配置OpenResty。

一、认识OpenResty

1、什么是OpenResty?

OpenResty由中国人章亦春发起,是一个可伸缩的基于Nginx的Web平台,其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项。使用 Lua 脚本语言调动 Nginx 支持的各种 C 以及 Lua 模块,可以快速构造出足以胜任10K以上并发连接响应的超高性能Web应用系统。

OpenResty的目标是让你的Web服务直接跑在 Nginx 服务内部,充分利用 Nginx 的非阻塞 I/O 模型,不仅仅对 HTTP 客户端请求,甚至于对远程后端诸如 MySQL、PostgreSQL、Memcached 以及 Redis 等都进行一致的高性能响应。

OpenResty使我们可以借助于Nginx的异步非阻塞达到使用Lua异步并发访问后端DB等服务。

2、OpenResty功能

在这里插入图片描述

传统服务器工作模式是:客户发请求到nginx反向代理,nginx找到tomcat浏览器,tomcat到mysql和redis获取数据,响应到浏览器,送到客户端。
在这里插入图片描述
openresty并不是说替换tomcat,而是当浏览器对服务器发送请求时,在nginx上添加openresty,openresty直接对客户端请求进行响应。或在nginx嵌入一些lua脚本(即openresty)跨过tomcat直接访问数据库。不过目前tomcat中做的一些复杂操作并不能被openresty完全替代。

对于一些高性能的服务,当缓存每没有数据时,直接使用 OpenResty 访问 Mysql或Redis等,而不需要通过第三方语言(PHP、Python、Ruby)等来访问数据库再返回,这大大提高了应用的性能。这样不用等待第三方返回,

2、OpenResty运行原理

Nginx 采用的是 master-worker 模型,一个 master 进程管理多个 worker 进程,基本的事件处理都是放在 woker进程中,master 负责全局初始化,以及对 worker 的管理。

在OpenResty中,每个 woker 使用一个 LuaVM,当请求被分配到 woker 时,将在这个 LuaVM 里创建一个 coroutine(协程),协程之间数据隔离,每个协程具有独立的全局变量。
在这里插入图片描述

3、OpenResty处理请求流程

Nginx会把一个请求分成不同阶段,第三方模块可以根据自己的行为,挂在到不同阶段中以达到自身目的。OpenResty采用了同样的特性,不同阶段有着不同的处理行为。

4、ngx_lua模块的原理
  • 每个worker(工作进程)创建一个Lua VM,worker内所有协程共享VM;
  • 将Nginx I/O原语封装后注入 Lua VM,允许Lua代码直接访问;
  • 每个外部请求都由一个Lua协程处理,协程之间数据隔离;
  • Lua代码调用I/O操作等异步接口时,会挂起当前协程(并保护上下文数据),而不阻塞worker;
  • I/O等异步操作完成时还原相关协程上下文数据,并继续运行;

二、配置OpenResty

实验思想

当客户端访问nginx时,由于openresty的作用,让缓存memcache直接跑在 Nginx 服务内部,客户端首先访问到memcache,大大提高了应用的性能。

实验环境
主机名ip服务
server1172.25.1.101lnmp、memcache、openresty
真机172.25.1.250客户端
实验

在server1上
步骤一:先关闭之前配置好的nginx,因为openresty是一个类似于nginx的服务,调用都是80端口

nginx -s stop
netstat -antuple

在这里插入图片描述
步骤二:在网上下载openresty安装包

tar zxf openresty-1.13.6.1.tar.gz 

在这里插入图片描述
步骤三:编译安装

cd openresty-1.13.6.1
./configure --prefix=/usr/local/openresty
gmake && gmake install

在这里插入图片描述在这里插入图片描述
步骤四:拷贝memcache压缩包自带的php文件到openresty默认发布

cd /usr/local/openresty/nginx/html
cp /usr/local/lnmp/nginx/html/index.php .
cp /usr/local/lnmp/nginx/html/example.php .

在这里插入图片描述
步骤五:编辑openresty的nginx配置文件

注意:配置文件第一行,必须设置nginx用户

vim /usr/local/openresty/nginx/conf/nginx.conf

17  http {
18         upstream memcache {
19         server localhost:11211;
20         keepalive 512;
21         }
22 	
	#upstream属于handler,只是他不产生自己的内容,而是通过请求后端服务器得到内容,所以才称为upstream(上游)。请求并取得响应内容的整个过程已经被封装到nginx内部,所以upstream模块只需要开发若干回调函数,完成构造请求和解析响应等具体的工作。
	# nginx将memcache缓存前移,客户端请求到来,先查看memcache缓存

23     include       mime.types;
24     default_type  application/octet-stream;

69         location /memc {
70                 internal;   # 只接收内部访问,不接受外部http访问。比较安全
71                 memc_connect_timeout 100ms;
72                 memc_send_timeout 100ms;  # 后端服务器数据回传时间
73                 memc_read_timeout 100ms;  # 连接成功后,后端服务器响应时间
74                 set $memc_key $query_string;  # 键值对的形式存储
75                 set $memc_exptime 300;
76                 memc_pass memcache;
77         }
78 
79         location ~ \.php$ {
80             set $key $uri$args; 
              # http的GET方法表示get、PUT方法表示set
81             srcache_fetch GET /memc $key;
82             srcache_store PUT /memc $key;
				# 这两个配置的作用是:请求php页面时,先会去memcache中找,如果没有,正常访问;访问结束后将结果存到memcache,下次访问时直接从缓存中
83             root           html;
84             fastcgi_pass   127.0.0.1:9000;
85             fastcgi_index  index.php;
86         #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
87             include        fastcgi.conf;
88         }

在这里插入图片描述
在这里插入图片描述
步骤六:检查语法规范并开启nginx服务

/usr/local/openresty/nginx/sbin/nginx -t
/usr/local/openresty/nginx/sbin/nginx
netstat -antuple

在这里插入图片描述
步骤七: 复制之前更改过的/usr/local/lnmp/nginx/html/memcache.php到/usr/local/openresty/nginx/html目录下

cp /usr/local/lnmp/nginx/html/memcache.php  /usr/local/openresty/nginx/html

在这里插入图片描述
在真机上
打开浏览器访问http://172.25.2.1/memcache.php,可查看缓存命中率

在这里插入图片描述
模拟5000请求量测试命中率和访问时间:

ab -c 10 -n 5000 http://172.25.1.101/index.php
ab -c 10 -n 5000 http://172.25.1.101/example.php

在这里插入图片描述
在这里插入图片描述
可以看出访问的是openstry,且访问速度明显比memcache单独作用加快。index.php页面没有缓存,openstry去后端取数据,访问速度也比之前加快,并且没有错误。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值