LNMP架构——OpenResty实现php缓存前移(将memcache移到nginx前端层面) Dear 丶 2023-07-06 11:40 1阅读 0赞 本次实验是在[LNMP架构——给php页面添加memcache缓存优化,搭建nginx+php+memcache+mysql][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功能 #### ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0NhcGVqYXNtaW5lWQ_size_16_color_FFFFFF_t_70] 传统服务器工作模式是:客户发请求到nginx反向代理,nginx找到tomcat浏览器,tomcat到mysql和redis获取数据,响应到浏览器,送到客户端。 ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0NhcGVqYXNtaW5lWQ_size_16_color_FFFFFF_t_70 1] 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(协程),协程之间数据隔离,每个协程具有独立的全局变量。 ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0NhcGVqYXNtaW5lWQ_size_16_color_FFFFFF_t_70 2] #### 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,大大提高了应用的性能。 #### 实验环境 #### <table> <thead> <tr> <th>主机名</th> <th>ip</th> <th>服务</th> </tr> </thead> <tbody> <tr> <td>server1</td> <td>172.25.1.101</td> <td>lnmp、memcache、openresty</td> </tr> <tr> <td>真机</td> <td>172.25.1.250</td> <td>客户端</td> </tr> </tbody> </table> #### 实验 #### 在server1上: 步骤一:先关闭之前配置好的nginx,因为openresty是一个类似于nginx的服务,调用都是80端口 nginx -s stop netstat -antuple ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0NhcGVqYXNtaW5lWQ_size_16_color_FFFFFF_t_70 3] 步骤二:在网上下载openresty安装包 tar zxf openresty-1.13.6.1.tar.gz ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0NhcGVqYXNtaW5lWQ_size_16_color_FFFFFF_t_70 4] 步骤三:编译安装 cd openresty-1.13.6.1 ./configure --prefix=/usr/local/openresty gmake && gmake install ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0NhcGVqYXNtaW5lWQ_size_16_color_FFFFFF_t_70 5]![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0NhcGVqYXNtaW5lWQ_size_16_color_FFFFFF_t_70 6] 步骤四:拷贝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 . ![在这里插入图片描述][20200218152359658.png] 步骤五:编辑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 } ![在这里插入图片描述][20200218152414757.png] ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0NhcGVqYXNtaW5lWQ_size_16_color_FFFFFF_t_70 7] 步骤六:检查语法规范并开启nginx服务 /usr/local/openresty/nginx/sbin/nginx -t /usr/local/openresty/nginx/sbin/nginx netstat -antuple ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0NhcGVqYXNtaW5lWQ_size_16_color_FFFFFF_t_70 8] 步骤七: 复制之前更改过的/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 ![在这里插入图片描述][20200218152515307.png] 在真机上: 打开浏览器访问http://172.25.2.1/memcache.php,可查看缓存命中率 ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0NhcGVqYXNtaW5lWQ_size_16_color_FFFFFF_t_70 9] 模拟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 ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0NhcGVqYXNtaW5lWQ_size_16_color_FFFFFF_t_70 10] ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0NhcGVqYXNtaW5lWQ_size_16_color_FFFFFF_t_70 11] 可以看出访问的是openstry,且访问速度明显比memcache单独作用加快。index.php页面没有缓存,openstry去后端取数据,访问速度也比之前加快,并且没有错误。 [LNMP_php_memcache_nginx_php_memcache_mysql]: https://blog.csdn.net/CapejasmineY/article/details/104355739 [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0NhcGVqYXNtaW5lWQ_size_16_color_FFFFFF_t_70]: https://img-blog.csdnimg.cn/20200218125256179.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0NhcGVqYXNtaW5lWQ==,size_16,color_FFFFFF,t_70 [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0NhcGVqYXNtaW5lWQ_size_16_color_FFFFFF_t_70 1]: https://img-blog.csdnimg.cn/20200218125532781.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0NhcGVqYXNtaW5lWQ==,size_16,color_FFFFFF,t_70 [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0NhcGVqYXNtaW5lWQ_size_16_color_FFFFFF_t_70 2]: https://img-blog.csdnimg.cn/20200218120745517.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0NhcGVqYXNtaW5lWQ==,size_16,color_FFFFFF,t_70 [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0NhcGVqYXNtaW5lWQ_size_16_color_FFFFFF_t_70 3]: https://img-blog.csdnimg.cn/20200218152203346.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0NhcGVqYXNtaW5lWQ==,size_16,color_FFFFFF,t_70 [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0NhcGVqYXNtaW5lWQ_size_16_color_FFFFFF_t_70 4]: https://img-blog.csdnimg.cn/2020021815222830.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0NhcGVqYXNtaW5lWQ==,size_16,color_FFFFFF,t_70 [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0NhcGVqYXNtaW5lWQ_size_16_color_FFFFFF_t_70 5]: https://img-blog.csdnimg.cn/20200218152307491.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0NhcGVqYXNtaW5lWQ==,size_16,color_FFFFFF,t_70 [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0NhcGVqYXNtaW5lWQ_size_16_color_FFFFFF_t_70 6]: https://img-blog.csdnimg.cn/20200218152326213.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0NhcGVqYXNtaW5lWQ==,size_16,color_FFFFFF,t_70 [20200218152359658.png]: https://img-blog.csdnimg.cn/20200218152359658.png [20200218152414757.png]: https://img-blog.csdnimg.cn/20200218152414757.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0NhcGVqYXNtaW5lWQ_size_16_color_FFFFFF_t_70 7]: https://img-blog.csdnimg.cn/2020021815241989.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0NhcGVqYXNtaW5lWQ==,size_16,color_FFFFFF,t_70 [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0NhcGVqYXNtaW5lWQ_size_16_color_FFFFFF_t_70 8]: https://img-blog.csdnimg.cn/20200218152448425.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0NhcGVqYXNtaW5lWQ==,size_16,color_FFFFFF,t_70 [20200218152515307.png]: https://img-blog.csdnimg.cn/20200218152515307.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0NhcGVqYXNtaW5lWQ_size_16_color_FFFFFF_t_70 9]: https://img-blog.csdnimg.cn/20200218152537194.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0NhcGVqYXNtaW5lWQ==,size_16,color_FFFFFF,t_70 [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0NhcGVqYXNtaW5lWQ_size_16_color_FFFFFF_t_70 10]: https://img-blog.csdnimg.cn/20200218152746863.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0NhcGVqYXNtaW5lWQ==,size_16,color_FFFFFF,t_70 [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0NhcGVqYXNtaW5lWQ_size_16_color_FFFFFF_t_70 11]: https://img-blog.csdnimg.cn/202002181528278.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0NhcGVqYXNtaW5lWQ==,size_16,color_FFFFFF,t_70
还没有评论,来说两句吧...