nodejs 作为一门相对年轻的语言, Web 类生产环境的稳定性和部署高可用方案的如何? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
a251922581
V2EX    程序员

nodejs 作为一门相对年轻的语言, Web 类生产环境的稳定性和部署高可用方案的如何?

  •  
  •   a251922581 2017-11-01 10:23:09 +08:00 5415 次点击
    这是一个创建于 2906 天前的主题,其中的信息可能已经有所发展或是发生改变。
    用过一些开源的 nodejs 项目,Web 服务类的,运行中途抛出了一个未捕获的错误,然后就报错退出了。。这样 Web 服务就挂掉了。。这是作者没处理好错误捕获的原因吗?
    谢过几段全程 try catch 的代码,但测试时还是出现了未捕获错误,记得是跟 socket 相关的,ECONNREFUSED 和 Socket Hangup
    另:用 Nginx 反代 Web 类 nodejs 程序的端口有什么好处?
    谢过。。
    28 条回复    2017-11-02 09:56:54 +08:00
    mooncakejs
        1
    mooncakejs  
       2017-11-01 10:33:15 +08:00
    pm-docker, 捕获未捕获的异常可以用 socket.on('error'),也可以在 process.on()
    反代 nodejs 除了包一层 https,静态文件,负载均衡, 没啥好处
    janxin
        2
    janxin  
       2017-11-01 10:50:30 +08:00
    参考其他语言方案即可
    hronro
        3
    hronro  
       2017-11-01 10:51:43 +08:00
    可以用 pm2
    pigzilla
        4
    pigzilla  
       2017-11-01 11:01:34 +08:00   1
    try catch 只能捕获同步代码部分的问题,异步代码要按异步的风格处理,比如 on('error')之类的,或者 promose 的.catch()。
    chairuosen
        5
    chairuosen  
       2017-11-01 11:03:52 +08:00
    pm2
    youxiachai
        6
    youxiachai  
       2017-11-01 11:41:35 +08:00
    反代..可以跑好几个不同端口的 nodejs 程序啊...
    otakustay
        7
    otakustay  
       2017-11-01 12:07:02 +08:00   5
    终于,nodejs 成了语言
    libook
        8
    libook  
       2017-11-01 12:08:08 +08:00   1
    公司使用 Node.js 三年多了,用户量在千万级别,稳定性和 Java 等其他语言没啥区别,瓶颈在写程序的人,如果人的技术不够扎实或者习惯不够好,服务就会经常出问题。
    Node.js 技术栈是异步思维为主,和很多同步思维的程序和框架不同,建议不要用其他技术栈的思维来做 Node.js 项目,费力不讨好。
    Nginx 反向代理是否有好处要看具体需求,旨在通过利用 Nginx 的特性来使用 Node.js 的长处来弥补其短处。比如去状态化的 API 设计加 Nginx 负载均衡再加多 Node.js 实例来饱和硬件利用率;又比如用 Nginx 来管理静态文件,同时代理 Node.js 的动态 API,能充分利用 Nginx 对静态文件服务的优化来提升整体网站的速度;再如一台服务器上绑定多个域名指向多个不同的 Node.js 微服务,Nginx 可以做域名和 location 的路由。
    libook
        9
    libook  
       2017-11-01 12:12:02 +08:00
    @otakustay 如果 Oracle Java 和 OpenJDK Java 因为特性有区别算是两种语言的话,我个人觉得说 Node.js 是一种语言也算勉强成立,毕竟 Node.js ECMA Script 和 Babel ECMA Script 虽说都是 ECMA Script 的实现但多多少少还是有些区别的。
    whypool
        10
    whypool  
       2017-11-01 12:21:07 +08:00
    难点在异常捕获,由于是异步回调,如果出异常简单暴力就是 process.exit(1),所以直接就挂了
    my3157
        11
    my3157  
       2017-11-01 12:24:36 +08:00
    nginx + pm2
    iceheart
        12
    iceheart  
       2017-11-01 12:55:34 +08:00 via Android
    还没开始选型的话,就别选 nodejs 了.
    server 端推荐 golang.
    做过简单测试,同样功能的程序,go 语言的内存占用大概是 node 的 1/3,处理并发数要比 node 高得多。
    并且,代码逻辑也比 node 清晰,部署维护也比 node 简单。
    WittBulter
        13
    WittBulter  
       2017-11-01 13:00:12 +08:00 via iPhone
    @iceheart
    可惜社区和第三方库是硬伤
    learnshare
        14
    learnshare  
       2017-11-01 13:01:37 +08:00
    Node.js 应该算是 Javascript 运行环境吧
    wxt
        15
    wxt  
       2017-11-01 13:10:07 +08:00 via Android
    坑多,一个合作伙伴整个前端模块化,好几十个 node 应用部署在一台机器上,出了问题,他们每次都要找研发。
    wwdyy
        16
    wwdyy  
       2017-11-01 13:11:58 +08:00
    node 不是语言,谢谢
    shuangguanQuail
        17
    shuangguanQuail  
       2017-11-01 14:09:17 +08:00
    process.on('uncaughtException'),相当于一个全局的异常捕获器,保证你的程序不挂掉。
    a251922581
        18
    a251922581  
    OP
       2017-11-01 15:11:24 +08:00
    @iceheart golang 是不是相对和 C 语言接近一点?学起来比 nodejs 要难一些吧..
    isbase
        19
    isbase  
       2017-11-01 16:28:02 +08:00
    先定义好一个兜底的错误处理中间件,将捕获到的错误传给它
    iceheart
        20
    iceheart  
       2017-11-01 18:41:39 +08:00 via Android
    @a251922581 golang 很容易上手,比 c 还简单,网上看两天文档就差不多能开搞了。官方的基础库也够用,go 的协程很方便。
    bramblex
        21
    bramblex  
       2017-11-01 18:57:43 +08:00
    @iceheart

    只可惜写起来跟 c 一样难受
    lianyue
        22
    lianyue  
       2017-11-01 18:57:52 +08:00 via iPhone
    es6 可以直接 捕获 异步代码 async await 多用 就好了 用 koa 做 http 服务器
    shiny
        23
    shiny  
       2017-11-01 19:01:23 +08:00
    阿里 eggjs 框架值得参考,比如你说的异常处理问题在框架层面的处理 https://eggjs.org/zh-cn/core/error-handling.html
    vance
        24
    vance  
       2017-11-01 20:39:34 +08:00
    nazor
        25
    nazor  
       2017-11-01 20:55:43 +08:00
    第一次看见写 JS 的来吐槽 Go 难写。

    吃惯屎的,偶然吃一下饭肯定会不适应。
    to2false
        26
    to2false  
       2017-11-02 09:07:59 +08:00
    @nazor 头像厉害了
    iRiven
        27
    iRiven  
       2017-11-02 09:21:47 +08:00 via Android
    js 用在服务端还是难受,不知道为什么,可能 js 本身就没有想的那么好吧
    looplj
        28
    looplj  
       2017-11-02 09:56:54 +08:00
    不推荐 Node,Go 更好
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     871 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 21:02 PVG 05:02 LAX 14:02 JFK 17:02
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86