为什么人们在AWS出现时会使用Heroku? Heroku与AWS的区别是什么?

时间:2012-03-21 10:00:54

标签: ruby-on-rails heroku amazon-web-services

我是初学者RoR程序员,他计划使用Heroku部署我的应用程序。来自我的其他顾问朋友的话说,Heroku非常简单,易于使用。唯一的问题是我仍然不知道Heroku做了什么......

我看过他们的website,简而言之,Heroku所做的是帮助缩放但是......为什么这甚至重要? Heroku如何帮助:

  1. 速度 - 我的研究表明,如果我定位到美国/亚洲的受众群体,那么在美国东海岸部署AWS将是最快的。

  2. 安全性 - 它们有多安全?

  3. 缩放 - 它实际上是如何工作的?

  4. 成本效率 - 有类似dyno的东西可以轻松扩展。

  5. 他们如何与竞争对手竞争?例如,Engine Yardbluebox

  6. 请使用非专业英语术语来解释......我是初学程序员。

16 个答案:

答案 0 :(得分:2009)

首先,AWS和Heroku是不同的东西。 AWS提供基础架构即服务(IaaS),而Heroku提供平台即服务(PaaS)。

区别是什么?非常接近,IaaS为您提供了所需的组件,以便在其上构建内容; PaaS为您提供了一个环境,您只需按下代码和一些基本配置,即可获得正在运行的应用程序。 IaaS可以为您提供更多的功能和灵活性,但代价是必须自己构建和维护更多。

要让您的代码在AWS上运行并且看起来有点像Heroku部署,您将需要一些EC2实例 - 您需要在其上安装负载均衡器/缓存层(例如{{3} }),您希望运行类似VarnishPassenger的实例来为您的代码提供服务,您希望部署和配置类似{{3}的集群数据库实例}。您需要一个类似nginx的部署系统,以及进行日志聚合的部署。

建立和维护这项工作并不是一项微不足道的工作。使用Heroku,进入那种阶段所需的努力可能是几行应用程序代码和git push

所以,你这么远,你想扩大规模。大。您正在使用PostgreSQL进行EC2部署,对吗?因此,现在您可以根据需要配置Capistrano文件以启动/关闭实例;你重新点击你的Puppet配置,这样Varnish就会知道web-worker实例,并会自动在它们之间进行池化。或者你heroku scale web:+5

希望这能让您了解两者之间的比较。现在解决您的具体问题:

速度

目前Heroku仅在us-easteu-west的AWS实例上运行。对你来说,这听起来像你想要的。对于其他人来说,这可能是一个更重要的考虑因素。

安全

我已经看到许多内部维护的生产服务器落后于安全更新,或者通常很难整合在一起。使用Heroku,你有其他人管理那种事情,这可能是一种祝福或诅咒,取决于你如何看待它!

部署时,您可以有效地将代码直接交给Heroku。这可能是一个问题。他们关于Capistrano的文章详述了他们的隔离技术(似乎多个dynos在各个EC2实例上运行)。几位同事表达了这些技术的问题和隔离的强度;我真的没有足够的知识/经验来评论,但是我目前的Heroku部署认为"足够好"。这对你来说可能是一个问题,我不知道。

缩放

我谈到了如何在上面的IaaS vs PaaS比较中实现这一点。大概,您的应用程序有一个Procfile,其行格式为dyno_type: command_to_run,例如(来自Puppet):

web:    bundle exec rails server
worker: bundle exec rake jobs:work

这,带有:

heroku scale web:2 worker:10

将导致您有2个web dynos和10个worker dynos在运行。很好,简单,容易。请注意,web是一种特殊的dyno类型,它可以访问外部世界,并且位于其良好的Web流量多路复用器(可能是某种Varnish / nginx组合)之后,它们将相应地路由流量。您的工作人员可能会与消息队列进行交互以进行类似的路由,然后他们将通过环境中的URL获取该位置。

成本效率

很多人对此有很多不同的看法。目前,dyno小时为0.05美元/小时,相比之下,AWS微型实例为0.025美元/小时,AWS小型实例为0.09美元/小时。

Heroku的Dyno Isolation说你有大约512MB的RAM,因此将dyno视为有点像EC2微型实例可能不太太多不合理。是否值得双倍的价格?你重视你的时间多少钱?在IaaS产品之上构建以达到此标准所需的时间和精力绝对不便宜。我无法为你回答这个问题,但不要低估这些隐藏的成本'设置和维护。

