【问题标题】:Prevent website from going down while deploying new code部署新代码时防止网站宕机
【发布时间】:2017-05-30 20:29:04
【问题描述】:

我正在运营一个流量不错的电子商务网站。

我们的网站在以下堆栈上运行:

  1. WebApp 是用 Java 构建的,在 Apache Tomcat 上运行
  2. 我们使用 Nginx 作为网络服务器
  3. 我们在 AWS 的 EC2 实例上运行我们的网络服务器 - 它以 Ubuntu 作为操作系统。

我们经常部署新的网站代码以包含新功能和错误修复。我们按照以下程序执行此操作:

  1. 关闭 apache tomcat
  2. webapps 目录中删除ROOT webapp
  3. webapps 目录中上传了新的ROOT.war
  4. 重启apache tomcat

现在这个过程会导致网站关闭大约 20-30 秒。这不仅会导致当时的新客户因无法访问网站而流失,而且还会导致正在结帐下订单的现有客户出现一些问题。

有没有办法解决这个问题?通过它我可以部署新版本的网站,而无需 0 停机时间,也不会丢失现有客户的会话数据。

【问题讨论】:

    标签: amazon-web-services tomcat nginx amazon-ec2 webserver


    【解决方案1】:

    这是一个非常广泛的问题,有许多可能的答案。

    基本上,您需要摆脱单机设置并创建 - 手动/通过 Cloudformation/其他方式 - 位于 Elastic Load Balancer 后面的 2 个或更多应用程序服务器。在部署新版本时,其中一个盒子的实时流量会耗尽,因此现有用户将由另一个工作实例提供服务。

    或者您可以使用 elastic beanstalk 打包应用程序并让它为您完成所有繁重的工作,这是一种非常 AWS 的方式,尤其是如果您的应用程序非常简单。

    在互联网上搜索蓝绿色部署

    【讨论】:

    • 感谢您的意见,我曾考虑过 Elastic Load Balancer,但在这种情况下,我会为另一个 EC2 支付额外费用。我试图避免这种情况。我已经阅读过弹性豆茎,但还没有尝试过,因为我不确定它是否符合我的要求。是否可以在 EC2 本身上创建负载均衡器,我将在单个 EC2 上运行 2 个 tomcat 的实例
    • 是的,您可以运行 HA Proxy、nginx、apache 或其他东西 - 但这是一个不同的问题。您还可以通过使用 2 个 较小的 实例而不是 1 个大型实例来解决成本问题:2 x t2.small 的成本与 1 x t2.medium 相同。
    • 感谢指点,第一次听说蓝绿部署。我正在研究您建议的所有可能性。在您看来,最后一个问题是,在我目前的情况下,您可以提出的最佳解决方案是什么。
    • 鉴于信息有限,选择将您的一个盒子作为单点故障删除,因此 ELB 后面有 2 个较小的实例。然后您可以查看 Beanstalk 或其他服务,因为它使部署或回滚变得非常容易。
    猜你喜欢
    • 2021-05-19
    • 2013-07-20
    • 2018-05-17
    • 1970-01-01
    • 2023-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-08
    相关资源
    最近更新 更多