【问题标题】:Node.js project to production with a lot of trafficNode.js 项目到生产,流量很大
【发布时间】:2018-03-13 21:57:12
【问题描述】:

我开始了一个项目,并且开始有大量网络流量,并且在某些时候,我对如何将项目扩展到生产中的两个问题感到不安全:

  1. 如何在不让我的用户失去服务的情况下执行更新?
  2. 如何正确配置 Node.js 以减少内存消耗?

我有使用 Hydra-express 的微服务,但我无法实现 Hydra-router,我使用 Express.js 来实现;我也有 NGINX 作为代理网关。

我正在使用 ES6 进行编程,使用 BABEL 进行编译,并使用 PM2 维护活动的微服务,其中一些使用 fork,最重要的是集群模式。

我正在考虑使用 docker,但我没有找到任何关于如何将其与 CDN 一起使用、上传文件并将其提供给用户的教程。

【问题讨论】:

  • 2.不可能以通用的方式回答,如果有,那么每个人都会这样做,您不妨将该配置移至节点核心
  • 如果可以的话,我可以帮你回答 1。
  • 欢迎任何帮助,我正在寻找的是了解他们对这些问题有什么经验
  • 酷。添加了答案。

标签: node.js express production hydra-core


【解决方案1】:

不可能对 2 给出明确的答案,因为这完全取决于应用程序的功能,没有可以应用的灵丹妙药配置。

这就留下了第一点,即所谓的零停机时间

因此,在有多个服务器向用户返回内容的情况下,例如http 服务器 我想可以公平地说大多数生产环境在前面都有与业务逻辑无关的一些东西。这可以是负载均衡器(有多种形状和形式)或反向代理。这通常是您指向 DNS A 记录的位置。这台服务器基本上应该永远不会宕机。

现在,假设您更改了一些业务逻辑并想要部署新的后端。您通常所做的是将负载均衡器(或反向代理)后面已经运行的进程一一换掉。因此,如果您有五个节点进程,则停止一个,使用更新的代码启动一个新进程,然后重复,直到所有正在运行的进程都被换出。

您也可以利用它只换出一个,在那个上运行测试,然后继续换出其余的。

要真正确保不会干扰任何用户,您应该停止在旧进程上接受新的 http 请求,以便将新的 http 请求路由到更新的进程。这将允许正在发生的 http 请求完成。然后停止旧进程。

希望这会有所帮助。

【讨论】:

    【解决方案2】:

    添加到@ralphtheninja 答案,我建议您阅读更多关于蓝绿色部署的信息,正如 Martin Fowler 所提出的那样; https://martinfowler.com/bliki/BlueGreenDeployment.html

    自动化部署的挑战之一是切换本身,将软件从测试的最后阶段带到实时生产。您通常需要快速执行此操作以最大程度地减少停机时间。蓝绿部署方法通过确保您拥有两个尽可能相同的生产环境来做到这一点。在任何时候,其中一个,例如蓝色,是实时的。当您准备软件的新版本时,您将在绿色环境中进行最后阶段的测试。一旦软件在绿色环境中运行,您切换路由器,以便所有传入请求都进入绿色环境 - 蓝色的现在空闲。

    蓝绿部署还为您提供了一种快速回滚方式 - 如果出现任何问题,您可以将路由器切换回您的蓝色环境。

    我不知道您的后端在哪里运行,但有一些服务会为您完成,例如 AWS ElasticBeanstalk 会将您的实例置于负载均衡器之后,并根据策略管理部署。看一看; https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/using-features.rolling-version-deploy.html.

    【讨论】:

      猜你喜欢
      • 2020-07-14
      • 1970-01-01
      • 2010-12-21
      • 2016-12-25
      • 1970-01-01
      • 2012-06-16
      • 1970-01-01
      • 2018-10-15
      • 1970-01-01
      相关资源
      最近更新 更多