我们有一个大型的Ruby on Rails应用程序(每月有2500万用户),我们的管理层决定在Node.js中重写,我疯了吗?


24

请告诉我是否:

  • Node.js将使我们的网站更快!
  • Node.js将消耗更少的服务器资源,我们可以节省金钱!
  • Node.js将使我们的生产力更高!
  • Node.js意味着我们可以共享客户端和服务器端JavaScript代码。

为了澄清起见,我们正在重写前端服务器,该前端服务器将作为API与我们现有的Ruby on Rails应用程序通信。同时,我们将Ruby on Rails应用程序重构为服务。

现有架构的更多详细信息:

  • Memcached用于HTML部分缓存
  • Redis用于会话和一些结构化数据缓存
  • MySQL单主机,多从机
    • 有一张大桌子可以接受大量写操作(想象一个民意测验)
    • 否则大多读。
  • MongoDB中的一些元数据
  • Ruby on Rails 3.0
  • Nginx独角兽

33
嘘,所有这些时髦的语言。一个写得很好的php应用程序将很容易扩展,传统的工具可以正常工作,不要让那些时髦的人告诉你。
2013年

5
问题应该更多地在于“这些改进会为企业节省足够的钱使其值得吗?” 它可能会在5年内省钱,但是重写是昂贵且耗时的-除非您的代码太可怕了,我认为您的经理很生气
Mikey C

4
如果考虑重写,您也可以考虑将前端移至客户端javascript,这意味着您将不再具有动态前端服务器,而不再是静态文件。
Joeri Sebrechts

11
@Darknight要记住,在某一时刻,PHP是时髦的语言,人们表示可以将其部署在成功的产品中,从而促进了它的采用,而Perl Web开发人员却在嘲笑PHP的时髦者。

9
我很惊讶没有人提出乔尔·斯波斯基的文章“ 你不应该做的事情”。我并不是说所有的重写都是不好的,但是我同意@MikeyC的观点,应该格外小心。
Dan Pichelman 2013年

Answers:


22

您提出的大多数问题在没有上下文的情况下是无法回答的,并且鉴于管理层已经为您做出选择,所以或多或少都没有什么意义……除非您问“面对所有这些变化,我应该辞职并找到新工作吗? '

如果您要解决问题,建议您阅读以下主题的这篇文章:如何在不损失理智的情况下生存下来的重写

我最近开始着手在node.js中重写一些服务器逻辑。主要原因是它当前是用.NET编写的,我们希望从MS环境中逐步迁移。

到目前为止,我的经验是非常积极的,您将获得一个初步的学习曲线,了解它的所有非阻塞性,但是一旦您超过了它,编写代码实际上就很有趣了。我知道,有趣!

但是它确实有一个阴暗面,每个人和他的狗都使用JavaScript进行了一些前端开发-并且我希望这将是每个前端开发人员-当您提到node.js是“服务器端javascript”时,会感到有些兴奋但是,这并不意味着前端开发人员将具有编写出色的服务器端应用程序所需的经验。

一方面,您考虑到一个致命错误,因为它具有非线程性质,它将导致整个应用程序崩溃,因此赌注会更高,您必须明确检查并捕获所有内容。

对于那些既完成前后工作又享受两者兼而有之的人,而不必将思维环境从前端语言切换到后端语言是一个真正的收获,我认为这最终将提高我们团队的工作效率。


“您考虑到的一件事是,致命错误将由于其非线程性质而使整个应用程序崩溃,因此赌注更高,因此您必须明确检查并捕获所有内容。”-这是我的担心。
2013年

是的,我的主要观点是,只有前端开发人员在异常处理方面通常不会显得特别挑剔。来吧,已经快2017年了!
dave.zap,2013年

8

好吧,除非性能不佳,否则我认为重写应用程序不是一个好主意。要回答您的问题:

  1. Node.js并不是魔术。您的应用程序拥有大量用户,因此无法确定它将使其变得更快。

  2. 好吧,是的,Node.js实际上确实消耗更少的服务器资源。因此,您不仅可以节省资源,而且可以利用现有资源做更多的事情。这主要是因为Node.js具有单线程特性。没有其他线程的开销。

  3. 同样,Node.js也不是魔术。话虽如此,其中可能有些道理。Node.js有一个非常活跃的社区,为每个可能的任务创建了数百个模块。因此,大部分工作很可能已经为您完成。您只需要将各个部分组合在一起即可。

  4. 从理论上讲,是的。由于Node.js是JavaScript,因此您可以在客户端和服务器之间共享代码。但是我不确切知道将要分享什么。我没有编写任何可在客户端上重用的代码。我们在服务器上执行的操作通常与客户端无关。对我来说更重要的是缺少上下文切换。我发现以单一语言在客户端和服务器上编码更容易。

由于Node.js是单线程的,除非明确配置为这样做,否则它无法利用多个CPU

也看一下评论。他们为Node.js的运作提供了很好的见解。


16
是否由于单个线程而减少资源?您认为这些多余的线程会做什么?

据我所知@Joe会加起来。在node js中,最好的方法是尽快处理一个请求,要么一次性完成,要么下一次恢复。这是我为生产应用程序所做的唯一技术。因此,我可能不是将其与其他服务器端技术进行比较的最佳人选。这就是为什么我不进行比较,而只是将我对节点js的了解放在其中的原因。我的答案。
Akshat Jiwan Sharma

7
是的,一个线程肯定会限制资源的使用,因为服务器在事件循环中一次只能做一件事。它还限制了服务器的使用,因为它一次只能做一件事。引述功能(单线程)以及优点和缺点,而不只是优点,这一点非常重要。Node.js适合某些用途,但对于其他用途则不是一个好主意。当单线程节点服务器出现容量问题时,您可能必须添加另一个节点实例。现在您有了一个多进程服务器。

我明白您的意思。我会在不久的将来更新答案(经过研究后阅读)
Akshat Jiwan Sharma

10
这不仅仅与CPU有关。原因尽可能快地处理每个请求(在没有其他并发性的单线程系统中)很重要,是因为服务器无法一次处理多个请求,因此每个请求都必须等到您完成所有的处理之前的要求。正确的并发意味着更少的等待时间。使用线程并不是天生的性能消耗,单线程(默认或其他方式)也不是性能优势。
Peter Hosey
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.