基于Nginxlua的高性能web.pptx

基于Nginx/lua的高性能web于连宇2016-07-01议程演示LuaNginx-lua资料演示脚本NginxHello worldRedisMysql与其他HTTP服务连接议程演示LuaNginx-lua资料LualuaJIT语言TableFunctionCoroutineMetatable/metamethod嵌入式Lua执行流程宿主建立lua解释对象宿主提供的api 注入Lua解释器读入lua代码执行编译成二进制则引导执行Lua jit编译成二进制代码location = /lua-version { content_by_lua if jit then ngx.say(jit.version) else ngx.say(_VERSION) end ;}tablehaoel = {name=ChenHao, age=37, handsome=True}for i=1, #arr do?print(arr[i])endfor k, v in pairs(t) do?print(k, v)end函数闭包function myPower(x)?return function(y) return y^x endend多返回值name, age, bGay = haoel, 37, false, haoel@进程、线程、协程coroutine协程coroutine 有4个不同的状态: suspended, running, dead, normal co = coroutine.create(function () for i=1, 10 do print(co:, i) coroutine.yield() end end)coroutine.resume(co)print(coroutine.status(co))继承metatablelocal mytable = {key2 = value2}local ss = {key1 = value1};function ss.hello() print(hello)endsetmetatable(mytable, {__index = ss})metamethod议程演示LuaNginx-lua资料Nginx-luaNginx进程模型Nginx网络模型Ngx-Lua执行阶段Openresty apiNginx进程模型nginx采用多进程,单Master多WorkerMaster处理外部信号,配置文件以及worker的初始化worker进程采用单线程,非阻塞(epoll)来处理客户端请求和响应Nginx网络模型同步异步阻塞非阻塞Ngx-lua原理Nginx work process共享一个lua vmIO原语直接注入lua vm每个请求开一个coroutine协程,协程数据隔离未就绪、阻塞时,挂起;完成后,还原上下文运行ngx_lua实现Proactor模型 – 业务逻辑以自然逻辑书写 – 自动获得高并发能力 – 不会因I/O阻塞等待而浪费CPU资源Ngx-lua执行阶段set_by_lua / set_by_lua_fileaccess_by_lua / access_by_lua_filerewrite_by_lua / rewrite_by_lua_filecontent_by_lua / content_by_lua_file其他lua_code_cache off;ngx.redirect/ngx.exec/ngx.captureAPI调用,取值Nginx的IO操作必须是非阻塞的,如果Nginx在那阻着,则会大大降低Nginx的性能。所以在Lua中必须通过ngx.location.capture发出子请求将这些IO操作委托给Nginx的事件模型CosocketsFile io性能参考资料章亦春:由Lua粘合的Nginx生态环境温铭:Openresty最佳实践叔度:淘宝网Nginx应用、定制与开发实战陈于喆:lua ngx_lua 的介绍与应用陈皓:Lua简明教程/maijian/article/detailsinclude lua.h#include lualib.h#include lauxlib.hchar *code = for i=0, 5 do print(\hello, world!\) end;int main(){ lua_state *s = luaL_newstate(); luaL_openlibs(s); luaL_dostring(s, code); lua_close(s); return 0;}2:90/lua-versiontime lua testtime.luatime luajit testtime.lua

文档评论(0)

1亿VIP精品文档

相关文档