现在开发Web服务已经开始流行node和nginx+lua了?

2013-02-05 16:07:43 +08:00
 saharabear
在朋友圈里聊天,聊到说用bottle和php-fpm开发web服务,有人直接说:你们还用php写web服务?现在都用node和nginx+lua了。

突然很好奇,node有这么普及了? nginx+lua这个思路倒是挺新奇。

现在很流行用node和nginx+lua开发Web服务了吗?
14026 次点击
所在节点    问与答
12 条回复
linnchord
2013-02-05 16:20:16 +08:00
node还比较小众吧,lua连小众都还谈不上了,适用情况很少。

制造些耸人听闻的话题是某些人的爱好。
saharabear
2013-02-05 16:24:23 +08:00
@linnchord 我对nginx+lua了解不多,但是感觉思路上很新颖,弱化了web服务器和web应用的概念。不过这样最终在稍大的项目中,似乎还是会出现前面一个简单的nginx挂着后面一堆带模块的nginx的情况,未必比现在的nginx+php-fpm的方式,或者nginx+apache的方式有多大优势。
linnchord
2013-02-05 17:17:03 +08:00
@saharabear nginx+lua感觉和sql服务+存储过程或者web服务+C扩展是一个类型,不是当前web开发多层分布架构的主流,适用于某些性能要求极高、逻辑实现极简的个别情况。
saharabear
2013-02-05 17:21:05 +08:00
@linnchord 同意。

我对于node的优势,从各种媒体文章中没有得到过有价值的信息,我好奇的是node跑在单线程下玩异步,其实所谓的快只不过是web层不等到把事情搞定就先继续接受下一个请求而已,似乎没有什么优势啊。为什么这么多人推崇node呢?

看了一些成功案例,听说trello是用的node,还用了socket.io, 这种高交互也许适合node,但传统的以提供api为核心的web服务似乎用node没有什么优势?
LazyZhu
2013-02-05 17:31:34 +08:00
ElmerZhang
2013-02-05 17:36:12 +08:00
要写业务逻辑的话还是得用PHP这类的语言,node只适合写业务逻辑简单,对并发要求高的场景。
qiuai
2013-02-05 17:49:31 +08:00
我只认为他们在炫耀.
linnchord
2013-02-05 18:05:58 +08:00
@saharabear nodejs的优势(或者说js的优势)在于异步回调的程序流模型,这个模型复用了IO等待的时间,由此提高了效率。所以对于目前以IO密集型(数据库访问、缓存访问、文件访问、远程调用)为主的大部分web开发是会提高效率的。对CPU计算密集类型则无用,例如你搞个计算器服务,用node就蛋疼了。
jackyz
2013-02-06 10:41:42 +08:00
流行谈不上。该用啥还继续用啥。很多业务都是需求密集型的。上来就谈性能,要么是初哥,要么是装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 上就要合理。
saharabear
2013-02-06 11:29:20 +08:00
@jackyz 感谢已送出,多谢。
Livid
2013-02-06 11:31:35 +08:00
@jackyz agentzh 目前是在旧金山的 CloudFlare 工作。
qiongqi
2013-02-06 12:09:07 +08:00
php, openresty 都在用,看场景,看需求,不需要比较啥,用的地方不一样。 @jackyz 总结的很好啊,送出个感谢。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/59864

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX