15

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

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

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

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

4

2 回答 2

6

我会尝试回答你的一些问题

它在多大程度上适合大型团队开发?对于 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 模块,可以帮助您处理多个工作人员(用于多核服务器))

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

于 2012-10-08T13:05:30.897 回答
4

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

  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 进程可能是值得的。

于 2012-10-08T13:24:20.807 回答