Javascript 大型NodeJS应用程序特有的潜在复杂性/问题是什么

Javascript 大型NodeJS应用程序特有的潜在复杂性/问题是什么,javascript,node.js,Javascript,Node.js,我来自“传统web应用程序”背景:想想Java、.NET、PHP、ColdFusion等等 在评估NodeJS作为非平凡应用程序的主要服务器端技术时,我想知道开发人员和操作人员团队可能会面临哪些NodeJS特有的复杂性、问题和挑战。简言之,我想减少我的未知。一些(并非全部)示例: 它在多大程度上适合大型团队开发?对于Node来说,在一个由20、50或200名开发人员组成的团队中,存在哪些独特的挑战 在数据库访问方面存在哪些独特的挑战?“Enterprisey”数据访问问题在Java中处理得非常

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

在评估NodeJS作为非平凡应用程序的主要服务器端技术时,我想知道开发人员和操作人员团队可能会面临哪些NodeJS特有的复杂性、问题和挑战。简言之,我想减少我的未知。一些(并非全部)示例:

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

等等。在开发、维护和生产管理一个100+K LoC代码库方面有哪些经验教训?部署在一个服务器群中,有几十名开发人员参与其中?

我将尝试回答您的一些问题

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

  • 它和其他任何语言都一样;没有什么!程序员团队通常使用诸如git、svn、mercurial等版本控制系统来处理处理相同文件的同事
在数据库访问方面存在哪些独特的挑战?“Enterprisey”数据访问问题在Java中处理得非常简单(通过Spring连接池、安全性等)。Node是这样吗?

  • 节点与数据库无关。您可以将任何数据库与存在驱动程序/包装器的节点一起使用(与PHP相同)。关系数据库(MySQL、SQLite)和NoSQL(MongoDB)有许多驱动程序/包装程序
报告繁重的应用程序通常需要Excel、PDF甚至PNG导出。。。节点在这种类型的应用程序中表现如何?

  • Node可以像php和其他人一样访问普通shell。因此,如果您使用php处理图像,您将使用ImageMagick或GD的包装器。GD需要安装在Web服务器上才能工作,因为php将命令发送到命令行。与节点相同;找到包装纸(http://search.npmjs.org)使用你想要的功能
节点在开发时调试方面是否存在任何独特的挑战?

  • 节点是Javascript,所以它不编译,而是JIT。因此,故障只有在执行时才会被检测到。您希望每个开发人员在您的登台/开发机器和活动服务器旁边都有一个本地env,这样他们就可以在将代码提交到登台服务器之前测试代码
存在哪些独特的运营挑战?从服务器重启/热代码交换/负载平衡到监视和管理生产群集的工具,无所不包。

  • 我不知道有什么“独特”的挑战。您将像处理所有其他语言一样处理监视/心跳(是的,有些语言可以做到这一点,比如Erlang)。您需要像forever或supervisord这样的服务来在服务器重新启动时启动节点,但Apache+PHP/Perl也是如此
  • (节点有一个集群模块,可帮助您处理多个工人 (用于多核服务器)

看看Git如何管理代码。并根据您想要做的事情(高并发性、可伸缩性)选择语言。

我将对我有资格做的事情进行评论:

  • 到数据源的连接池。 默认情况下,标准节点HTTP(S)服务器工具实现池,并且可以配置一些旋钮来提高或控制性能。社区非常活跃,有许多其他项目(如)实现通用或专用连接池。你需要四处看看。事实上,考虑到你传统的Webdev背景

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

    为了帮助管理第三方库,设计了
    npm
    包管理器,并很早就包含在node中。众所周知,它的质量很高。作者们显然预期会有很多第三方使用

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

  • 运营挑战 Node.js无法扩展到您的硬件。如果您的服务器有多个核心(到目前为止,哪个是最重要的)