(稍等一下,但如果我从这里连接到dyno(heroku run bash),粗略的外观显示/proc/cpuinfo中的4个内核和36GB内存 - 这让我相信我正在使用http://devcenter.heroku.com/articles/process-model .Heroku dyno documentation说每个dyno都有512MB的RAM,所以我可能会与其他71个dynos共享。(我不会有关Heroku的AWS实例的同质性的足够数据,所以你的milage可能会有所不同))

他们如何与竞争对手竞争?

这,我担心我无法帮助你。我唯一真正关注的竞争对手是"High-Memory Double Extra Large Instance" - 当时我正在寻找部署Java应用程序,而dyno documentation令人难以置信的反感。这不仅仅是一个Java事物而已。 - 一般限制的数量和必要的考虑因素(Google App Engine几个提示)似乎不太方便。相比之下,部署到Heroku一直是个梦想。

结论

我希望这可以回答您的问题(如果您有任何差距/其他方面需要解决,请发表评论)。我觉得我应该提供个人立场。我喜欢Heroku的快速部署"。当我开始申请时,我想要一些廉价的托管(Heroku免费套餐很棒 - 基本上如果你只需要一个网络dyno和5MB的PostgreSQL,它可以免费托管应用程序),Heroku是我的首选职位。对于"严肃的生产部署"有几个付费客户,有服务水平协议,有专门的时间花在操作上等等,我无法让自己将这么多控制权交给Heroku,然后AWS或我们自己的服务器都有一直是首选的托管平台。

归根结底,它是关于什么最适合你的。你说你是一个初学程序员" - 可能只是使用Heroku会让你专注于编写Ruby,而不必花时间在你的代码周围建立所有其他基础设施。我一定要试一试。


请注意,AWS实际上有一个PaaS产品the amount of restrictions on usable frameworks and technologies,它支持Ruby,Node.js,PHP,Python,.NET和Java。我认为大多数人,当他们看到" AWS"时,会跳到像EC2和S3以及EBS这样的东西,它们肯定是IaaS产品

答案 1 :(得分:192)

AWS / Heroku对于小型业余爱好项目都是免费的(首先)。

如果您想立即启动应用,而无需对架构进行太多自定义,请选择 Heroku

如果您想专注于架构并能够使用不同的Web服务器,请选择 AWS 。根据您选择的服务/产品,AWS更耗时,但值得。 AWS还提供了许多插件服务和产品。

<强>的Heroku

  • 平台即服务(PAAS)
  • 良好的文档
  • 内置工具和架构。
  • 设计app时对架构的控制有限。
  • 处理部署(通过GitHub自动或通过git命令或CLI手动)。
  • 不耗时。

<强> AWS

  • 基础设施即服务(IAAS)
  • 多功能 - 有许多产品,如EC2,LAMBDA,EMR等。
  • 可以使用专用实例来更好地控制体系结构,例如选择操作系统,软件版本等。有多个后端层。
  • Elastic Beanstalk是一个类似于Heroku的PAAS的功能。
  • 可以使用自动部署,也可以自行部署。

答案 2 :(得分:63)

正如Kristian Glass所说,IaaS(AWS)和PaaS(HerokuEngineYard)之间没有比较。

PaaS基本上可以帮助开发人员加速应用程序的开发,从而节省资金,最重要的是创新他们的应用程序和业务,而不是设置配置和管理服务器和数据库之类的东西。购买使用PaaS的其他功能是应用程序部署过程,例如敏捷性,高可用性,监控,扩展/除垢,对专业知识的有限需求,易于部署以及降低的成本和开发时间。

但PaaS仍然存在一个黑暗的一面,导致PaaS采用的障碍:

  • 对服务器和数据库的控制较少
  • 如果管理不当,费用将非常高
  • 当前时代的早熟和可疑

除此之外,你应该有足够的技能来管理你的IaaS:

  • 硬件采购
  • 操作系统
  • 服务器软件
  • 服务器端脚本环境
  • 网络服务器
  • 数据库管理系统(Mysql,Redis等)
  • 配置生产服务器
  • 测试和部署工具
  • 监控应用
  • 高可用性
  • 加载Blancing / Http路由
  • 服务备份政策
  • 团队协作
  • 重建生产

如果您的业务规模较小,PaaS将是您的最佳选择:

  • 按需付款
  • 启动成本低
  • 将管道留给专家
  • PaaS处理自动扩展/降级,负载平衡,灾难恢复
  • PaaS管理所有安全要求
  • PaaS管理可靠性,高可用性
  • Paas为您管理许多第三方插件

根据要求完全是个人选择。您可以在我的PPT Hosting Rails Apps上找到详细信息。

答案 3 :(得分:31)

从开发,IT和业务目标看这个决策有很多不同的方法,所以如果看起来压倒性的话,不要感到难过。但也 - 不要过度思考可扩展性。

考虑您的要求

我设计的网站每天提供超过800万的独立服务,每周提供数TB的视频,建立在基础设施上,资金硬件价格高达25万美元,由一个巨大的MM工资人员负担。

但我也有一些较小的网站,这些网站的设计目标是每年产生10到2万美元,没有非常高的流量,数据库或处理要求,而且我还是在10美元/月的通用主机帐户上运行这些网站而不妥协

将来,由于进步,部署将看起来更像Heroku而不是AWS。在互联网基础设施扩展的IT旋钮中没有任何价值,这种基础设施不会越来越自动化,并且没有任何与您提供的产品或服务的价值有任何关系。

此外,请记住商业网站 - 可扩展性是我们通常所说的'好问题' - 尽管Facebook和Twitter等网站的可扩展性问题非常引人注目,但它们对其成功的负面影响为零 - 新闻可能甚至贡献了更多的注册(所有媒体都很好)。

如果您的服务每天产生100k +唯一身份并且存在扩展问题,那么无论您运行的语言,数据库,平台或基础架构是什么,我都很乐意为您提供服务。 !

可伸缩性是一个可修复的实现问题 - 没有客户是一个存在问题。

答案 4 :(得分:30)

实际上你可以同时使用它们 - 你可以用亚马逊服务器ec2开发一个应用程序。然后将它(使用git)免费推送到heroku一段时间(使用heroku免费套餐向公众提供)并进行测试。与租用服务器相比,这是非常划算的,但你必须与更严格的heroku api交谈,这是你应该考虑的事情。资料来源:我的在线课程“Balaji S. Srinivasan和Vijay S. Pande的Coursera / Stanford的启动工程”采用了这种方法

Added a scheme so my explanation will be easier to understand

答案 5 :(得分:25)

现有答案大致准确:

  • Heroku非常易于使用和部署,可以轻松配置为自动部署存储库(例如GitHub),拥有大量第三方附加组件,并且每个实例收费更高。

    < / LI>
  • AWS拥有更广泛的价格具有竞争力的第一方服务,包括DNS,负载平衡,廉价文件存储,并具有能够定义安全策略的企业功能。

tl; dr 跳到本帖末尾。

AWS ElasticBeanstalk尝试提供类似Heroku的自动扩展和轻松部署平台。由于它使用EC2实例(它自动创建),EB服务器可以执行任何其他EC2实例可以执行的任何操作,并且运行起来很便宜。

使用EB进行部署非常缓慢;部署更新可能需要每个服务器10-15分钟,而部署到更大的集群可能需要花费一个小时的最佳时间 - 而在Heroku上部署更新只需几秒钟。 EB上的部署也没有得到特别无缝的处理,这可能会对应用程序设计施加限制。

你可以使用ElasticBeanstalk在幕后使用的所有服务来构建你自己的定制系统(使用CodeDeploy,Elastic Load Balancer,Auto Scaling Groups - 以及CodeCommit,CodeBuild和CodePipeline,如果你想全力以赴)但你绝对可以花费几周的时间来设置它是第一次,因为它比仅仅在EC2中配置的东西相当复杂且略显琐碎。

AWS Lightsail提供价格具有竞争力的托管选项,但对部署或扩展没有帮助 - 它实际上只是其EC2产品的包装(但成本更高)。它允许您在初始设置时自动运行bash脚本,这是一个很好的触摸,但与仅设置EC2实例(您也可以通过编程方式)的成本相比,它是昂贵的。

关于比较的一些想法(试图回答问题,尽管是以迂回的方式):

  1. 不要低估系统管理工作量,包括使用安全补丁(以及偶尔的操作系统更新)保持最新安装的所有内容。

  2. 不要低估自动部署,自动扩展以及SSL配置和配置的好处。

    使用Heroku轻松更新Git存储库时的自动部署。它几乎是即时的,优雅的,因此最终用户没有中断,并且只有在测试/持续集成通过时才能设置为更新,因此如果部署损坏的代码,您不会破坏您的站点。

    您也可以使用ElasticBeanstalk进行自动部署,但要准备好第一次花一周时间进行设置 - 您可能必须更改部署和构建资产(如CSS和JS)的方式,以便使用ElasticBeanstalk处理部署的方式或者在你的应用程序中构建逻辑来处理部署。

    请注意估算无缝部署的成本,而不需要中断EB,您需要运行多个实例 - EB分别为每个服务器推出更新,以便您的服务不会降级 - Heroku为您启动新的dyno并且只是弃用旧服务,直到处理完所有请求(然后删除它)。

    有趣的是,使用EB运行多台服务器的托管成本可能比单个Heroku实例便宜,特别是一旦包含附加组件的成本。

  3. 其他一些问题没有特别提及,但其他答案提出来了:

    1. 使用不同的提供商进行生产和开发是一个坏主意。

      我在说人们在暗示这一点。理想情况下,代码应该在任何合理的平台上运行得很好,因此它尽可能便携,每个主机上的软件版本会有很大差异,因为代码在分段中运行并不意味着它将在生产中运行(例如,主要的Node.js / Ruby / Python / PHP / Perl版本在使代码不兼容的方式上可能有所不同,通常以无声的方式,即使你有不错的测试覆盖率也可能无法捕获。)

      有一个好主意是利用Heroku之类的东西进行原型设计,小型项目和微型网站 - 这样您就可以快速构建和部署内容,而无需在配置和维护上投入大量时间。

      确保在做出决策时考虑运行生产和预生产实例的成本,而不是忘记复制整个环境的成本(包括第三方服务,如数据存储/添加,安装和配置SSL)等等。)

    2. 如果使用AWS,请注意来自Bitnami等供应商的AWS预配置实例 - 它们是安全噩梦。它们可以默认暴露许多臭名昭着的易受攻击的应用程序而不在说明中提及它。

      请考虑使用支持良好的主流发行版,例如Ubuntu或Debian(如果需要RPM支持,则使用CentOS)。

      注意:亚马逊产品有自己的发行版,名为亚马逊Linux,它使用RPM,但它具有EC2特定性,并且不受第三方/开源软件的支持。

    3. 您还可以在AWS(或Lightsail)上设置EC2实例,并在其上配置flynndokku之类的内容,然后您可以轻松地在其上部署多个站点,这可以如果你保持很多服务或希望能够轻松地开发新东西,那么它是值得的。然而,设置它并不像只使用Heroku那样自动化,你最终可能会花费大量时间来配置和维护它(我发现使用Amazon集群和Docker Swarm进行部署比设置它们更容易up; YMMV)。

    4. 我根据我正在进行的项目的需要,同时使用了AWS EC实例(单独和群集),Elastic Beanstalk和Lightsail以及Heroku。

      我讨厌花时间配置服务,但是如果我将它用于所有事情而我的Heroku账单将是每年数千,而AWS的成本只是其中的一小部分。

      <强> TL;博士

      如果钱永远不成问题,我会将Heroku用于几乎所有事情,因为它节省了大量时间 - 但我仍然希望将AWS用于更复杂的项目,我需要灵活性和更多Heroku不提供的高级服务。

      对我来说理想的情况是,如果ElasticBeanstalk更像是Heroku - 即配置更简单,更快,更好的部署机制。

      几乎就是的服务的一个示例是now.sh,它实际上在幕后使用AWS,但使部署和群集像在Heroku上一样简单(使用自动SSL) ,DNS,优雅的部署,超级简单的集群设置和管理)。

      我对Node.js应用程序和Docker镜像部署都使用了很多,主要的警告是实例是共享的(反映在它们较低的成本中),目前没有购买专用实例的选项。然而,他们的开源部署工具“现在”#39;也可以用于部署到AWS以及Google Cloud和Azure上的专用实例。

