它的核心是基于 NGINX 的一个 C 模块(lua-nginx-module),该模块将 LuaJIT 嵌入到 NGINX 服务器中,并对外提供一套完整的 Lua API,透明地支持非阻塞 I/O,提供了轻量级线程、定时器等高级抽象。同时,围绕这个模块,OpenResty 构建了一套完备的测试框架、调试技术以及由 Lua 实现的周边功能库。
可以使用 Lua 语言来进行字符串和数值运算、查询数据库、发送 HTTP 请求、执行定时任务、调用外部命令等,还可以用 FFI 的方式调用外部 C 函数。
- 同步非阻塞的编程模式;
- 不同阶段的作用;
- LuaJIT 和 Lua 的不同之处;
- OpenResty API 和周边库;
- 协程和 cosocket;
- 单元测试框架和性能测试工具;
- 火焰图和周边工具链;
- 性能优化。
因为文章过长,不利于阅读,按照内容拆分成了多篇,本文是导航目录。
-
介绍了 OpenResty 的安装,hello world,如何组织项目。
也简单分析了 OpenResty 项目的组织结构和包管理工具。
并补充了一些学习 OpenResty 必要的 Nginx、Lua 知识。
-
介绍了 LuaJIT 和 Lua 的关系,进一步补充了 Lua 和其它语言不同的语法等。
重点介绍了
lua-resty-core
中 FFI 相关的用法和注意事项重点介绍 LuaJIT 中 table、metatable 用法,以及 Lua 独有的一些概念和坑
-
OpenResty 学习笔记(4) - OpenResty 原理和 API
介绍了OpenResty 的架构和执行阶段,如何使用通过文档去正确使用 API,并分门别类的介绍了 OpenResty 中的常用 API
-
OpenResty 学习笔记(5) - shared dict、cosocket、特权进程
介绍了 OpenResty 中的几个重要概念和库
- worker 间共享内存工具 shared dict
- 高性能非阻塞连接外部服务库 cosocket
- 特权进程和定时任务
并通过实现一个 Memcached Server 来应用和巩固
-
介绍了 OpenResty 专用测试工具
test::nginx
的常见使用方式学习了如何对 OpenResty 项目进行性能测试,如何分析测试结果。
-
介绍了 OpenResty 的常见性能优化技巧(替换阻塞函数,绕过磁盘 I/O,table 优化,字符串优化,处理缓存风暴、突发流量,限流器的使用)
并梳理了一份 OpenResty 的编码指南
-
介绍了常用的动态调试工具 Systemtap、火焰图
梳理了 OpenResty 如何应用其动态性
并大致梳理了一个网关核心功能的设计和实现(参考 Apisix)