【问题标题】:What are the potential complexities / problems unique to a large NodeJS Application大型 NodeJS 应用程序特有的潜在复杂性/问题是什么
【发布时间】:2012-10-09 16:27:27
【问题描述】:

我来自“传统 Web 应用程序”背景:想想 Java、.NET、PHP、ColdFusion 等。

在评估将 NodeJS 用作重要应用程序的主要服务器端技术时,我想知道开发人员和运维人员团队可能会面临哪些 NodeJS 独有的复杂性、问题和挑战。简而言之,我想减少我的未知数。一些(不是全部)示例:

  • 它在多大程度上适合大型团队开发?在 20 或 50 或 200 名开发人员的团队中,Node 存在哪些独特的挑战?
  • 在数据库访问方面存在哪些独特的挑战? “企业”数据访问问题主要在 Java 中处理(连接池、安全性等通过 Spring)。 Node 是这样的吗?
  • 报告繁重的应用程序通常需要 Excel、PDF 甚至 PNG 导出...Node 在此类应用程序中的表现如何?
  • Node 在开发时调试方面是否存在任何独特的挑战?
  • 存在哪些独特的运营挑战?从服务器重新启动/热代码交换/负载平衡到用于监控和管理生产集群的工具的一切。

等等。开发、维护和生产管理一个 100+K LoC 代码库,部署在一个服务器场,由数十名开发人员接触,有哪些经验教训?

【问题讨论】:

    标签: javascript node.js


    【解决方案1】:

    我会尽量回答你的一些问题

    它在多大程度上适合大型团队开发?对于 Node 来说,在 20 或 50 或 200 名开发人员的团队中存在哪些独特的挑战?

    • 它的作用与其他所有语言一样;没有什么!程序员团队通常使用 git、svn、mercurial 等版本控制系统来处理处理相同文件的同事

    在数据库访问方面存在哪些独特挑战? “企业”数据访问问题主要在 Java 中处理(连接池、安全性等通过 Spring)。 Node 也是这样吗?

    • 节点与数据库无关。您可以将任何数据库与节点一起使用,其中存在驱动程序/包装器(与 PHP 相同)。关系数据库(MySQL、SQLite)和 NoSQL (MongoDB) 有许多驱动程序/包装器

    报告繁重的应用程序通常需要 Excel、PDF 甚至 PNG 导出...Node 在此类应用程序中的表现如何?

    • Node 可以像 php 和其他人一样访问正常的 shell。因此,如果您使用 php 处理图像,则您使用的是 ImageMagick 或 GD 的包装器。 GD 需要安装在 WebServer 上才能工作,因为 php 将命令发送到命令行。与节点相同;找到一个包装器 (http://search.npmjs.org) 并使用您想要的功能。

    Node 在开发时调试方面是否存在任何独特的挑战?

    • Node 是 Javascript,所以它不编译,但 JIT。因此,只有在执行失败时才会检测到失败。您需要为您的登台/开发机器和实时服务器旁边的每个开发人员提供一个本地环境,以便他们可以在将代码提交到登台服务器之前对其进行测试

    存在哪些独特的运营挑战?从服务器重启/热代码交换/负载平衡到监控和管理生产集群的工具。

    • 据我所知,没有“独特”的挑战。您将像处理所有其他语言一样处理监控/心跳(是的,有些语言可以这样做,例如 Erlang)。你需要一个像 forever 或 supervisord 这样的服务来在服务器重启时启动节点,但这与 Apache+PHP/Perl 相同。
    • (Node 有一个 Cluster 模块可以帮助你处理多个 worker (对于多核服务器))

    查看 Git 来管理您的代码。并根据你想做的事情(高并发、可扩展性)选择语言

    【讨论】:

      【解决方案2】:

      我会评论我有资格的事情:

      1. 与数据源的连接池。 标准 Node HTTP(S) 服务器工具默认实现池化,您可以配置一些旋钮来提高或控制性能。社区非常活跃,还有许多其他项目(如poolee)实现了通用或专用连接池。你需要环顾四周。事实上,鉴于您的传统 Webdev 背景...

        1.1 旁注:第三方库 使用 Node 进行开发时,您可能会发现自己使用了很多第三方库。根据您的特定背景,这可能看起来很奇怪。要了解原因,请考虑 .NET 或 Java:这些平台的标准库是庞大的。因此,在使用这些平台时,您可能会选择很少的第三方工具或插件来帮助您完成工作。相比之下,Node 有一个故意缩小和严格控制的标准库。为提高服务器性能而统一“事物的编写方式”所需的所有必要 API 都已存在,但仅此而已。

        为了帮助管理第三方库,npm 包管理器很早就被设计并包含在 node.js 中。众所周知,它的质量很高。作者清楚地预见到了很多第三方的使用。

      2. 计算能力 您提到了图像导出。存在所有这些东西的 Javascript 库,所以就“它可以轻松完成”而言,它可以。请记住,如果您有一项计算繁重的任务,Javascript 可能不是实现核心计算的最有效语言。 v8 引擎允许您在需要时用 C 编写模块,但将请求转发到专门的后端服务器是 Node 做得非常好的事情。

      3. 运营挑战 Node.js 不会扩展到您的硬件。如果您的服务器有多个内核(现在肯定有),您将需要在同一物理硬件上运行多个服务器进程以实现高利用率。这可能会为操作提供不同的画面:比您通常看到的要多得多的进程,这些进程可以按物理机或虚拟机分组。

        顺便说一句,将您的服务器分成多个进程对可靠性来说并不是一件坏事:一个大型传统进程会因未处理的异常而崩溃,从而导致八个(或其他)核心的活动会话停止运行。多个节点进程仍会单独崩溃,但影响较小。考虑到性能和可监控性,可能还有探讨“多少进程太多?”这一点的空间。实际上,每台服务器使用比可用内核更多的 Node 进程可能是值得的。

      【讨论】:

      • Andres,你提到 npm 的质量非常高。该工具本身当然非常有用,但你能说这些库总是高质量的吗?作为 Node 的新手,我遇到的一个问题(我承认我是新手,所以这可能是一种无知的观点),似乎很少有 npm 库的管理。举个例子,当我上次搜索 RSS 时,我发现了大约 20 个选项,但对于哪些被认为是优质的,我几乎没有方向。有什么意见吗?
      • @RaymondCamden 我发现了一个名为“nipster”(eirikb.github.com/nipster)的工具,可用于挖掘所有可用的包并查看它们的 github 信息(stargazers,最后修改,fork)。大致了解图书馆的受欢迎程度。
      • @RaymondCamden - 判断质量的好方法通常是浏览问题、关注者、最近提交/提交数量等。然而,节点 3rd 方库的好处是它们通常有一个非常狭窄的焦点,因此代码库很容易被摸索。当有问题时,StackOverflow 是一个很好的提问地方;)。
      • 我回应了以上所有内容。您确实需要评估您使用的第三方库是否真正解决了您的问题,或者它们是否足够接近,您可以通过自己的贡献继续使用它们。
      猜你喜欢
      • 2017-11-28
      • 1970-01-01
      • 2017-11-19
      • 1970-01-01
      • 2022-11-03
      • 1970-01-01
      • 2011-12-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多