Node.js 大型应用程序的可靠性

2024-02-01

我是 Node.js 的新手,目前正在质疑它的可靠性。

根据我到目前为止所看到的,似乎存在一个重大缺陷:任何未捕获的错误/异常都会导致服务器崩溃。当然,您可以尝试对代码进行防弹保护或将 try/catch 放在关键区域,但几乎总会有错误被漏掉。如果一个有问题的请求可能影响所有其他请求,这似乎很危险。我发现有两种解决方法:

  1. 使用守护进程或模块,例如forever https://github.com/indexzero/forever当服务器崩溃时自动重新启动。我不喜欢的一点是服务器仍然关闭一两秒(对于大型站点,这可能是数百(数千?)的请求)。

  2. 使用以下命令捕获未捕获的异常process.on('uncaughtException')。这种方法的问题(据我所知)是无法获取导致异常的请求的引用。因此,该特定请求会被挂起(用户会看到加载指示器,直到超时)。但至少在这种情况下,其他无问题的请求仍然可以得到处理。

有 Node.js 资深人士可以参与吗?


对于自动重启和负载平衡,我建议您查看学习助推器上线了 https://github.com/learnboost/up平衡器。

它允许您在负载均衡器后面重新加载工作线程,而不会丢弃任何请求。它停止将新请求定向到工作人员,但对于已经得到服务的现有请求,它提供workerTimeout在真正关闭进程之前等待请求完成的宽限期。

您可以调整此策略,使其也由uncaughtException event.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Node.js 大型应用程序的可靠性 的相关文章

随机推荐

  • 在 google oauth 后,如何在不使用 webview 的情况下将用户重定向回我的应用程序?

    谷歌决定禁止通过 webview 进行 oauth 给我带来了巨大的麻烦 迁移到替代方案是一个漫长而困难的过程 我目前正在使用建议的 AppAuth 库 并且我收到用户抱怨 如果不将帐户添加到 chrome 他们的设备 这作为据我所知 如果
  • 地址簿联系人排序

    我有下面的代码 我设法从地址簿中列出了姓名和电话号码 但如何按名字对其进行排序 ABAddressBookRef addressBookRef ABAddressBookCreateWithOptions NULL NULL abConta
  • 多线程 Grep

    我有以下包含 30233088 字符串的 大 文件 head mystringfile txt GAATGAACACGAAGAA GAATGAACACGAAGAC GAATGAACACGAAGAG GAATGAACACGAAGCA cat
  • 为什么厨师无法解析我的食谱?

    Intro我正在学习 Chef 以自动化工作中的服务器管理 我从下载了 Chefdk 3 0here https downloads getchef com chef dk windows 现在我正在尝试使用厨师制作我的第一本食谱 重要的我
  • .npm 缓存与 node_modules 大小

    在构建节点应用程序时 我们使用 npm 缓存 如下所示 npm install cache tmp node cache npm prefer offline 但是我有理由相信 缓存无法正常工作 因为 tmp node cache du s
  • 在 AWS Elastic Beanstalk 上部署 Flask 与运行脚本有何不同?

    在 ec2 实例上部署 Flask 应用程序 换句话说 在任何计算机上运行脚本 和通过 AWS Elastic Beanstalk 部署 Flask 应用程序有什么区别 烧瓶部署文档 http flask pocoo org docs 0
  • 是不是更喜欢预增量而不是后增量?

    过去的情况是 预增量是首选 因为类上重载的后增量需要返回表示增量之前对象状态的临时副本 看来这不再是一个严重的问题 只要内联到位 因为我的旧 C 编译器 GCC 4 4 7 似乎将以下两个函数优化为相同的代码 class Int publi
  • 静态和默认构造函数

    非静态类可以同时具有静态构造函数和默认构造函数 这两个构造函数有什么区别 我什么时候应该只使用静态或使用默认构造函数的静态 静态构造函数在您第一次访问类的实例之前为每个 AppDomain 运行一次 您可以使用它来初始化静态变量 另一方面
  • MVC3 不显眼的验证扩展;条款和条件复选框

    我还看过其他一些关于此的帖子 MVC 对复选框的不显眼验证不起作用 https stackoverflow com questions 6923430 mvc unobtrusive validation on checkbox not w
  • jdbc 中的未知数据库

    我正在使用 JDBC 而且是新手 但我不断收到此运行时异常 connecting to psysical database com mysql jdbc exceptions jdbc4 MySQLSyntaxErrorException
  • 如果任何特定列集中的值满足特定条件,则返回整行

    我有一个数据框 我想保留任何价格列大于某个值的行 水果 这是一个可重现的示例 您可以将其直接复制并粘贴到 R 中 fruit c apple orange banana berry 1st col ID c 123 3453 4563 32
  • 如何使用新 PostgreSQL JSON 数据类型中的字段进行查询?

    我正在寻找 PostgreSQL 9 2 中新 JSON 函数的一些文档和 或示例 具体来说 给定一系列 JSON 记录 name Toby occupation Software Engineer name Zaphod occupati
  • 如何将 Kentico 实例复制到本地计算机?

    我刚刚开始了一个新职位 接替了一位突然离职的开发人员 该开发人员正在从事基于 Kentico CMS 的项目 我对 ASP 和 Kentico 完全不熟悉 所以这里的答案需要针对初学者量身定制 我熟悉其他语言 PHP Ruby SQL 等
  • 如何通过保留键的数据类型将json序列化为另一个json?

    我有像这样的原始 JSON 字符串 其中有键和值 如下所示 u string 1235 p 2047935 client id string 5 origin null item condition null country id int
  • 传递给 matplotlib.date2num 的时间戳:“str”对象没有属性“toordinal”

    有一个带有时间戳的数组 格式 Y M D H M S 从文本文件收集 我想用 matplotlib 将这些绘制在子图中 但我无法让它发挥作用 我在想这个 import numpy as np import datetime import m
  • 将命令行参数传递给 ant

    我对 ant 比较陌生 在学校我有一个任务是做构建文件 我的问题之一是将其名称 或路径 作为 ant 参数的文件复制到 foldercopy 我需要做类似的事情 ant cpfile 文件 txt 因此ant会将file txt复制到 fo
  • Cucumber Scenario Outline 的示例表中是否可以有空值? [复制]

    这个问题在这里已经有答案了 这是我的场景大纲中的示例表 有些没有价值 这可能吗 Examples ID UserName Password Contact1 Number ID1 username1 password1 Phone 111
  • protobuf-net 并使用接口序列化链表

    我遇到了 protobuf net 的问题 并将其缩小到这个最简单的情况 我想要一个链表类型结构 其中一个类具有相同类型的属性 当我序列化它时 它效果很好 但是 如果类型是接口而不是类 我会收到以下错误 一旦为 ConsoleApplica
  • 单击链接时如何切换复选框?

    我正在尝试做一个非常简单的HTML 电子邮件中的复选框 hack https youtu be 38pcplCDOng进行一些基本的电子邮件内交互 像下面这样
  • Node.js 大型应用程序的可靠性

    我是 Node js 的新手 目前正在质疑它的可靠性 根据我到目前为止所看到的 似乎存在一个重大缺陷 任何未捕获的错误 异常都会导致服务器崩溃 当然 您可以尝试对代码进行防弹保护或将 try catch 放在关键区域 但几乎总会有错误被漏掉