V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
a251922581
V2EX  ›  程序员

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

  •  
  •   a251922581 · 2017-11-01 10:23:09 +08:00 · 5102 次点击
    这是一个创建于 2584 天前的主题,其中的信息可能已经有所发展或是发生改变。
    用过一些开源的 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 本身就没有想的那么好吧
    ZSeptember
        28
    ZSeptember  
       2017-11-02 09:56:54 +08:00
    不推荐 Node,Go 更好
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3395 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 11:46 · PVG 19:46 · LAX 03:46 · JFK 06:46
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.