流行谈不上。该用啥还继续用啥。很多业务都是需求密集型的。上来就谈性能,要么是初哥,要么是装13。
ngx_lua 是 openresty 的组件之一,之前在 yahoo/淘宝工作的章亦春同学 @
agentzh 现在肉翻到了米国的某公司做 openresty 的全职开发,相当靠谱,另外就是淘宝量子统计的一票人也在国内猛 commit 代码。
node.js 则主要是 joynet 的产物,社区发展速度有目共睹,就不多说了。
从技术实现的层面分析,这两个东西基本上是一码事。因为 nginx + lua 的实质就是 libuv + lua 而 node.js 的实质则是 libuv + javascript 也就是说,都是由一个追求高效的异步 IO 底层加上一个追求高效和小巧的编程语言构成。
两者解决问题的思路也很类似 Non-Block 和 Event-Driven 是最核心的关键词和考虑一切问题的哲学。这是一个编程思路上的跳跃。跟 Erlang 一样,口味比较怪,犯错是必须的,而且不能指望你所有的程序员都能拐得过来这个弯。
从技术包装的层面 nginx 本身是聚焦在 http 协议之上的设施 openresty 这个名称说明了一切。而 node.js 则相对抽象得更底层,可以解决 tcp/udp 等更低层次上的需求。比如说,都可以做网站(HTTP),但 node.js 还可以做 DNS 服务。这也就意味着,后者适用的领域可能要更广泛一些。
两者最适用的场合都是 io 密集型的应用场景。需要说明的是,并不是所有的 web 都可以自动归类到 io 密集型里来的。真正称得上 io 密集的应用场景,其实是相当罕见的。大量的 web 都是需求密集型的(这个词是捏造的,意思是,主要还是业务复杂,而不是其他方面的要求有多高)。当然,为了打压竞争对手而拿这个说事儿,就另说了。
要不要评估和实施 node.js 和 ngx_lua 最主要还是看两点:1,需求本身是不是非得变态的追求性能,2,手里面都有什么样的人。毕竟软件开发是一个经济活动,某个行为的成立首先在 ROI 上就要合理。