的优化,火焰图快速显示闭包的广泛使用导致缓慢,由于它们的花费在LuaJIT里。编译器的修改移除了它们的使用。<??http://www.2cto.com/kf/ware/vc/" target="_blank" class="keylink">vcD4KPC9ibG9ja3F1b3RlPgo8YmxvY2txdW90ZT4KPHA+tNPP4M2stcTQxc+iyfqzybXEwe3Su9bWytPNvM/Uyr7Su7j2uq/K/dbQu6i30aOouvbC1Mv8sb7J7bX308O1xMjOus66r8r9o6m1xNfcyrG85KGj1eLKubXDxNy/7MvZyrax8MjIteO6r8r9oaPU2tXiwO+jrL/J0tS63Mjd0te12L+0tb2jrNX91PKx7bTvyr20psDtus20rsalxeTKx9fusLq587XEstnX96Oo1eKyorK7xua51qOs0vLOqtXivs3Kx1dBRtf2yrLDtKOs1vfSqsrHo6mhozwvcD4KPC9ibG9ja3F1b3RlPgo8cD4gICAgICAgICAgICA8aW1nIHNyYz0="https://www.cppentry.com/upload_files/article/49/1_54vyp__.png" alt="\">
检查这些跟踪信息,我们决定改善LuaJIT开源项目是值得赞助的。
优化WAF最关键的是两件事:可重复的测试数据和工具检查运行的代码。火焰图和lulip的结合意味着通过精确的检查时间花在哪里可以让WAF性能有一个巨大的飞跃。规则编译器的使用意味着优化可以迅速的应用到所有需要的规则上。不用去猜测哪里是慢的:测量它!!
生成的代码大量使用局部变量(其中有许多是由编译器自动生成)和内存化。我们还使用Lua 字节码的nginx Lua的缓存,以加快自定义规则的加载,一个两阶段的内存缓存,它使用lua_shared_dict和memcached作额外的加载加速。而我们的全球分布式数据存储意味着新的规则可以在几秒钟内铺开。
最后,衡量WAF在生产环境的运作,我们有一个全球的指标体系,收集cloudflare 网络所有部分的指标,这儿是一个图标显示了WAF几个小时的运行。它显示了处理一个请求的平均时间在毫秒内。这个waf运行每个请求花费380us到480us之间,大大优于1ms的目标。

随着语言上各种优化,编译器和WAF核心表明我们拥有了一个非常快的纯Lua waf,这给了我们很大的灵活性,并且运行在nginx核心里。这是又一个项目指出了Lua成为了一门极其优秀的嵌入式语言,在Lua里,我们可以写Cloudflare需要的各种可扩展的逻辑。
原文链接: http://blog.cloudflare.com/cloudflares-new-waf-compiling-to-lua 膜拜前淘宝大神 章亦春
-------- translate by ??有神(814329735@qq.com)