答案 6 :(得分:23)

嗯,人们通常会在开始部署内容时提出这个问题:Heroku或AWS。

我使用Heroku&amp; amp;的实验AWS,这是我的快速回顾和比较:

<强>的Heroku

  • 一个部署任何项目类型的命令:Ruby on Rails,Nodejs
  • 如此多的单击以集成插件和放大器第三方:从一开始就非常容易。
  • 没有自动缩放功能;这意味着您需要手动放大/缩小
  • 成本很高,尤其是当系统需要更多资源时
  • 免费实例
  • 如果免费实例处于非活动状态,则会进入休眠状态。
  • 数据中心:美国和美国仅限欧盟
  • 使用Heroku run bash(感谢MJafar Mash的建议),可以潜入/访问机器级别,但它有点受限!您没有完全访问权限!
  • 不要过多地了解DevOps

AWS - EC2

  • 这就像具有预配置操作系统(或不配置)的计算机一样,因此您需要安装软件,库以使您的网站/服务上线。
  • 插件&amp;库需要手动集成,或自动化脚本(公共脚本和由您编写)
  • 自动缩放&amp;负载均衡器是支持的服务,只需学习如何配置&amp;集成到您的系统
  • 成本相当便宜,取决于您使用它的服务和小时数
  • T2.micro实例有几个免费时间,但通常情况下,你每月需要支付几美元(如果仍然使用T2.micro)
  • 您的免费实例无法全天候上网(因为您可能需要付费:))
  • 数据中心:遍布全球。选择最适合您的区域。
  • 潜入机器级别。所以你可以享受它
  • 关于DevOps的一些知识,但没关系,Stackoverflow在那里很有帮助!

