提问人:Bryan 提问时间:3/21/2012 最后编辑:Anna SBryan 更新时间:1/11/2023 访问量:243806
当 AWS 存在时,为什么人们会使用 Heroku?Heroku 与 AWS 的区别是什么?[关闭]
Why do people use Heroku when AWS is present? What distinguishes Heroku from AWS? [closed]
问:
我是一名初学者 RoR 程序员,计划使用 Heroku 部署我的应用程序。我的其他顾问朋友说 Heroku 真的很容易,很好用。唯一的问题是我仍然不知道 Heroku 是做什么的......
我看过他们的网站,简而言之,Heroku 所做的是帮助扩展,但是......为什么这很重要?Heroku 如何帮助:
速度 - 我的研究表明,如果我的目标是美国/亚洲的受众,那么在美国东海岸部署 AWS 将是最快的。
安全性 - 它们的安全性如何?
扩展 - 它实际上是如何工作的?
成本效益 - 有一种类似测功机的东西可以很容易地扩展。
他们如何与竞争对手抗衡?例如,Engine Yard 和 bluebox?
请使用通俗易懂的英语术语来解释...我是一个初学者程序员。
答:
首先,AWS 和 Heroku 是不同的东西。AWS 提供基础设施即服务 (IaaS),而 Heroku 提供平台即服务 (PaaS)。
有什么区别?非常近似地,IaaS 为您提供了在其上构建内容所需的组件;PaaS 为您提供了一个环境,您只需推送代码和一些基本配置,即可获得正在运行的应用程序。IaaS 可以为您提供更强大的功能和灵活性,但代价是必须自己构建和维护更多功能。
为了让您的代码在 AWS 上运行并看起来有点像 Heroku 部署,您需要一些 EC2 实例 - 您需要在其上安装负载均衡器/缓存层(例如 Varnish),您需要运行 Passenger 和 nginx 之类的实例来提供您的代码,您需要部署和配置类似 PostgreSQL 的集群数据库实例。您需要一个具有 Capistrano 之类的部署系统,以及执行日志聚合的功能。
设置和维护的工作量并非微不足道。使用 Heroku,达到这种阶段所需的工作可能是几行应用程序代码和一个 .git push
所以你已经走到了这一步,你想扩大规模。伟大。您正在使用 Puppet 进行 EC2 部署,对吗?因此,现在您将 Capistrano 文件配置为根据需要启动/关闭实例;您重新调整 Puppet 配置,以便 Varnish 知道 web-worker 实例,并自动在它们之间池化。或者你.heroku scale web:+5
希望这能让您了解两者之间的比较。现在解决您的具体问题:
速度
目前,Heroku 仅在 和 中的 AWS 实例上运行。对你来说,这听起来像是你想要的。对于其他人来说,这可能更像是一个考虑因素。us-east
eu-west
安全
我见过很多内部维护的生产服务器在安全更新方面远远落后,或者通常组合得很差。有了 Heroku,你就让其他人来管理这种事情,这要么是祝福,要么是诅咒,这取决于你如何看待它!
当你部署时,你实际上是在将你的代码直接交给 Heroku。这对您来说可能是一个问题。他们关于测功机隔离的文章详细介绍了他们的隔离技术(似乎在单个 EC2 实例上运行多个测功机)。几位同事对这些技术及其隔离强度表示了问题;唉,我没有足够的知识/经验来真正发表评论,但我目前的 Heroku 部署认为这“足够好”。这对你来说可能是个问题,我不知道。
缩放
我在上面的 IaaS 与 PaaS 比较中谈到了如何实现这一点。大约,您的应用程序有一个 ,它包含格式为 的行,例如(摘自 Heroku Architecture - The Process Model):Procfile
dyno_type: command_to_run
web: bundle exec rails server
worker: bundle exec rake jobs:work
这,带有:
heroku scale web:2 worker:10
将导致您有 2 个测功机和 10 个测功机运行。很好,简单,容易。请注意,这是一种特殊的测功机类型,可以访问外部世界,并且位于其漂亮的网络流量多路复用器(可能是某种 Varnish / nginx 组合)后面,该多路复用器将相应地路由流量。您的工作人员可能会与消息队列进行类似的路由交互,他们将通过环境中的 URL 从中获取位置。web
worker
web
成本效益
很多人对此有很多不同的看法。目前,测功机小时为 0.05 USD/小时,而 AWS 微型实例为 0.025 USD/小时,AWS 小型实例为 0.09 USD/小时。
Heroku 的 dyno 文档说你有大约 512MB 的 RAM,所以将 dyno 视为有点像 EC2 微型实例可能不是太不合理。它值得双倍的价格吗?你有多珍惜你的时间?在 IaaS 产品之上构建以使其达到此标准所需的时间和精力绝对不便宜。我真的无法为您回答这个问题,但不要低估设置和维护的“隐性成本”。
(有点题外话,但如果我从这里连接到测功机(),粗略地看一下就会显示 4 个内核和 36GB 的 RAM - 这让我相信我使用的是“高内存双超大型实例”。Heroku 测功机文档说每个测功机接收 512MB 的 RAM,因此我可能会与多达 71 个其他测功机共享。(我没有足够的关于 Heroku 的 AWS 实例同质性的数据,因此您的里程可能会有所不同))heroku run bash
/proc/cpuinfo
他们如何与竞争对手抗衡?
这个,恐怕我真的帮不了你。我唯一真正关注过的竞争对手是 Google App Engine——当时我正在寻求部署 Java 应用程序,对可用框架和技术的限制数量令人难以置信地令人反感。这不仅仅是“Java 的事情”——一般限制和必要的考虑因素(FAQ 暗示了几个)似乎不太方便。相比之下,部署到 Heroku 一直是一个梦想。
结论
如果存在差距/您想要解决的其他领域,请发表评论。我觉得我应该提出我的个人立场。我喜欢 Heroku 的“快速部署”。当我启动一个应用程序时,我想要一些便宜的托管(Heroku 免费层很棒 - 基本上如果你只需要一个 Web dyno 和 5MB 的 PostgreSQL,就可以免费托管一个应用程序),Heroku 是我的首选职位。对于“严肃的生产部署”,有几个付费客户,有服务水平协议,有专门的时间花在运营上,等等,我不能完全让自己把那么多的控制权交给 Heroku,然后 AWS 或我们自己的服务器一直是首选的托管平台。
归根结底,这是关于什么最适合你。你说你是“一个初学者程序员”——可能只是使用 Heroku 可以让你专注于编写 Ruby,而不必花时间围绕你的代码构建所有其他基础设施。我肯定会试一试。
请注意,AWS 实际上有一个 PaaS 产品 Elastic Beanstalk,它支持 Ruby、Node.js、PHP、Python、.NET 和 Java。我认为通常大多数人在看到“AWS”时都会跳转到 EC2、S3 和 EBS 之类的东西,它们绝对是 IaaS 产品
评论
正如克里斯蒂安·格拉斯(Kristian Glass)所说,IaaS(AWS)和PaaS(Heroku,EngineYard)之间没有可比性。
PaaS 基本上可以帮助开发人员加快应用程序的开发速度,从而节省资金,最重要的是创新他们的应用程序和业务,而不是设置配置和管理服务器和数据库等东西。使用 PaaS 购买的其他功能是应用程序部署过程,例如敏捷性、高可用性、监控、扩展/除垢、对专业知识的有限需求、易于部署以及降低成本和开发时间。
但是,PaaS 仍然存在阴暗面,这导致了 PaaS 采用的障碍:
- 减少对服务器和数据库的控制
- 如果管理不当,成本将非常高
- 在当今时代过早和可疑
除上述内容外,您还应该具备足够的技能来管理 IaaS:
- 硬件购置
- 操作系统
- 服务器软件
- 服务器端脚本环境
- 网页服务器
- 数据库管理系统(Mysql、Redis等)
- 配置生产服务器
- 用于测试和部署的工具
- 监控应用程序
- 高可用性
- 负载白化/Http 路由
- 服务备份策略
- 团队协作
- 重建生产
如果您的企业规模较小,PaaS 将是您的最佳选择:
- 现收现付
- 启动成本低
- 将管道交给专家
- PaaS 可处理自动缩放/除鳞、负载均衡、灾难恢复
- PaaS 管理所有安全要求
- PaaS 管理可靠性、高可用性
- Paas 为您管理许多第三方插件
这将完全是根据要求进行个人选择。您可以在我的 PPT Hosting Rails Apps 上获得详细信息。
评论
Thank you for your concerns. We assure you that we take security very seriously and run or systems on secure servers. There is no need to worry about [insert security issue here] as all that is handled by...
从开发、IT 和业务目标的角度来看待这个决定有很多不同的方法,所以如果它看起来势不可挡,不要感到难过。但是,也不要过度考虑可扩展性。
想想你的要求。
我设计的网站每天为超过 800 万个唯一用户提供服务,每周提供数 TB 的视频,这些视频建立在基础设施上,起价为 25 万美元,由大量 IT 员工$MM。
但我也有较小的网站,这些网站旨在每年产生 10-20 美元,没有很高的流量、数据库或处理要求,而且我毫不妥协地使用 10 美元/月的通用托管帐户运行这些网站。
在未来,部署看起来将更像 Heroku 而不是 AWS,只是因为进步。扩展互联网基础设施的 IT 旋钮转动价值为零,因为互联网基础设施的自动化程度越来越高,而且与您提供的产品或服务的价值无关。
另外,请记住,对于商业网站 - 可扩展性是我们通常所说的“好问题” - 尽管像Facebook和Twitter这样的网站的可扩展性问题非常引人注目,但它们对他们的成功没有负面影响 - 新闻甚至可能有助于更多的注册(所有媒体都是好新闻)。
如果您的服务每天生成 100k+ 唯一值并遇到扩展问题,无论您运行在哪种语言、数据库、平台或基础设施上,我都很乐意为您解除它!
可伸缩性是一个可以解决的实现问题 - 没有客户是一个存在的问题。
实际上,您可以同时使用两者 - 您可以使用 Amazon 服务器 ec2 开发应用程序。然后(使用 git)免费将其推送到 heroku 一段时间(使用 heroku 免费套餐将其提供给公众)并像这样测试它。与租用服务器相比,它非常划算,但您将不得不与限制性更强的 heroku api 交谈,这是您应该考虑的事情。资料来源:这种方法被用于我的一门在线课程“来自 Coursera/Stanford 的启动工程”,作者是 Balaji S. Srinivasan 和 Vijay S. Pande
评论
AWS / Heroku 对于小型爱好项目都是免费的(首先)。
如果您想立即启动一个应用程序,而无需对架构进行太多自定义,请选择 Heroku。
如果您想专注于架构并能够使用不同的 Web 服务器,请选择 AWS。根据您选择的服务/产品,AWS 会更耗时,但可能是值得的。AWS 还附带了许多插件服务和产品。
希罗库
- 平台即服务 (PAAS)
- 良好的文档
- 具有内置工具和架构。
- 在设计应用时,对体系结构的控制有限。
- 负责部署(通过 GitHub 自动部署,或通过 git 命令或 CLI 手动部署)。
- 不费时。
AWS系统
- 基础架构即服务 (IAAS)
- 用途广泛 - 拥有 EC2、LAMBDA、EMR 等多种产品。
- 可以使用专用实例对架构进行更多控制,例如选择操作系统、软件版本等。有多个后端层。
- Elastic Beanstalk 是一项类似于 Heroku 的 PAAS 的功能。
- 可以使用自动部署,也可以自行部署。
评论
在我们的业务中,将人员从 Heroku 迁移到 AWS 的比例很高。两者都有优势,但过了一会儿 Heroku 就变得一团糟了......一旦您需要一定程度的复杂性,Heroku 的局限性就不再容易维护了。
也就是说,通过在 AWS 上使用出色的框架/工具,有越来越多的选择来获得 Heroku 的易用性和 AWS 的灵活性。
评论
好吧,人们通常会问这个问题:Heroku 或 AWS 在开始部署某些东西时。
我同时使用 Heroku 和 AWS 的实验,以下是我的快速回顾和比较:
希罗库
- 一个命令即可部署任何项目类型:Ruby on Rails、Nodejs
- 如此多的一键式集成插件和第三方:从某件事开始非常容易。
- 没有自动缩放;这意味着您需要手动扩展/缩减
- 成本是昂贵的,特别是当系统需要更多资源时
- 提供免费实例
- 如果空闲实例处于非活动状态,则该实例将进入睡眠状态。
- 数据中心:仅限美国和欧盟
- 可以使用(感谢 MJafar Mash 的建议)潜入/访问机器级别,但它有点有限!您没有完全访问权限!
Heroku run bash
- 不需要对DevOps了解太多
AWS - EC2
- 这就像一台具有预配置操作系统(或没有)的机器一样,因此您需要安装软件、库才能使您的网站/服务上线。
- 插件和库需要手动集成,或者自动化脚本(公共脚本和你编写)
- Auto Scaling 和负载均衡器是受支持的服务,只需了解如何配置和集成到您的系统中即可
- 成本相当便宜,取决于您使用它的服务和小时数
- T2.micro 实例有几个小时的空闲时间,但通常,您每月只需支付几美元(如果仍在使用 T2.micro)
- 您的免费实例不会进入睡眠状态,24/7 全天候可用(因为您可能会:)付费)
- 数据中心:遍布全球。选择最适合您的地区。
- 潜入机器级别。所以你可以享受它
- 对DevOps有一些了解,但没关系,Stackoverflow在那里很有帮助!
AWS Elastic Beanstalk 是 Heroku 的替代品,但更便宜
Elastic Beanstalk 于 2010 年宣布为公开测试版;它帮助我们更轻松地进行部署。详情请点击这里
Beanstalk是免费的,您将支付的费用将为您使用的服务和使用小时数支付。
我使用 Elastic Beanstalk 很长一段时间,我认为它可以替代 Heroku,而且更便宜!
总结
- Heroku:开始时很容易,免费实例,但后来很贵
- AWS:不容易,有空闲时间,有点便宜,Beanstalk应该注意使用
因此,在我当前的系统中,我使用 Heroku 进行暂存,使用 Beanstalk 进行生产!
评论
Use Heroku for staging, and Beanstalk for production!
heroku run bash
并且您可以获得测功机的外壳访问权限
现有的答案大致准确:
Heroku 非常易于使用和部署,可以轻松配置为自动部署存储库(例如 GitHub),具有许多第三方附加组件,并且每个实例收费更高。
AWS 拥有范围更广、价格具有竞争力的第一方服务,包括 DNS、负载均衡、廉价文件存储,并具有能够定义安全策略等企业功能。
对于 tl;博士跳到这篇文章的结尾。
AWS ElasticBeanstalk 尝试提供类似 Heroku 的自动扩展和轻松部署平台。由于它使用 EC2 实例(它自动创建),因此 EB 服务器可以执行任何其他 EC2 实例可以执行的所有操作,而且运行成本低廉。
使用 EB 进行部署非常慢;部署更新可能需要每台服务器 10-15 分钟,部署到更大的集群可能需要一个小时的大部分时间,而在 Heroku 上部署更新只需几秒钟。EB 上的部署也不是特别无缝地处理,这可能会对应用程序设计造成限制。
您可以使用 ElasticBeanstalk 在后台使用的所有服务来构建自己的定制系统(使用 CodeDeploy、Elastic Load Balancer、Auto Scaling 组 - 以及 CodeCommit、CodeBuild 和 CodePipeline,如果您想全力以赴),但您绝对可以在第一次设置它时花几周时间,因为它相当复杂,而且比仅在 EC2 中配置内容稍微棘手。
AWS Lightsail 提供了价格具有竞争力的托管选项,但对部署或扩展没有帮助 - 它实际上只是其 EC2 产品的包装器(但成本要高得多)。它允许您在初始设置时自动运行 bash 脚本,这很好,但与仅设置 EC2 实例的成本相比(您也可以通过编程方式进行),它很昂贵。
关于比较的一些想法(尝试回答问题,尽管是以迂回的方式):
不要低估系统管理的工作量,包括使用安全补丁(以及偶尔的操作系统更新)使您安装的所有内容保持最新状态。
不要低估自动部署、自动扩展以及 SSL 预置和配置的好处。
使用 Heroku 可以毫不费力地更新 Git 存储库时自动部署。它几乎是即时的、优雅的,因此最终用户不会中断,并且可以设置为仅在测试/持续集成通过时更新,这样您就不会在部署损坏的代码时破坏您的站点。
您也可以使用 ElasticBeanstalk 进行自动部署,但请准备好在第一次设置时花一周时间进行设置 - 您可能需要更改部署和构建资产(如 CSS 和 JS)的方式,以使用 ElasticBeanstalk 处理部署的方式,或者将逻辑构建到您的应用程序中以处理部署。
在估算成本时请注意,为了在 EB 上不中断的情况下进行无缝部署,您需要运行多个实例 - EB 会单独向每个服务器推出更新,以便您的服务不会降级 - 当 Heroku 为您启动一个新的测功机并弃用旧服务时,直到处理完对它的所有请求(然后它会删除它)。
有趣的是,使用 EB 运行多台服务器的托管成本可能比单个 Heroku 实例便宜,尤其是在包括附加组件成本的情况下。
其他一些问题没有具体问到,但由其他答案提出:
使用不同的提供商进行生产和开发是一个坏主意。
我很害怕人们提出这个建议。虽然理想情况下,代码应该在任何合理的平台上运行良好,因此它尽可能具有可移植性,但每个主机上的软件版本会有很大差异,仅仅因为代码在暂存中运行并不意味着它将在生产中运行(例如,主要的 Node.js/Ruby/Python/PHP/Perl 版本可能会在使代码不兼容的方式上有所不同, 通常以无声的方式,即使你有不错的测试覆盖率,也可能无法被发现)。
一个好主意是利用像 Heroku 这样的东西进行原型设计、小型项目和微型网站——这样你就可以快速构建和部署东西,而无需在配置和维护上投入大量时间。
在做出该决定时,请务必考虑运行生产和预生产实例的成本,不要忘记复制整个环境的成本(包括第三方服务,如数据存储/附加组件、安装和配置 SSL 等)。
如果使用 AWS,请警惕来自 Bitnami 等供应商的 AWS 预配置实例 - 它们是一场安全噩梦。默认情况下,它们可以暴露许多臭名昭著的易受攻击的应用程序,而无需在描述中提及它。
相反,请考虑只使用一个支持良好的主流发行版,例如 Ubuntu 或 Debian(如果您需要 RPM 支持,则使用 CentOS)。
注意:Amazon 产品有自己的发行版,称为 Amazon Linux,它使用 RPM,但它是特定于 EC2 的,并且不太受第三方/开源软件的支持。
您还可以在 AWS(或 Lightsail)上设置一个 EC2 实例,并在其上配置类似 flynn 或 dokku 之类的东西 - 然后您可以轻松地在其上部署多个站点,如果您维护大量服务或希望能够轻松启动新事物,这可能是值得的。但是,设置它并不像仅使用 Heroku 那样自动魔术,您最终可能会花费大量时间来配置和维护它(以至于我发现使用 Amazon 集群和 Docker Swarm 进行部署比设置它们更容易;YMMV)。
我同时使用了 AWS EC 实例(单独使用和集群使用)、Elastic Beanstalk、Lightsail 和 Heroku,具体取决于我正在处理的项目的需求。
我讨厌花时间配置服务,但如果我把 Heroku 用于所有事情,我的 Heroku 账单每年将达到数千美元,而 AWS 的成本只是其中的一小部分。
tl;博士
如果钱从来都不是问题,我会将 Heroku 用于几乎所有事情,因为它可以节省大量时间,但我仍然希望将 AWS 用于更复杂的项目,在这些项目中,我需要 Heroku 无法提供的灵活性和更高级的服务。
对我来说,理想的情况是 ElasticBeanstalk 的工作方式更像 Heroku,即配置更简单、部署机制更快、更好。
now.sh 服务几乎就是这样的一个例子,它实际上在后台使用 AWS,但使部署和集群像在 Heroku 上一样简单(具有自动 SSL、DNS、优雅部署、超级简单的集群设置和管理)。
我已经在Node.js应用程序和Docker映像部署中大量使用它,主要警告是实例是共享的(这反映在它们较低的成本上),目前没有购买专用实例的选项。但是,他们的开源部署工具“now”也可用于部署到 AWS 以及 Google Cloud 和 Azure 上的专用实例。
Amazon Web Services (AWS) 提供从 IaaS 到 PaaS 的大量服务,保证 99.9999999% 的数据和基础设施的持久性和可用性。AWS 提供基础设施自动化以及多种工具,供开发人员流水线化其应用程序部署过程。
另一方面,Heroku 只是 PaaS,它提供在其云上管理平台的服务。无论是在基础设施还是安全性方面,它都无法与 AWS 相提并论。
评论
井!我观察到 Heroku 在崭露头角和新生的开发人员中很有名,而 AWS 则拥有高级开发人员角色。DigitalOcean也是这一领域的主要参与者。Cloudways 使只需单击 DigitalOcean 和 AWS 即可轻松创建 Lamp 堆栈。单击一下即可更新所有服务和包,这比手动执行所有操作要好得多。
您可以在此处完整查看: 如何在 Amazon AWS EC2 上托管 PHP
有趣的是,Heroku 实际上在后端使用了 AWS。它消除了所有开销,并为您在 EC2 上进行架构管理。(在面试中从一家大公司的高级工程师那里获得了这些知识)
有时,我想知道为什么人们会将 AWS 与 Heroku 进行比较。AWS是一个IAAS(基础设施即服务),它清楚地说明了系统的健壮性和计算能力。另一方面,Heroku 只是一个 SAAS,它基本上只是 AWS 服务的一小部分。那么,当您可以使用 Heroku 将您的第一个产品运送到 Prime 时,为什么还要为 AWS 而苦恼呢?
Heroku 是免费、简单且易于将几乎所有类型的堆栈部署到 Web 的。Heroku 专门用于在短时间内绕过将应用程序运送到实时服务器的所有麻烦。
不过,您可能希望使用双方的任何教程来部署应用程序,并进行比较
好吧,Heroku 在后台使用 AWS,这完全取决于您需要的解决方案类型。如果您是核心 linux 和 devops 人员,您不必担心从头开始创建 vm,例如选择 ami 选择 palcement 选项等,您可以使用 AWS。如果你想在表面上做事而没有那些网络,你可以选择heroku。
评论
尽管 AWS 和 Heroku 都是云平台,但它们是不同的,因为 AWS 是 IaaS,而 Heroku 是 PaaS
评论
Heroku 就像 AWS 的子集。它只是平台即服务,而 AWS 可以作为任何内容和任何级别实施。
实现取决于业务需求。如果它适合其中任何一个,请相应地使用。
评论
production