LNMP架构——OpenResty实现缓存前移(到达Nginx前端层面)

news/2025/2/26 7:11:42

前言

我们都知道Nginx有很多的特性和好处,但是在Nginx上开发成了一个难题,Nginx模块需要用C开发,而且必须符合一系列复杂的规则,最重要的用C开发模块必须要熟悉Nginx的源代码,使得开发者对其望而生畏。为了开发人员方便,所以接下来我们要介绍一种整合了Nginx和lua的框架,那就是OpenResty,它帮我们实现了可以用lua的规范开发,实现各种业务,并且帮我们弄清楚各个模块的编译顺序。关OpenResty,我想大家应该不再陌生,随着系统架构的不断升级、优化,OpenResty在被广泛的应用。

1.什么是openresty?(和nginx很像)

通过 Lua 扩展 NGINX 实现的可伸缩的 Web 平台

OpenResty® 是一个基于 Nginx 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项。
用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服务和动态网关。
OpenResty® 通过汇聚各种设计精良的 Nginx 模块(主要由 OpenResty 团队自主开发),从而将 Nginx 有效地变成一个强大的通用 Web 应用平台。这样,Web 开发人员和系统工程师可以使用 Lua 脚本语言调动 Nginx 支持的各种 C 以及 Lua 模块,快速构造出足以胜任 10K 乃至 1000K 以上单机并发连接的高性能 Web 应用系统。
OpenResty® 的目标是让你的Web服务直接跑在 Nginx 服务内部,充分利用 Nginx 的非阻塞 I/O 模型,不仅仅对 HTTP 客户端请求,甚至于对远程后端诸如 MySQL、PostgreSQL、Memcached 以及 Redis 等都进行一致的高性能响应。

2.OpenResty运行原理

Nginx 采用的是 master-worker 模型,一个 master 进程管理多个 worker 进程,基本的事件处理都是放在 woker 中
master 负责一些全局初始化,以及对 worker 的管理
在OpenResty中,每个 woker 使用一个 LuaVM,当请求被分配到 woker 时,将在这个 LuaVM 里创建一个 coroutine(协程)
协程之间数据隔离,每个协程具有独立的全局变量_G

协程和多线程下的线程类似:有自己的堆栈,自己的局部变量,有自己的指令指针,但是和其他协程程序共享全局变量等信息。线程和协程的主要不同在于:多处理器的情况下,概念上来说多线程是同时运行多个线程,而协程是通过代码来完成协程的切换,任何时刻只有一个协程程序在运行。并且这个在运行的协程只有明确被要求挂起时才会被挂起。

3.OpenResty的优势

OpenResty 的目标是让你的Web服务直接跑在 Nginx 服务内部,充分利用 Nginx 的非阻塞 I/O 模型
不仅仅对 HTTP 客户端请求,甚至于对远程后端诸如 MySQL、PostgreSQL、Memcached 以及 Redis 等都进行一致的高性能响应
首先我们选择使用OpenResty,其是由Nginx核心加很多第三方模块组成
其最大的亮点是默认集成了Lua开发环境,使得Nginx可以作为一个Web Server使用
借助于Nginx的事件驱动模型和非阻塞IO,可以实现高性能的Web应用程序。
而且OpenResty提供了大量组件如Mysql、Redis、Memcached等等,使在Nginx上开发Web应用更方便更简单
目前在京东如实时价格、秒杀、动态服务、单品页、列表页等都在使用Nginx+Lua架构,其他公司如淘宝、去哪儿网等

4.实验环境

下文配置时用到的部分相关资源在前面LNMP架构系列博客中都有介绍,这里不再细说
实验就是在前面的基础上实现的

5.现在给nginx加上缓存(使用openresty来做这个实验)

  • (1)关闭之前配置的nginx服务
nginx -s stop关闭nginx服务,因为openresty是一个类似于nginx的服务

在这里插入图片描述

  • (2)从真机给虚拟机传一个openresty的包
    在这里插入图片描述
  • (3)查看openresty安装包,解压
ls查看包
tar zxf openresty-1.13.6.1.tar.gz解压 
ls
cd openresty-1.13.6.1进入解压目录

在这里插入图片描述

  • (4)./configure 编译
    在这里插入图片描述
    编译完成后会提示安装时用gmake
  • (5)gmake && gmake install安装
    在这里插入图片描述
    • (6)拷贝文件
cd memcache-2.2.5/进入缓存的服务的目录
cp memcache.php example.php /usr/local/openresty/nginx/html/把这两个文件拷贝到openresty的默认发布目录

