【问题标题】:More graceful deployments on AWS (NodeJS)在 AWS (NodeJS) 上进行更优雅的部署
【发布时间】:2016-06-13 20:27:46
【问题描述】:

我在 AWS (EC2) 上运行一个基于 NodeJS 的应用程序,到目前为止一切都非常顺利。然而,上周,我们的客户注意到,当我们进行部署时,站点会出现一分钟的宕机时间。稍微研究一下,这似乎是我的节点应用程序的启动时间(读取各种配置文件,连接到服务,预热缓存)。我对此有几个问题:

  • 新的“部署”是在同一个虚拟机上运行还是在新的npm start 命令运行之前将机器拆除?
  • 有没有办法让 AWS 在让新代码接管之前等待信号?

【问题讨论】:

  • 您在使用 AWS CodeDeploy 吗?
  • 不,我们正在构建 Jenkins。
  • 好的,谢谢。而从 Jenkins 到服务器的部署机制究竟是什么?
  • 运行规范,构建资产,压缩除 node_modules 和测试文件夹之外的所有内容,推送到 S3 存储桶,部署到 EB。我们正在使用这个 Jenkins 插件:wiki.jenkins-ci.org/display/JENKINS/AWSEB+Deployment+Plugin

标签: node.js amazon-web-services deployment amazon-ec2


【解决方案1】:

在 AWS 中,您可以通过不同的方式部署 Node APP,以处理更优雅的部署。

Using EC2, Load balancing

在此设置中,您可以使用 Node App 配置至少 2 个 EC2 实例,并按顺序将更新部署到每个实例(至少在使用 Jenkins 进行更新之前配置 2 个实例)。您必须设置负载均衡器后面的实例以保持系统可用,这样当一个实例由于正在进行更新而不可用时,负载均衡器会将请求发送到另一个实例。

Using AWS Elastic Beanstalk

如果您正在部署现有的 Node 应用程序,这是推荐的方法。 Beanstalk 平台能够进行滚动更新。您还可以在 Beanstalk 中创建一个新环境并执行 Blue Green Deployments 交换 DNS 记录。

Using AWS ECS

如果您可以容器化您的 Node 应用程序,那么您可以为此创建一个运行多个实例的服务,您可以在其中进行滚动。与启动 EC2 实例(几分钟内)相比,这里的优势是启动新容器实例非常快(几秒钟内发生)。

Using AWS Lambda, API Gateway, Cloudfront & S3

这是使用 Lambda 设置节点应用程序的现代方式,平台将处理系统的大部分质量属性。例如无停机、可用性、可用性等的部署。这些架构通常称为无服务器架构。

【讨论】:

    猜你喜欢
    • 2016-09-28
    • 1970-01-01
    • 1970-01-01
    • 2015-10-23
    • 2020-08-24
    • 1970-01-01
    • 2020-07-21
    • 1970-01-01
    • 2016-12-20
    相关资源
    最近更新 更多