手动部署 VS Amazon Elastic Beanstalk

相对于手动创建 EC2实例、为典型的 java web 应用程序设置 tomcat 服务器和部署等,使用 Elastic Bean}有什么优势。负载平衡、监视和自动伸缩是唯一的优势吗?

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

36166 次浏览

您提到的所有事情,比如负载平衡、监视和自动伸缩,都绝对是优势。

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

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

弹性豆茎是一个 PAAS 系统,App Engine天蓝色以及其他许多系统也是如此。

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

In a PAAS system, the DBMS is a separate service. For Amazon, it would be 亚马逊 RDS. Just like with Elastic Beanstalk, where you don't have to worry about the application server and you just upload your WAR file, with RDS, you don't have to worry about the DBMS and you just deploy your database(s).

Elastic Bean}和 RDS 可以很好地协同工作,特别是当部署在相同的可用性区域时,那里的延迟非常低。

Finally, using Elastic Beanstalk doesn't cost anything more than the deployed resources (EC2 instances and the load balancer). However, RDS is not cheap and would definitely be more expensive than using a single EC2 instance for both the application server and the DBMS.

弹性豆茎不仅仅是负载平衡、监视和自动缩放。

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

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

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

4)通过控制台查看应用程序日志文件,并自动将日志文件滚动并归档到 S3。(不可否认,这个特性目前有点薄弱。)

我有一个应用程序部署在 EC2专用(Nginx & Gunicorn)和 BeanstalkEnvironment (CentOS & Apache2)。

My observations:

  • BeanStalk is Paas. Manually creating an EC2 instance(IAAS), is like doing everything from scratch, but you have solid control.

  • 在默认情况下,BeanStalk 附带 CentOS 和 Apache (Httpd) ,您可以在专用实例中选择 OS。

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

    • 豆茎环境中出现了大量的504个错误。
    • 当 BeanStalk 服务器崩溃时,很难进行调试,因为日志也不会显示,也不能 ssh 到计算机中。这很重要。
    • 在专用实例中安装/配置芹菜、 Redis (需要运行另一个端口)等工具要容易得多。
  • 在我的例子中,为了运行某些包(比如 pandoc)的安装,我必须扩展(Beanstalk)服务器。在 Ubuntu 中这些东西更简单。

  • 在 BeanStalk 中扩展要容易得多,而在 BeanStalk 中克隆服务器则非常简单。

  • 我在两种情况下都采用了微实例(专用和 Bean}) ,我觉得专用微实例更好。

  • 在 Beanstalk 的自动部署。我必须编写脚本来自动执行相同的操作,这很好,因为它只有一次。