AWS Elastic Beanstalk 是Heroku的替代品,但更便宜

  • Elastic Beanstalk从2010年宣布为公开测试版;它有助于我们更轻松地部署。有关详细信息,请转到here

  • Beanstalk是免费的,您将支付的费用将用于您使用的服务&amp;使用小时数。

  • 我使用Elastic Beanstalk很长一段时间了,我认为它可以替代Heroku而且更便宜!

<强>摘要

  • Heroku:开始时很容易,免费实例,但后来很贵
  • AWS:不容易,可用的免费时间,更便宜,应该关注使用Beanstalk

所以在我目前的系统中,我使用Heroku进行分段,使用Beanstalk进行生产!

答案 7 :(得分:6)

我们将业务从Heroku迁移到AWS的业务占很大比例。两者都有优势,但是在一段时间之后它会在Heroku上变得混乱......一旦你需要一定程度的复杂性,不再容易用Heroku的限制来维护。

也就是说,通过使用优秀的框架/工具在AWS上提供Heroku的轻松性和AWS的灵活性的选择越来越多。

答案 8 :(得分:1)

嘛!我观察员Heroku在萌芽和新生的开发人员中很有名,而AWS拥有先进的开发人员角色。 DigitalOcean也是这方面的主要参与者。通过点击DigitalOcean和AWS,Cloudways可以轻松创建Lamp堆栈。单击所有服务和软件包更新比手动完成所有操作要好得多。

