先看结构:
+------------------------------------------------------+
| OpenResty |
| +-----------------------------------------------+ |
| | Nginx Core | |
| | event loop / worker / upstream / phases | |
| +-----------------------------------------------+ |
| | lua-nginx-module | |
| | *_by_lua / ngx API / cosocket / subrequest | |
| +-----------------------------------------------+ |
| | LuaJIT | |
| | JIT / coroutine / FFI / lightweight runtime | |
| +-----------------------------------------------+ |
| | lua-resty-* libraries | |
| | redis / mysql / http / dns / lock / limit | |
| +-----------------------------------------------+ |
+------------------------------------------------------+很多人第一眼会误判成:
OpenResty = Nginx + Lua这句话只对了一半。更准确地说:
OpenResty = Nginx 事件模型 + LuaJIT 运行时 + ngx_lua 执行插槽 + 一批非阻塞库这里最关键的是“事件模型”和“非阻塞”。
因为 OpenResty 强的不是“能写脚本”,而是“在 Nginx 的高并发调度里写脚本”。