【问题标题】:手动部署与 Amazon Elastic Beanstalk
【发布时间】:2012-02-24 00:14:47
【问题描述】:

使用 Elastic Beanstalk 与手动创建 EC2 实例以及为典型的 Java Web 应用程序设置 tomcat 服务器和部署等相比有哪些优势。负载平衡、监控和自动缩放是唯一的优势吗?

假设我的 Web 应用程序使用数据库,我将数据库安装在 EC2 实例本身中。当自动缩放发生时,数据库将在新创建的实例中创建,或者它将访问我在主实例中创建的数据库......如果它在自动缩放发生时只创建一个副本,那么实例之间将如何发生数据同步?

【问题讨论】:

    标签: amazon-elastic-beanstalk


    【解决方案1】:

    我在 EC2 专用(Nginx 和 Gunicorn)和 Beanstalk 环境(CentOS 和 Apache2)中都部署了一个应用程序。

    我的观察:

    • BeanStalk 是 Paas。手动创建 EC2 实例 (IAAS) 就像从头开始做所有事情一样,但您拥有可靠的控制权。

    • BeanStalk 默认带有 CentOS 和 Apache(Httpd)。您可以选择专用实例中的操作系统。

    • 这些对我来说很重要的事情,

      • 在 Beanstalk 环境中出现大量 504 错误。
      • 当 BeanStalk 服务器崩溃时,调试很困难,因为日志也不会显示并且无法通过 ssh 连接到机器。这非常重要。
      • 安装/配置工具,如 Celery、Redis(需要运行另一个端口)等。在专用实例中更容易。
    • 就我而言,我必须扩展 (Beanstalk) 服务器才能运行某些软件包的安装(如 pandoc)。这些事情在 Ubuntu 中更简单。

    • 在 BeanStalk 中缩放要容易得多。在 BeanStalk 中克隆服务器很简单。

    • 在这两种情况下(专用和 Beanstalk)我都使用了微量。我觉得专用的微实例更好。

    • 在 Beanstalk 中自动部署。我必须编写脚本来自动化它,这很好,因为它只有一次。

    【讨论】:

      【解决方案2】:

      您提到的所有内容,例如负载平衡、监控和自动缩放,绝对是优势。

      但是,您必须这样考虑:在真正的Platform as a Service (PAAS) 中,目标是将应用程序与平台分离。作为开发人员,您只关心您的应用程序。该平台是“租”给您的。平台“实例”会为您自动更新、管理、扩展、平衡等。您只需上传您的 WAR 文件,它就可以工作(至少在理论上)。

      EC2 本身不是 PAAS。它更像 IAAS (Infrastructure as a Service)。您仍然需要处理服务器实例、在其上安装软件、保持更新等。

      Elastic Beanstalk 是一个 PAAS 系统。 App EngineAzure 也是如此。

      在真正的 PAAS 系统中,DBMS 是独立于 Web 应用程序服务器的组件。原因很明显:DBMS 不可能安装在正在用于应用程序服务器的实例上,因为实例是根据您的流量创建和销毁的,DBMS 会丢失!无论如何,将 DBMS 和应用程序服务器放在同一台机器/实例上通常不是一个好主意。

      在 PAAS 系统中,DBMS 是一项单独的服务。对于亚马逊,它将是Amazon RDS。就像使用 Elastic Beanstalk,您不必担心应用程序服务器,只需上传 WAR 文件,使用 RDS,您不必担心 DBMS,只需部署数据库。

      Elastic Beanstalk 和 RDS 可以很好地协同工作,尤其是在部署在延迟非常低的同一可用区时。

      最后,使用 Elastic Beanstalk 所花费的成本不会超过部署的资源(EC2 实例和负载均衡器)。但是,RDS 并不便宜,而且肯定会比为应用程序服务器和 DBMS 使用单个 EC2 实例更昂贵。

      【讨论】:

      • 说得很好。只是一个补充:您可以指定一个自定义 AMI 作为每个实例创建的基础。因此,例如,您可以使用所需的所有配置和应用程序自定义 Apache 映像,并将其用作基本 AMI(Beanstalk 环境配置中有一个自定义 AMI ID 字段)不过,运行时生成的数据确实会在每次实例终止时被删除(负载均衡器会这样做!)。
      • 让我措手不及的一件事是,Elastic Beanstalk 为每个部署的环境创建了一个负载均衡器。负载均衡器的运行成本并不高,但与微型实例的成本大致相同。
      • @KenLiu ,负载均衡器比微实例更强大。
      • @BigSack - 我想说的是 Elastic Beanstalk 应该是免费的,但 AWS 并没有明确表示每个环境都会分配一个负载均衡器,每个环境的成本约为 15 美元月。我没有与微型实例进行比较。
      • 据我所知,RDS 现在的价格几乎与 EC2 相当,同时提供了更高的实用性、可维护性和可靠性。
      【解决方案3】:

      Elastic Beanstalk 不仅仅提供负载平衡、监控和自动缩放功能。

      1) 通过存储和管理应用程序的不同版本来管理应用程序版本,让您可以轻松地在应用程序的不同版本之间来回切换。

      2) 对每个应用程序都有“环境”的概念,允许您在每个环境中部署不同版本的应用程序。例如,如果您想设置单独的 QA 和 DEV 环境,并且希望在 DEV 中轻松部署构建,然后当您的 QA 团队准备好下一次构建时,在 QA 中部署相同版本的应用程序,这很方便。

      3) 将重要的容器配置属性(例如 Tomcat 内存设置)外部化到 Elastic Beanstalk 控制台和 API。因此,您可以轻松保存设置并在环境之间复制它们。

      4) 通过控制台查看应用程序日志文件,并自动将日志文件滚动归档到S3。 (诚​​然,这个功能目前有点弱。)

      【讨论】:

      • 无论如何,在我的概念中,我认为他想了解性能,我不喜欢 beanstalk、部署故障和灾难情况,并且使用 LAMBDA 一切都可以相同或更好。很难,但它是高可用性的灵丹妙药。
      • 最后一点:您可以很好地将所有应用程序日志发送到 CloudWatch。
      猜你喜欢
      • 2013-06-14
      • 2014-03-06
      • 2013-03-05
      • 2014-12-13
      • 2015-12-17
      • 2018-09-15
      • 2015-09-20
      • 2019-02-13
      • 2018-06-01
      相关资源
      最近更新 更多