V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
saharabear
V2EX  ›  问与答

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

  •  1
     
  •   saharabear · 2013-02-05 16:07:43 +08:00 · 14008 次点击
    这是一个创建于 4314 天前的主题,其中的信息可能已经有所发展或是发生改变。
    在朋友圈里聊天,聊到说用bottle和php-fpm开发web服务,有人直接说:你们还用php写web服务?现在都用node和nginx+lua了。

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

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

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

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

    看了一些成功案例,听说trello是用的node,还用了socket.io, 这种高交互也许适合node,但传统的以提供api为核心的web服务似乎用node没有什么优势?
    LazyZhu
        5
    LazyZhu  
       2013-02-05 17:31:34 +08:00
    ElmerZhang
        6
    ElmerZhang  
       2013-02-05 17:36:12 +08:00
    要写业务逻辑的话还是得用PHP这类的语言,node只适合写业务逻辑简单,对并发要求高的场景。
    qiuai
        7
    qiuai  
       2013-02-05 17:49:31 +08:00
    我只认为他们在炫耀.
    linnchord
        8
    linnchord  
       2013-02-05 18:05:58 +08:00
    @saharabear nodejs的优势(或者说js的优势)在于异步回调的程序流模型,这个模型复用了IO等待的时间,由此提高了效率。所以对于目前以IO密集型(数据库访问、缓存访问、文件访问、远程调用)为主的大部分web开发是会提高效率的。对CPU计算密集类型则无用,例如你搞个计算器服务,用node就蛋疼了。
    jackyz
        9
    jackyz  
       2013-02-06 10:41:42 +08:00   ❤️ 15
    流行谈不上。该用啥还继续用啥。很多业务都是需求密集型的。上来就谈性能,要么是初哥,要么是装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
        10
    saharabear  
    OP
       2013-02-06 11:29:20 +08:00   ❤️ 1
    @jackyz 感谢已送出,多谢。
    Livid
        11
    Livid  
    MOD
       2013-02-06 11:31:35 +08:00
    @jackyz agentzh 目前是在旧金山的 CloudFlare 工作。
    qiongqi
        12
    qiongqi  
       2013-02-06 12:09:07 +08:00
    php, openresty 都在用,看场景,看需求,不需要比较啥,用的地方不一样。 @jackyz 总结的很好啊,送出个感谢。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2791 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 15:35 · PVG 23:35 · LAX 07:35 · JFK 10:35
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.