lnmp架构之使用openresty构建memc+srcache
一.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相关推荐
- LNMP架构——OpenResty实现缓存前移(到达Nginx前端层面)
前言 我们都知道Nginx有很多的特性和好处,但是在Nginx上开发成了一个难题,Nginx模块需要用C开发,而且必须符合一系列复杂的规则,最重要的用C开发模块必须要熟悉Nginx的源代码,使得开发者 ...
- linux 源码搭建lnmp_Linux精华篇—CentOS 7.4下源码编译构建LNMP架构
CentOS 7.4搭建LNMP 最新版本LNMP:Linux7.4.ngnix1.13.9.mysql5.7.20.php7.1.10 目录: 第一部分 准备工作 第二部分 安装nginx服务 第三 ...
- linux编译框架的搭建,Linux精华篇—CentOS 7.4下源码编译构建LNMP架构
CentOS 7.4搭建LNMP 最新版本LNMP:Linux7.4.ngnix1.13.9.mysql5.7.20.php7.1.10 目录: 第一部分 准备工作 第二部分 安装nginx服务 第三 ...
- LNMP架构环境搭建之PHP、Nginx源码编译安装及其简单配置应用
LNMP架构中的Mysql见上一篇博文"LNMP架构环境搭建之mysql源码编译安装" 一.PHP简介 PHP(外文名:PHP: Hypertext Preprocessor,中文 ...
- lnmp架构之mysql部署
在前面的操作中(之前的文章),我们已经手动配置好了nginx的负载均衡服务器,后端配置有两个RS:在nginx调度服务器上使用php源码编译安装了php,使用nginx发布了php页面,同时为了减轻数 ...
- 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 ...
- LNMP架构之环境搭建
2019独角兽企业重金招聘Python工程师标准>>> 本文索引: LAMP架构介绍 Mysql的安装 PHP的安装 Nginx介绍 Nginx的安装 LNMP架构介绍 LNMP = ...
- 12.1 LNMP架构介绍 12.2 MySQL安装 12.3/12.4 PHP安装 12.5 Nginx介绍
2019独角兽企业重金招聘Python工程师标准>>> 12.1 LNMP架构介绍 和LAMP不同的是,提供web服务的是Nginx 并且php是作为一个独立服务存在的,这个服务叫 ...
- 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 ...
最新文章
- 优化你的CPU来做深度学习
- python语句块标记_Python简单语句
- java数组的四个要素_Java零基础系列教程04Java数组
- 轻松学习 Flex 布局的小游戏
- Mybatis Generator 自动生成数据库XML(Mybatis Generator 逆向工程)
- 前端 vue antdv table导出execl
- 设计模式——代理模式(思维导图)
- 剖析:计算机专业大一学生如何学习C语言?如何自学C语言?大学C语言学习视频教程谁有?
- 高德纳(Donald Knuth)语录
- onlyoffice开发java,利用 ONLYOFFICE 将在线文档编辑器集成到 Python Web 应用程序中
- The Apache Tomcat Native library which allows using OpenSSL was not found on the java.library.path
- 如何从一个XtraBackup完整备份中恢复一个InnoDB表
- 阿里达摩院获KDD 2022最佳论文,国内企业首次获奖
- 利用python画梯形图案例
- 学计算机近视度数加深,导致近视加深的八大原因
- 计算机勾兑双绝是谁发明,白酒行业最早何时实行白酒勾兑的?白酒勾兑的偏见又源于何时?...
- ffmpeg实战教程(十)ffmpeg/camera实现最近很火的视频壁纸,相机壁纸
- 程序与进程、进程管理、前台与后台进程
- oracle 一行变多行
- 建荣AX3298作为航拍启动流程
热门文章
- 基于收敛加密的文件所有权证明协议——毛峥
- framework初始化错误,面试大厂应该注意哪些问题?隔壁都馋哭了
- android 调用系统图库剪切图片出现黑屏闪退
- Vue项目小米购物车
- 黑马程序员 — JAVA基础 — 内部类、异常
- 安装Linux出现致命错误,安装liunx出现致命错误,为什么,如何解决?
- 招生1400名!这所985高校发布2023年博士研究生招生简章!
- python面试 --基础题
- mysql取当天0点0分下一天0点0分_SQL获取当天0点0分0秒和23点59分59秒方法
- DOCSIS 3.1 MMM--3.MAP