一.OpenResty简介

OpenResty官网    http://openresty.org/cn/
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 等都进行一致的高性能响应

二.OpenResty的技术

Nginx: 一个免费的、开源的、高性能的 HTTP 服务器和反向代理,也是一个电子邮件(IMAP/POP3/SMTP)代理服务器。有关Nginx的介绍,可以查看这篇《Nginx架构原理科普》。
Lua: 一种轻量、小巧、可移植、快速的脚本语言;LuaJIT即时编译器会将频繁执行的Lua代码编译成本地机器码交给CPU直接执行,执行效率更高,OpenResty会默认启用LuaJIT。

三.OpenResty的优势

首先我们选择使用OpenResty,是由Nginx核心加很多第三方模块组成,其最大的亮点是默认集成了Lua开发环境,使得Nginx可以作为一个Web Server使用。

借助于Nginx的事件驱动模型和非阻塞IO,可以实现高性能的Web应用程序。

而且OpenResty提供了大量组件如Mysql、Redis、Memcached等等,使在Nginx上开发Web应用更方便更简单。目前在京东如实时价格、秒杀、动态服务、单品页、列表页等都在使用Nginx+Lua架构,其他公司如淘宝、去哪儿网等。

四、使用openresty构建srcache-nginx模块缓存机制

nginx中可以将lua嵌入,让nginx执行lua脚本,可以处理高并发,非阻塞的处理各种请求,openresty项目中可以使用nignx可以直接构建 srcache+nginx 缓存,而不用通过动态语言来处理。

以下为srcache+nginx的工作流程图:

传统缓存策略:

高效缓存策略:

即将memcache缓存前置,放到nginx上去,添加到nginx的生命周期里。

安装openresty,就不需要重新编译nginx添加模块。

