我需要一个系统,可以自动扩展以处理任何数量的并发 web 请求(从每分钟 1000 个请求到每分钟 1000 万个请求),包括可以自动扩展的数据库层。
理想情况下,我希望能够高效地共享一些硬件资源,而不是为每个应用程序单独设置实例。过去,我主要使用 EC2 实例 + RDS + CloudFront + S3。
该堆栈系统将托管一些高流量的 Ruby on Rails 应用程序,这些应用程序正在从 Heroku 迁移,还有一些 Python/Django 应用程序和一些 PHP 应用程序。
所有这些都得到了 AWS 的全力支持。OpsWorks和Elastic Beanstalk已经为多种开发环境进行了优化(包括Ruby、Python和PHP在内),而EC2则提供了原始服务器,您可以安装任何您想要的东西。
OpsWorks是一种像Chef一样的编排工具,实际上,它是从Chef、Puppet、Ansible或Saltstalk中派生出来的。您可以使用Opsworks通过指定每个资源(服务器实例、应用程序、存储)所需要的状态来指定要将网络置于的状态,并通过为该状态的每个属性指定所需的值来指定您所需的每个资源的状态。例如,您可能希望始终启动Apache服务并在Apache用户和Apache Linux组下启动。
CloudFormation是一个json模板(**),用于指定要部署的资源的状态,例如您要在VPC 192.168.1.0/24的us-east-1中作为部署AWS EC2微型t2实例的一部分。对于EC2实例,您可以在EC2资源的用户数据部分中通过自定义bash脚本指定应在该资源上运行的内容。CloudFormation只是一个模板。仅当您通过AWS CloudFormation的管理控制台运行它或者运行Cloudformation的aws cli命令时,该模板才会构成一个正在运行的资源。
ElasticBeanstalk是一种PAAS-您可以上传专门为Ruby/Rails、Node.js或Python/Django或Python/Flask应用程序打包的内容。如果您运行的是Scala、Haskell或其他任何语言,请为其创建一个Docker镜像并将该Docker镜像上传到Elastic Beanstalk(*).
您可以通过运行CloudFormation的aws cli或创建Opsworks配方来将应用程序上传到Elastic Beanstalk。您还可以通过Opsworks运行Cloudformation的aws cli。
(*)实际上,AWS关于其Ruby应用程序示例的文档非常差,以至于我失去了耐心并将示例应用程序嵌入到Docker镜像中,并将该Docker镜像上传到Elastic Beanstalk。
(**)截至2016年9月,Cloudformation也支持YAML模板。
AWS Beanstalk: 使用弹性Beanstalk在AWS云中部署和管理应用程序,无需担心运行Web应用程序的基础架构。不需要担心EC2或其他安装。
AWS OpsWorks AWS OpsWorks是一种应用程序管理服务,可帮助新的DevOps用户对其整个应用程序进行建模和管理。
HA Proxy : custom, db-master, and memcached.
MySQL : custom, lb, memcached, monitoring-master, nodejs-app, php-app, rails-app, and web.
Java : custom, db-master, and memcached.
Node.js : custom, db-master, memcached, and monitoring-master
PHP : custom, db-master, memcached, monitoring-master, and rails-app.
Rails : custom, db-master, memcached, monitoring-master, php-app.
Static : custom, db-master, memcached.
Custom : custom, db-master, lb, memcached, monitoring-master, nodejs-app, php-app, rails-app, and web
Ganglia : custom, db-master, memcached, php-app, rails-app.
Memcached : custom, db-master, lb, monitoring-master, nodejs-app, php-app, rails-app, and web.
参考链接: http://docs.aws.amazon.com/opsworks/latest/userguide/layers.html
这个链接是关于AWS OpsWorks中“Layers”(层)的文档。在OpsWorks中,层是指一组EC2实例,它们都运行着相同类型的应用程序和服务。每个层有自己的配置参数、安装包和自定义脚本,以便方便地管理和部署应用程序。层可以被用来划分基础架构、协调任务和控制访问权限等。AWS OpsWorks - 这是AWS管理服务的一部分。它帮助使用脚本配置应用程序。它使用Chef作为该应用程序管理和操作的DevOps框架。有模板可用于配置服务器、数据库和存储。这些模板也可以自定义以执行任何其他任务。DevOps工程师可以控制应用程序的依赖项和基础设施。
AWS Beanstalk - 它为Java、Node Js、Python、Ruby Go等语言提供环境。Elastic Beanstalk提供资源来运行应用程序。开发人员无需担心基础设施,也无法控制基础设施。
AWS CloudFormation - CloudFormation具有示例模板,可按顺序管理AWS资源。
正如许多人评论的那样,AWS Beanstalk、AWS OpsWorks和AWS Cloud Formation为不同的问题提供了不同的解决方案。
为了实现
I am interested in a system that can be auto scaled to handle any high number of simultaneous web requests (From 1000 requests per minute to 10 million rpm.), including a database layer that can be auto scalable as well.
考虑到您正在进行迁移过程,我强烈建议您开始了解AWS Lambda和AWS DynamoDB解决方案(或混合解决方案)。
这两个解决方案都是为了简单地实现自动扩展而设计的,可能是一种非常便宜的解决方案。
如果您需要部署一个需要更新其EC2实例的应用程序,那么应该使用OpsWorks代替CloudFormation。如果您的应用程序使用了大量的AWS资源和服务,包括EC2,则应同时使用CloudFormation和OpsWorks。
如果您的应用程序需要其他AWS资源,例如数据库或存储服务。在这种情况下,使用CloudFormation来部署Elastic Beanstalk以及其他资源。
只需使用terraform和ECS或EKS。
opsworks、elastic beanstalk和cloudformation现在都是老技术了。-)