在这里插入图片描述

  • (7)编辑openresty的配置文件
cd /usr/local/openresty/nginx/conf/
ls

在这里插入图片描述
修改内容如下:

17  http {
18         upstream memcache {
19         server localhost:11211;
20         keepalive 512;
21         }
22 
23     include       mime.types;
24     default_type  application/octet-stream;

69         location /memc {
70                 internal;
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;
81             srcache_fetch GET /memc $key;
82             srcache_store PUT /memc $key;
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         }

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • (8)检查没有语法错误之后开启服务,查看端口号
vim nginx.conf编辑openresty的配置文件
/usr/local/openresty/nginx/sbin/nginx -t检测语法
/usr/local/openresty/nginx/sbin/nginx 启动服务
ps ax查看进程

在这里插入图片描述
测试:172.25.12.1/memcache.php 失败,因为没有改密码
在这里插入图片描述

vim memcache.php因为当前openresty服务下的配置文件没有改 
cp /usr/local/lnmp/nginx/html/memcache.php .重新复制一份之前改过的或者直接修改都可以

在这里插入图片描述
在这里插入图片描述

  • (9)测试:浏览器访问成功
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • (10)模拟5000请求量测试命中率和访问时间
    发现访问index.php也没有失败,而且两个的访问时间都比memcache短
    在这里插入图片描述
    在这里插入图片描述
    加上nginx缓存之后,index.php和example.php都比之前更快了

http://www.niftyadmin.cn/n/2928385.html

相关文章

在linux上面合并多个windows文件乱码的问题

在linux上面单独打开每个被合并txt文件都是正确显示的。但是cat *.txt > 1.txt 打开就是乱码。 原因是1.txt虽然是utf-8编码,但是显示是用latin1显示的。解决办法: iconv -f utf-8 -t utf-8 1.txt > 2.txt 就好了。 另外,文件里面如果…

LNMP架构——nginx+jsp+tomcat完成客户端的动态请求

首先,我先给大家画一张图,来理一下lnmp架构工作的整个过程 上一个实验其实我们通过php请求的是nginx服务器上的资源,还是静态资源 现在我们想实现动态获取,利用jsp动态获取tomcat服务器上面的资源 1.什么是tomcat? …

lnmp——nginx+tomcat动态实现的tomcat服务器之间负载均衡

之前我们已经实现了客户端访问nginx服务器的时候,通过jsp动态获取tomcat服务器上面的资源 接下来实现nginx做反向代理tomcat做web服务器实现两个web(tomcat1和tomcat2)之间的负载均衡 并且客户端可以在浏览器动态注册信息,web1和w…

有道云笔记最新软件下载官方版

2019独角兽企业重金招聘Python工程师标准>>> 有道笔记是网易有道全新推出的云笔记软件,旨在以云存储技术帮助用户建立一个可以轻松访问、安全存储的云笔记空间,解决个人资料和信息跨平台跨地点的管理问题。有道云笔记目前支持安卓手机版&…

lnmp——nginx+sticky粘制模块实现tomcat负载均衡中的会话保持( nginx会话保持之sticky模块)

接下来再使用粘制位sticky来实现会话保持 1.什么是会话保持(Session Persistence)? 在一段时间内将同一客户的某一类型请求绑定至 同一台服务器上,使得这一时间段中该客户端所有该类型请求均由同一服务器进行处理 让一个用户的访…

LNMP架构之动态缓存(nginx +tomcat+memcache) 实现session共享和会话保持——memcache在tomcat中实现session交叉存放

在上一个实验当中,可以实现会话保持了 当其中一个tomcat服务器坏了,由于nginx负载均衡服务器在tomcat1和tomcat2之间实现了轮询 如果用户1在tomcat1服务器上存储的数据,但是当tomcat1这个服务器挂了 客户就会去访问tomcat2的服务器&#xff0…

利用HAProxy实现——负载均衡,添加日志,访问控制,动静分离,读写分离

haproxy类似nginx、apache 均是7层负载:动静分离,比较智能,可以实现高可用负载均衡支持虚拟主机 和nginx很像,但是haproxy(不可以缓存)和nginx(可以缓存),二者都是httpd的…

Android NDK 开发之菜鸟

为什么80%的码农都做不了架构师?>>> 由于本人最近在帮一个朋友看NDK开发,期间遇到过一些不懂的问题,而在网上又没有找到什么好的解决方案;因此记录下来供参考。 首先呢,我使用的工具是Android Studio 一般…