知识卡片

OpenResty的核心价值:用同步代码风格写出非阻塞I/O,大幅降低高性能服务端开发门槛

普通读书笔记卡

内容

高性能服务端开发长期面临一个两难:要么用Python/PHP这类语言快速开发,但很多语言本身缺乏非阻塞I/O能力和配套生态,性能天花板低;要么直接写Nginx C模块获得极致性能,但C模块的开发门槛极高,需要经验丰富的工程师投入大量时间,普通开发者很难驾驭。OpenResty的解法是把Lua语言嵌入Nginx内部,对外提供完整的Lua Web开发API,透明地支持非阻塞I/O,同时提供”轻量级线程”、定时器等高级抽象——它最关键的价值在于让开发者可以用完全同步风格的代码逻辑,写出底层实际上是非阻塞调用的程序,不需要开发者显式处理回调或异步关键字。这一点被反复强调的原因是:程序员也是人,同步的代码逻辑更符合人类思维习惯,显式的回调和异步语法会打断编程时的思路、也会给调试带来额外困难——真实案例对比很能说明这个差距:某公司之前用Nginx C模块加自研KV数据库实现全部业务逻辑,能扛住每天近百亿次查询、只用10台服务器,但这个方案是两三个十几年经验的资深工程师做了一年多才稳定下来的,普通开发者根本无法企及;而OpenResty出现后,新手经过一两个月学习,做出来的API性能就能达到Nginx C模块的水平,代码量大幅减少,调试也更方便。这个案例揭示了一条技术选型的重要原则:一项技术真正的价值有时不在于它把性能上限推到多高,而在于它能不能把某种原本只有极少数专家才能驾驭的能力,下放给普通开发者也能可靠地使用。

参考来源

- 位置:《高可用架构(第1卷)》第2章《高可用架构原理与分布式实践》"2.11 OpenResty的现在和未来"节,"2.11.1 OpenResty是什么,适合什么场景下使用"及"2.11.2 某安全公司服务端技术选型的标准"(源文件:_epub-src/OEBPS/Text/Chapter2_11_2.xhtml、Chapter2_11_3.xhtml) - 结论依据:原文说明"该模块将Lua语言嵌入到Nginx服务器中……透明地支持非阻塞I/O",以及"OpenResty 明显的好处是可以用同步的代码逻辑实现非阻塞的调用……新手经过一两个月的学习,做出来的API就可以达到Nginx C模块的性能,而且代码量大大减少",共同支撑本卡片结论。 - 原始内容:该模块将Lua语言嵌入到Nginx服务器中,并对外提供一套完整LuaWeb应用开发API,透明地支持非阻塞I/O……OpenResty 明显的好处是可以用同步的代码逻辑实现非阻塞的调用……新手经过一两个月的学习,做出来的API就可以达到Nginx C模块的性能。