agentzh
22-01-02 15:08 微博认证:OpenResty Inc 创始人

新年好!前一阵子我基于 2015 年时搞的 sregex 开源正则引擎,实现了全新的 OpenResty Regex 正则引擎。当年绞尽脑汁也没想明白或没实现对的一些优化算法,我最近花了几天就顺利搞定了。比如严格的流式匹配算法(只使用固定缓冲区,即使处理的输入数据流是无限长的)、我们的变种 DFA 的最小化算法、在变种 DFA 上传播 submatch capture 常量值的图迭代算法,还有 SIMD 矢量化优化(同时支持 x86_64 和 arm64),等等。同时也实现了开源 sregex 没有的一些正则特性,比如 (?i) 和 (?-i) 这样的语法。

使用全新的 OpenResty Regex 正则引擎,ngx_replace_filter 模块通过严格流式替换方式,去除 100KB 的真实世界的 C 代码里所有注释的测试用例,qps 性能提升了 30 多倍。单 CPU 核的 qps 从 500 多 r/s 提升到了 17000 多 r/s。内存使用量也有了成倍的缩减。优化过程自然离不开 OpenResty XRay 生成的 CPU 火焰图的指导。看图说话就可以实现优化无止境!

我们近期会把 OpenResty Regex 集成进 OpenResty Edge 和 OpenResty Plus 产品。我们已经把 OpenResty Regex 应用到了 OpenResty XRay 产品中的 eBPF 动态追踪工具链了。可以在内核空间运行的 eBPF 程序里使用 Perl 兼容的正则表达式是非常爽的事情,同时也能确保严格线性的时间复杂度和常量的空间复杂度。

理论研究的力量就在于优美高效地解决非常棘手的工程问题。