知识卡片

表面相似的技术未必构成替代关系:以NginScript与OpenResty为例

普通读书笔记卡

内容

NginScript把JavaScript VM嵌入Nginx来提供配置能力,思路上和OpenResty把Lua嵌入Nginx高度相似,两者的Hello World示例看上去也几乎一样,很容易让人觉得NginScript是要替代OpenResty的竞品。但仔细审视两者的定位和能力就会发现,这种”表面相似”是误导性的:NginScript按Nginx官方的说法,目标只是提供一种更方便配置Nginx的方式,只支持JavaScript语言很小的一个子集,用解释器执行导致计算密集型代码性能较差,而且没有垃圾回收器(内存只在请求结束时才释放),不适合长时间运行的请求或对象分配密集的场景;而OpenResty早已远超”配置语言”的定位,围绕反向代理和负载均衡之外,还提供了大量面向集群和工业级场景的能力(在线实时更新集群配置、支持上百万虚拟主机各自独立配置、无需reload即可热更新绝大部分配置参数和业务代码),并且正朝着提供领域专用语言、支持多种编程语言子集编译到LuaJIT字节码的方向演进。这个对比给出了一条判断”两项技术是否构成替代关系”的实用标准:不能只看表面的实现手法(都是把某种脚本语言嵌入同一个宿主)或者入门示例的相似度,而要审视两者真正的设计目标和能力边界——手法相似不等于目标相同,目标不同的两项技术,即使初看用法接近,实际能承担的职责和适用场景可能差异巨大,讨论”会不会被替代”之前,首先要确认两者是不是真的在解决同一个问题。

参考来源

- 位置:《高可用架构(第1卷)》第2章《高可用架构原理与分布式实践》"2.11 OpenResty的现在和未来"节,"2.11.6 NginScript是否会替代OpenResty"(源文件:_epub-src/OEBPS/Text/Chapter2_11_7.xhtml) - 结论依据:原文说明"根据Nginx官方的说明,NginScript只是想提供一种更方便配置Nginx的方法……现在OpenResty已经有的功能和计划开发的功能,和Nginx自身的定位还是有很大差异的……所以NginScript和OpenResty相比,目的完全不一样,功能和性能差距就更大,谈不上替换",直接支撑本卡片结论。 - 原始内容:根据Nginx官方的说明,NginScript只是想提供一种更方便配置Nginx的方法……现在OpenResty已经有的功能和计划开发的功能,和Nginx自身的定位还是有很大差异的……所以NginScript和OpenResty相比,目的完全不一样,功能和性能差距就更大,谈不上替换。