#软件下载: https://openresty.org/cn/
#软件安装:
wget https://openresty.org/package/rhel/openresty.repo
tar zxf openresty-1.19.9.1.tar.gz
cd openresty-1.19.9.1/
./configure
make && make installyum install -y openresty
#软件配置:
cd /usr/local/openresty/nginx/conf
vim nginx.confupstream memcache {server 127.0.0.1:11211;keepalive 512;      //保持512个不立即关闭的连接用于提升性能}

下载并解开openresty包:

直接进行编译,使用默认路径和默认添加模块:

编译成功后,由于nginx和openresty都默认监听80端口,所以在开启openresty之前先把nginx服务停掉:

此时进入openresty的nginx配置文件,编辑nginx.conf使之和之前配置的nginx一样(重点修改php部分):

主要修改以下两个地方:

使用绝对路径启动nginx:

将原来的两个memcache相关的.php文件拷贝到openresty下的发布目录html里:

此时在外部使用ab压测: ab -c10 -n5000 http://172.25.254.1/example.php

提高并发量:(提升nginx效率)

在openresty下的nginx中添加缓存:

#首先定义一个负载均衡器
upstream memcache {server 127.0.0.1:11211;keepalive 512;        //保持512个不立即关闭的连接用于提升性能}location /memc {internal;            //表示只接受内部访问memc_connect_timeout 100ms;memc_send_timeout 100ms;memc_read_timeout 100ms;set $memc_key $query_string;  //使用内置的$query_string来作为keyset $memc_exptime 300;        //表示缓存失效时间memc_pass memcache;}location ~ \.php$ {set $key $uri$args;                srcache_fetch GET /memc $key;   // %先在memcache中找,如果有则直接返回,如果没有再通过fastcgi去后端找srcache_store PUT /memc $key;   //将在后端找到的值存储到memcache中,下次再请求的时候可以直接返回root           html;fastcgi_pass   127.0.0.1:9000;fastcgi_index  index.php;#fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;include        fastcgi.conf;}

此时再执行压测ab -c10 -n5000 http://172.25.254.1/example.php:

此种情况下就根本没有让php的9000端口处理,而是直接走的nginx缓存。

我们再尝试index.php:

可以发现依然没有报错且速度很快:

lnmp架构之使用openresty构建memc+srcache相关推荐

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

    前言 我们都知道Nginx有很多的特性和好处,但是在Nginx上开发成了一个难题,Nginx模块需要用C开发,而且必须符合一系列复杂的规则,最重要的用C开发模块必须要熟悉Nginx的源代码,使得开发者 ...

  2. linux 源码搭建lnmp_Linux精华篇—CentOS 7.4下源码编译构建LNMP架构

    CentOS 7.4搭建LNMP 最新版本LNMP:Linux7.4.ngnix1.13.9.mysql5.7.20.php7.1.10 目录: 第一部分 准备工作 第二部分 安装nginx服务 第三 ...

  3. linux编译框架的搭建,Linux精华篇—CentOS 7.4下源码编译构建LNMP架构

    CentOS 7.4搭建LNMP 最新版本LNMP:Linux7.4.ngnix1.13.9.mysql5.7.20.php7.1.10 目录: 第一部分 准备工作 第二部分 安装nginx服务 第三 ...

  4. LNMP架构环境搭建之PHP、Nginx源码编译安装及其简单配置应用

    LNMP架构中的Mysql见上一篇博文"LNMP架构环境搭建之mysql源码编译安装" 一.PHP简介 PHP(外文名:PHP: Hypertext Preprocessor,中文 ...

  5. lnmp架构之mysql部署

    在前面的操作中(之前的文章),我们已经手动配置好了nginx的负载均衡服务器,后端配置有两个RS:在nginx调度服务器上使用php源码编译安装了php,使用nginx发布了php页面,同时为了减轻数 ...

  6. 12.1 LNMP架构介绍;12.2 MySQL安装;12.3-2.4 PHP安装(上下);12.5

    扩展: Nginx为什么比Apache Httpd高效:原理篇 http://www.toxingwang.com/linux-unix/linux-basic/1712.html apache和ng ...

  7. LNMP架构之环境搭建

    2019独角兽企业重金招聘Python工程师标准>>> 本文索引: LAMP架构介绍 Mysql的安装 PHP的安装 Nginx介绍 Nginx的安装 LNMP架构介绍 LNMP = ...

  8. 12.1 LNMP架构介绍 12.2 MySQL安装 12.3/12.4 PHP安装 12.5 Nginx介绍

    2019独角兽企业重金招聘Python工程师标准>>>  12.1 LNMP架构介绍 和LAMP不同的是,提供web服务的是Nginx 并且php是作为一个独立服务存在的,这个服务叫 ...

  9. 12.1 LNMP架构介绍 12.2 MySQL安装 12.3/12.4 PHP安装 12.5 Ng

    12.1 LNMP架构介绍 12.2 MySQL安装 12.3/12.4 PHP安装 在执行make && make install之前,先做 useradd -s /sbin/nol ...

最新文章

  1. 优化你的CPU来做深度学习
  2. python语句块标记_Python简单语句
  3. java数组的四个要素_Java零基础系列教程04Java数组
  4. 轻松学习 Flex 布局的小游戏
  5. Mybatis Generator 自动生成数据库XML(Mybatis Generator 逆向工程)
  6. 前端 vue antdv table导出execl
  7. 设计模式——代理模式(思维导图)
  8. 剖析:计算机专业大一学生如何学习C语言?如何自学C语言?大学C语言学习视频教程谁有?
  9. 高德纳(Donald Knuth)语录
  10. onlyoffice开发java,利用 ONLYOFFICE 将在线文档编辑器集成到 Python Web 应用程序中
  11. The Apache Tomcat Native library which allows using OpenSSL was not found on the java.library.path
  12. 如何从一个XtraBackup完整备份中恢复一个InnoDB表
  13. 阿里达摩院获KDD 2022最佳论文,国内企业首次获奖
  14. 利用python画梯形图案例
  15. 学计算机近视度数加深,导致近视加深的八大原因
  16. 计算机勾兑双绝是谁发明,白酒行业最早何时实行白酒勾兑的?白酒勾兑的偏见又源于何时?...
  17. ffmpeg实战教程(十)ffmpeg/camera实现最近很火的视频壁纸,相机壁纸
  18. 程序与进程、进程管理、前台与后台进程
  19. oracle 一行变多行
  20. 建荣AX3298作为航拍启动流程

热门文章

  1. 基于收敛加密的文件所有权证明协议——毛峥
  2. framework初始化错误,面试大厂应该注意哪些问题?隔壁都馋哭了
  3. android 调用系统图库剪切图片出现黑屏闪退
  4. Vue项目小米购物车
  5. 黑马程序员 — JAVA基础 — 内部类、异常
  6. 安装Linux出现致命错误,安装liunx出现致命错误,为什么,如何解决?
  7. 招生1400名!这所985高校发布2023年博士研究生招生简章!
  8. python面试 --基础题
  9. mysql取当天0点0分下一天0点0分_SQL获取当天0点0分0秒和23点59分59秒方法
  10. DOCSIS 3.1 MMM--3.MAP