企业级运维——使用OpenResty实现LNMP架构的缓存前移

文章目录

OpenResty简介

OpenResty(又称:ngx_openresty) 是一个基于 NGINX 的可伸缩的 Web 平台,由中国人章亦春发起,提供了很多高质量的第三方模块。

OpenResty 是一个强大的 Web 应用服务器,Web 开发人员可以使用 Lua 脚本语言调动 Nginx 支持的各种 C 以及 Lua 模块,更主要的是在性能方面,OpenResty可以 快速构造出足以胜任 10K 以上并发连接响应的超高性能 Web 应用系统

模拟缓存前移

  • 1.关闭之前lnmp架构下开启的nginx服务
nginx -s stop
  • 2.官网下载OpenResty的原码包解压并编译
    注意:OpenResty的编译安装使用的是gmake
 tar zxf openresty-1.13.6.1.tar.gz
 cd openresty-1.13.6.1
 ./configure
 gmake && gmake install
  • 3.将memcache用于测试的俩个php文件复制到OpenResty的Nginx的默认发布目录下
cp /usr/local/lnmp/nginx/html/example.php /usr/local/openresty/nginx/html
cp /usr/local/lnmp/nginx/html/memcache.php /usr/local/openresty/nginx/html
  • 4.编辑openresty的nginx配置文件
vim /usr/local/openresty/nginx/conf/nginx.conf

写入:

http {
        upstream memcache {   ##所有的请求,通过转发给memcache缓存服务
           server localhost:11211;   ##memcache服务在本机的11211端口
           keepalive 512;
       }
 location /memc { ##设置memcache的访问及其存储 
         internal; ##只允许内部 
         memc_connect_timeout 100ms; #定义连接发送及其超时时间 
         memc_send_timeout 100ms;
         memc_read_timeout 100ms;
         set $memc_key $query_string; #memcache以键值对的形式存储 
         set $memc_exptime 300;
         memc_pass memcache;
         }
     location ~ \.php$ {
           set $key $uri$args;
           srcache_fetch GET /memc $key;
           srcache_store PUT /memc $key;
           root           html;
           fastcgi_pass   127.0.0.1:9000;
           fastcgi_index  index.php;
           #fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
           include        fastcgi.conf;         ##定义nginx与php连接的时识别的文件
       }

配置文件相关参数详解如下:

  • upstream模块接口

从本质上说,upstream属于handler,只是他不产生自己的内容,而是通过请求后端服务器得到内容,所以才称为upstream(上游)。请求并取得响应内容的整个过程已经被封装到nginx内部,所以upstream模块只需要开发若干回调函数,完成构造请求和解析响应等具体的工作。

所有请求都是通过location来操作memcache,memc-nginx-module存取memcache是基于http method语义的

使用http的GET方法表示get,PUT方法表示set,设置memcache的缓存方式为internal只接受内部访问

memc_key表示以什么作为key,文件中使用的是query_string来作为key,$memc_exptime表示缓存失效时间,单位为秒

  • 5.检查配置文件是否有错误并且开启服务
[root@LNMPserver1 html]# /usr/local/openresty/nginx/sbin/nginx -t
nginx: the configuration file /usr/local/openresty/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/openresty/nginx/conf/nginx.conf test is successful
  • 6.开启服务,查看端口
[root@LNMPserver1 html]# /usr/local/openresty/nginx/sbin/nginx 
[root@LNMPserver1 html]# netstat -tnlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name   
tcp        0      0 0.0.0.0:11211               0.0.0.0:*                   LISTEN      6843/memcached      
tcp        0      0 0.0.0.0:80                  0.0.0.0:*                   LISTEN      15320/nginx         
tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN      5089/sshd           
tcp        0      0 127.0.0.1:25                0.0.0.0:*                   LISTEN      962/master          
tcp        0      0 127.0.0.1:9000              0.0.0.0:*                   LISTEN      6748/php-fpm        
tcp        0      0 :::11211                    :::*                        LISTEN      6843/memcached      
tcp        0      0 :::22                       :::*                        LISTEN      5089/sshd           
tcp        0      0 ::1:25                      :::*                        LISTEN      962/master          
tcp        0      0 :::3306                     :::*                        LISTEN      31925/mysqld        
  • 7.浏览器查看
    企业级运维——使用OpenResty实现LNMP架构的缓存前移
    至此,结合OpenResty的缓存前移已经做好了,我们来总结分析一下。

分析

我们这里主要干了一件事,就是在OpenResty的nginx配置文件中,指定了upstream memcache,这也是我们使用OpenResty的原因,因为它集成了memcache等模块,我们可以清晰的从其配置文件中理解,所有的请求,会经由本地memcache的11211端口,而且

location ~ \.php$ {
           set $key $uri$args;
           srcache_fetch GET /memc $key;
           srcache_store PUT /memc $key;

这里指定了所有访问.php结尾的页面,会从 /memc 中取,没有的话就存进去。所以,我们相当于让memcache前移到Nginx接受请求的位置。

压力测试

我们再次在真实主机上测试:

ab -c 10 -n 2000 http://172.25.66.1/index.php
ab -c 10 -n 2000 http://172.25.66.1/example.php

可以发现,两个页面的响应时间和正确率都有质的提高。而有两级的memcache的example.php页面速度更快了。

企业级运维——使用OpenResty实现LNMP架构的缓存前移
企业级运维——使用OpenResty实现LNMP架构的缓存前移

上一篇:IBM Cloud CDN - 流媒体加速(拉流场景)实战


下一篇:openresty用haproxy2.0实现负载均衡