117

What are the advantages we get by using Elastic Beanstalk over maually creating EC2 instance and setting up tomcat server and deploy etc for a typical java web applicaion. Are load balancing, Monitoring and autoscaling the only advantages?

Suppose for my web application which uses database I installed the database in the EC2 instance itself. When Autoscalling takes place will the database gets created in the newly created instance or it will be accessing the database I created in the master instance... If it creates just a replica when autoscaling happens how will be data sync happens between the instances?

4

3 回答 3

147

你提到的所有东西,比如负载平衡、监控和自动缩放,绝对是优势。

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

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

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 实例更昂贵。

于 2012-03-03T01:48:00.193 回答
38

Elastic Beanstalk 不仅仅是负载平衡、监控和自动扩展。

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

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

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

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

于 2012-10-07T01:53:00.667 回答
8

我在 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 中的自动部署。我必须编写脚本来自动化它,这很好,因为它只有一次。

于 2018-08-07T12:25:16.700 回答