您可以在此处完整查看:https://www.cloudways.com/blog/host-php-on-aws-cloud/

答案 9 :(得分:1)

有趣的是Heroku实际上在后端使用AWS。它消除了所有开销,并为您进行EC2的架构管理。 (在面试中从大公司的高级工程师那里获得了知识)

答案 10 :(得分:0)

亚马逊网络服务(AWS)提供从IaaS到PaaS的大量服务,确保99.9999999%的耐用性和数据及基础设施的可用性。 AWS提供基础架构自动化以及多种工具,供开发人员管理其应用程序部署过程。

另一方面,Heroku只是PaaS,它提供在云上管理平台的服务。无论是基础设施还是安全,它都无法与AWS站在一起。

答案 11 :(得分:0)

有时,我想知道为什么人们将AWS与Heroku进行比较。 AWS是IAAS(基础架构即服务),它清楚地说明了系统的健壮性和计算能力。另一方面,Heroku只是一个SAAS,基本上只是AWS服务的一小部分。因此,当您可以使用Heroku将第一个产品交付到主要产品时,为什么还要为设置AWS而苦恼。

Heroku是免费,简单且易于将几乎所有类型的堆栈部署到Web的。 Heroku专为绕过将您的应用程序运送到实时服务器中的所有麻烦而设计,而该过程很快就会完成。

尽管如此,您可能希望使用双方的任何教程来部署应用程序并进行比较

AWS DOCSHeroku Docs

答案 12 :(得分:0)

Heroku会在后台使用AWS,这完全取决于您所需的解决方案类型。如果您是Linux和devops的核心人物,那么您不必担心从头开始创建vm(例如选择ami选择palcement选项等),则可以使用AWS。如果您想在表面上做这些事情而又没有这些缺点,可以选择heroku。

答案 13 :(得分:0)

尽管AWS和Heroku都是云平台,但它们却有所不同,因为AWS是IaaS,而Heroku是PaaS

答案 14 :(得分:0)

Heroku类似于AWS的子集。它只是平台即服务,而AWS可以在任何级别和任何级别实施。

实施取决于业务需求。如果适合任何一种,请相应地使用。

答案 15 :(得分:-2)

好吧......不是那么美好......

首先:AWS不是火箭科学,如果你知道如何绕过部署&#34;事物&#34;在一天结束时,它更好地使用AWS,而且更便宜..而不是任何其他PaaS,往往总是更昂贵的交换做事情&#34;为了你 ... 恕我直言AWS更好,你有更多的控制整体,

特别是现在有了rightScale,bitnami等...以及所有那些预制的EC2图像用于许多不同的软件堆栈。