《结合Ngxlua运用Nginx预加载热点数据.ppt》由会员分享,可在线阅读,更多相关《结合Ngxlua运用Nginx预加载热点数据.ppt(28页珍藏版)》请在三一办公上搜索。
1、运用Nginx预加载热点数据,产品开发部 李文祥2012年2月,一、Nginx介绍,世界第二大网络服务器,一、Nginx介绍,超高速、高可扩展的、很可靠每台服务器支持100000+并行连接最低,内存占用7层加速和缓存安全高效的灵活并且逻辑清晰,一、Nginx介绍,如:淘宝的工程师清无(王晓哲)和春来(章亦春)所开发的 nginx_lua_module,而春来所开发的ngx_openresty更是通过集成20多个组件,将Nginx本身变成了一个完全的应用开发平台,大量的第三方扩展模块令Nginx越来越强大,一、Nginx介绍,配置文件基本结构,一、Nginx介绍,Nginx模块工作原理,二、预备
2、知识,Nginx的lua模块安装方法(4个步骤)安装LuaJIT 2.0 or Lua 5.1(Lua 5.2 暂不支持).下载ngx_devel_kit(NDK)模块下载最新版本的lua模块下载最新版本的Nginx代码安装源代码下载地址及编译命令详见官方wiki:http:/wiki.nginx.org/HttpLuaModule#Installation,二、预备知识,(一)Nginx配置中变量定义:Nginx配置文件的server或loction 配置段 set$varnamehello;,二、预备知识,(二)加载程序配置传递给PHP环境变量:1.在location中直接定义locati
3、on.*.(php|php5)?$fastcgi_pass 127.0.0.1:9000;fastcgi_index index.php;include fcgi.conf;fastcgi_param route“default”:“m”:“sns”,“c”:“index”,“a”:“init”;PHP调用方法:getenv(route);或者$_SERVERroute;/不推荐json_decode(getenv(route),true);,二、预备知识,(二)加载程序配置传递给PHP环境变量:2.在location中通过include指令引用外部文件/home/wwwroot/config
4、s/下的配置文件:文件/home/wwwroot/configs/cat route.fps 的内容:rootlocalhost configs#cat route.fps#Fastcgi Route Params#php example getenv(route);fastcgi_param route“default”:“m”:“sns”,“c”:“index”,“a”:“init”;,二、预备知识,(二)加载程序配置传递给PHP环境变量:2.在location中通过include指令引用外部文件location.*.(php|php5)?$fastcgi_pass 127.0.0.1:9
5、000;fastcgi_index index.php;include fcgi.conf;include/home/wwwroot/configs/*.fps;,二、预备知识,(三)用到的几个Nginx模块:,Nginx,HTTP Standard Modulememcached,3rth Part Modulelua echo rds-json,二、预备知识,(三)用到的几个Nginx模块:1.Nginx Memcached 模块 从缓存中读取citylist数据:set$memcached_key citylist“;memcached_pass 127.0.0.1:11211;,二、预
6、备知识,Location/mem default_type text/html;set$memcached_key“citylist”;memcached_pass 127.0.0.1:11211;,二、预备知识,(三)用到的几个Nginx模块:2.Nginx Lua模块location/lua set$n 5;set_by_lua$var1 local a=1 local b=2 ngx.var.n=a+return ngx.var.n+b;set_by_lua_flie$var2/home/www/lua/concat.lua;,二、预备知识,(三)用到的几个Nginx模块:3.Nginx
7、 echo模块location/echo default_type text/html;set$var“Hello Word”;echo$var;4.Nginx rds-json 模块Location/mem set$memcached_key“citylist”;memcached_pass 10.8.9.237:11212;rds_json on;error_page 404/error.html;,三、缓存架构策划改进,传统架构,Client,Nginx,Php-fpm,PHP,Cache Server(Memcached、TT),读写,三、缓存架构策划改进,架构演进,Client,Ng
8、inx,Php-fpm,PHP,Cache Server(Memcached、TT),读取,写入,三、缓存策划改进,运用Nginx HTTP标准模块 Memcached模块可以Memcached协议连接到Memcached服务器Tokyo Tyrant 也拥有Memcached兼容协议,三、缓存策划改进,这就意味着Nginx可以使用同样的方法调用Memcached和TT,三、缓存策划改进,将memcached/TT 中的数据缓存到Nginx中:http lua_shared_dict mcity 10m;location/ttserver internal;set$memcahced_key$
9、arg_key;memcached_pass 10.8.9.237:11212;,三、缓存策划改进,#写入nginx缓存location/set allow 192.168.1.0/32;deny all;content_by_lua local mcity=local list=ngx.location.capture(/ttserver“,args=key=“citylist”)mcity:set(“citylist,list.body);,#读取缓存并赋值location.*.(php|php5)?$set_by_lua$citylist local mcity=return mcity
10、:get(“citylist);fastcgi_param citylist$citylist;include/home/wwwroot/configs/*.fps;,获取缓存并赋值给fastcgi参数,加载portal所需的database、cache、interface、route等配置参数,三、缓存策划改进,PHP脚本:?php$cache=json_decode(getenv(cache),true);$database=json_decode(getenv(database),true);$interface=json_decode(getenv(interface),true);$
11、route=json_decode(getenv(route),true);$system=json_decode(getenv(system),true);$citylist=json_decode(getenv(citylist),true);,四、10万次读取性能对比,性能测试方法(这里测试的不是并发):分别用Ngx_lua和PHP的方法读取热点数据:citylist在Nginx的日志中记录请求处理时间,分别测10次取平均值,四、10万次读取性能对比,测试场景A:标准Nginx FastCGI配置 PHP读取memcached数据,Client,Nginx,Php-fpm,PHP,Cache Server(Memcached、TT),读写,四、10万次读取性能对比,测试场景B:运用ngx_lua模块特性在Nginx配置中读取并传递给PHP,Client,Nginx,Php-fpm,PHP,Cache Server(Memcached、TT),读取,四、性能对比,约267倍,THE END,