ngx_lua
模块将 Lua 整合在 NginX 中,使用 Lua coroutine per request 机制实现无缝的 I/O 复用处理。受益于 Lua 解释器的极低开销和原生 coroutine 支持,用户代码仍然能以习惯的顺序方式编写,丝毫不会感受到 NginX I/O 复用结构的存在,同时又能享受到其天然的非阻塞大并发能力和非凡的速度。借助 agentzh 在 ngx_echo
模块上的积累支持 subrequest 机制后,ngx_lua 能够整合各类 NginX 模块的功能,成为真正意义上的 Web 粘合层。
ngx_lua 基本实现原理:
- 缓存用户代码,解析配置文件时即载入用户Lua代码,将其包装为 closure factory 缓存在NginX内,以便创建供每个 coroutine 使用的 Lua closure;
- one coroutine per request,基于 closure factory 实现 coroutine 之间完全隔离 globals table,HTTP request 处理过程放在一个新创建的 Lua coroutine 内,处理结束或出错时结束该 coroutine,释放处理过程中消耗的所有资源;
- NginX 相关操作以 API 形式注入 Lua main thread 的 globals table,各个 coroutine 的 globals table 继承 自 main thread,节约了重新初始化 coroutine globals table 的开销;
- 调用注入的 NginX API 时,若涉及 I/O 则直接 yield 中断当前 coroutine,并调用 NginX 内的 subrequest 接口生成新的内部请求交给 NginX 处理,待其处理完毕后靠 NginX 事件系统重新 resume 被中断的 coroutine 继续运行用户代码。
在使用标准 Lua 5.1.4 的情况下,ngx_lua 可轻松达到上万QPS的吞吐量。对于涉及复杂运算的 Lua 代码,可以让 ngx_lua 使用 LuaJIT 而非标准 Lua 来实现性能上的极大提升。
后续 ngx_lua 将会得到持续的开发改进,力图成为好用、灵活、高效的 NginX 脚本引擎,请大家拭目以待!
分享到:
相关推荐
ngx_lua 作者所写,揭示ngx_lua核心技术和开发案列。
ngx_lua 是一个 NGINX 的第三方扩展模块,它能够将 Lua 代码嵌入到 NGINX 中来执行。UPYUN 的 CDN 大量使用了 NGINX 作为反向代理服务器,并开发了一系列例如流量统计、缓存调度、防盗链等相关的 C 模块,但从 2013 ...
nginx lua module for windows 详细请访问 http://blog.csdn.net/ngwsx/
ngx_lua
lua-upstream-nginx-module, Nginx C 模块将Lua向ngx_lua公开,用于 Nginx upstreams 电子邮件名称ngx_http_lua_upstream - Nginx MODULE,用于向 Nginx upstreams公开Lua到 ngx_lua目录NAME状态概要说明函数get_...
lua-resty-websocket, 对ngx_lua模块( 和 OpenResty )的web socket支持 电子邮件名称lua-resty-websocket - ngx_lua模块的Lua web socket实现 table-内容名称状态描述概要说明模块resty.websocket.server方法新插件...
Centos 7 64 +[nginx+ngx_lua 模块] 支持WAF防护功能 可以作为喔
Using ngx_lua in UPYUN 2.pdf
上段时间使用ngx_lua效果还真不错 lua这门语言让人耳目一新,跟一般的脚本语言如php,perl不同,lua被称为一种嵌入式的语言,当然lua也可以单独的进行编程,但如果你这么做的话,那么lua只是一片浮云,当然了,lua...
WEB应用防火墙,利用nginx的组件nginx_lua的组件,利用Lua语言开发的一个防火墙,简单
lua_use_default_type lua_code_cache lua_regex_cache_max_entries header_filter_by_lua ngx.headers_sent
lua-resty-test, 在Openresty上,基于ngx_lua的测试框架 电子邮件名称基于Openresty的lua-resty-test Ngx_lua测试框架#Description 这里Lua库是测试ngx_lua源或者它的他服务器( tcp或者 udp )的测试框架:...
NULL 博文链接:https://cywhoyi.iteye.com/blog/2118913
描述这个Lua库是ngx_lua nginx模块的Redis客户端驱动程序: 这个Lua库利用了ngx_lua的cosocket API,可确保100%的非阻塞行为。 请注意,至少需要或 。概要 # you do not need the following line if you are using ...
lua-resty-consul, 库与ngx_lua中的consul接口的接口 lua-resty-consul库与ngx_lua中的consul接口的接口目录概述依赖项方法新插件 。get_decodedget_json_decoded把了删除get_client_body_reader
ngx_lua_php_queue, nginx lua php redis实现单业务排队系统架构
Bypass ngx_lua_waf SQL注入防御(多姿势).pdf
Using ngx_lua in UPYUN 2