关于ruby on rails:为什么人们在AWS出现时会使用Heroku?

Why do people use Heroku when AWS is present? What distinguishes Heroku from AWS?

我是一个初学者RoR程序员,计划使用Heroku部署我的应用程序。我的其他顾问朋友说,苍鹭真的很容易,很好用。唯一的问题是我仍然不知道希罗库做了什么…

我看过他们的网站,简而言之,Heroku所做的是帮助缩放,但是……为什么这很重要?Heroku如何帮助:

  • 速度-我的研究表明,如果我瞄准的是美国/亚洲的观众,在美国东海岸部署自动导航系统将是最快的。

  • 安全-他们有多安全?

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

  • 成本效率-有一个像达诺这样的东西,使它易于扩展。

  • 他们如何对抗竞争对手?例如,发动机场和蓝牛?

  • 请用外行英语术语解释…我是个初学者程序员。


    首先,AWS和Heroku是不同的东西。AWS提供基础设施即服务(iaas),而Heroku提供平台即服务(paas)。好的。

    有什么区别?很近似地说,iaas为您提供了在上面构建东西所需的组件;paas为您提供了一个环境,您只需在其中推送代码和一些基本配置,并获得一个正在运行的应用程序。IaaS可以给你更多的力量和灵活性,代价是你必须建立和维护更多的自己。好的。

    为了让您的代码在AWS上运行,并且看起来有点像Heroku部署,您需要一些EC2实例-您需要在它们上安装负载平衡器/缓存层(例如Varnish),您需要运行类似于passenger和nginx的实例来服务您的代码,您需要部署和配置一些G喜欢PostgreSQL。您将需要一个部署系统,其中包含一些类似capistrano的内容,以及一些执行日志聚合的内容。好的。

    这不是一个微不足道的工作设置和维护。对于Heroku,达到这种阶段所需的工作可能是几行应用程序代码和一个git push。好的。

    所以你已经走到这一步了,你想扩大规模。伟大的。你用木偶来部署EC2,对吗?因此,现在您可以根据需要配置capistrano文件来旋转上/下实例;您可以重新调整puppet配置,使varnish能够了解Web工作者实例,并自动在它们之间进行池。或者是你。好的。

    希望这能让你对两者的比较有所了解。现在要解决您的具体问题:好的。速度

    目前heroku只在us-easteu-west中的AWS实例上运行。对你来说,这听起来就像你想要的。对其他人来说,这可能更值得考虑。好的。安全性

    我见过许多内部维护的生产服务器在安全更新方面远远落后,或者只是总体上放在一起很差。有了Heroku,你就有其他人来管理这类事情,这是一种祝福,或者是一种诅咒,这取决于你如何看待它!好的。

    当您部署时,实际上您将代码直接交付给Heroku。这对你来说可能是个问题。他们关于dyno隔离的文章详细介绍了他们的隔离技术(似乎多个dyno运行在单个ec2实例上)。一些同事对这些技术和它们的孤立性表示了异议;遗憾的是,我没有足够的知识/经验来真正发表评论,但我目前的Heroku部署认为这"足够好"。我不知道,这对你来说可能是个问题。好的。缩放比例

    我在上面的IAAS和PAAS比较中谈到了如何实现这一点。大约,您的应用程序有一个Procfile,它有一个dyno_type: command_to_run形式的行,例如(摘自http://devcenter.heroku.com/articles/process model):好的。

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

    这个,用A:好的。

    1
    heroku scale web:2 worker:10

    将导致2个webdynos和10个workerdynos运行。很好,简单,简单。请注意,web是一种特殊的dyno类型,它可以访问外部世界,并位于其漂亮的网络流量多路复用器(可能是某种Varnish/nginx组合)后面,该多路复用器将相应地路由流量。您的工作人员可能会与一个消息队列进行类似的路由交互,从中他们将通过环境中的URL获取位置。好的。成本效率

    很多人对此有很多不同的看法。目前,一个dyno小时的价格是0.05美元/小时,而一个aws微型实例的价格是0.025美元/小时,一个aws小型实例的价格是0.09美元/小时。好的。

    Heroku的Dyno文档说您有大约512MB的RAM,所以将Dyno视为一个有点像EC2微型实例可能并不太不合理。它值双倍的价钱吗?你认为你的时间有多宝贵?为了达到这一标准,在IAAS产品的基础上进行开发所需的时间和精力绝对不便宜。我不能真正回答这个问题,但不要低估安装和维护的"隐藏成本"。好的。

    (有点旁白,但是如果我从这里连接到一个Dyno(heroku run bash),粗略地看一下,在/proc/cpuinfo中有4个内核,内存为36GB—这让我相信我正在进行一个"高内存双超大实例"。HerokuDyno文档说,每个Dyno接收512MB的RAM,所以我可能会与多达71个其他Dyno共享。(我没有足够的关于Heroku的AWS实例同质性的数据,因此您的里程可能会有所不同)好的。他们如何对抗竞争对手?

    恐怕我真的帮不了你。我所见过的唯一的竞争对手是谷歌App Engine——当时我正打算部署Java应用程序,而对可用框架和技术的限制量令人难以置信。这不仅仅是"Java的事情"——一般限制和必要的考虑(FAQ提示在一些方面)似乎不太方便。相比之下,部署到Heroku是一个梦想。好的。结论

    我希望这能回答您的问题(如果有差距/您希望解决的其他方面,请发表评论)。我觉得我应该提供我个人的职位。我喜欢Heroku的"快速部署"。当我启动一个应用程序,我想要一些便宜的主机(Heroku免费层是可怕的-基本上如果你只需要一个Web Dyno和5MB的PostgreSQL,它是免费的主机一个应用程序),Heroku是我的定位。对于一些付费客户的"严肃的生产部署",有了服务水平协议,有了专门的时间花在运营上,等等,我不能完全把自己的控制权转移到Heroku,然后要么是AWS,要么是我们自己的服务器成为了托管平台的选择。好的。

    归根结底,这是关于什么最适合你。你说你是一个"初学者程序员"——这可能只是因为使用Heroku可以让你专注于写Ruby,而不必花时间去构建代码周围的所有其他基础设施。我一定会试试的。好的。

    注意,AWS实际上有一个PaaS产品,即弹性豆茎,它支持Ruby、NoDE.js、PHP、Python、.NET和Java。我认为一般来说,大多数人看到"aws"时,都会跳到ec2、s3和ebs之类的东西上,这绝对是iaas提供的。好的。好啊。


    AWS/Heroku都是免费的小爱好项目(从开始)。

    如果你想马上启动一个应用程序,而不需要对架构进行太多的定制,那么选择Heroku。

    如果您希望专注于体系结构并能够使用不同的Web服务器,那么选择AWS。基于您选择的服务/产品,AWS更耗时,但可能值得。AWS还提供许多插件服务和产品。

    赫鲁库

    • 平台即服务(PaaS)
    • 良好的文件
    • 有内置的工具和架构。
    • 在设计应用程序时对架构的控制有限。
    • 部署需要处理(通过github自动部署,或通过git命令或cli手动部署)。
    • 不费时。

    自动气象站

    • 基础设施即服务(iaas)
    • 多功能-有许多产品,如EC2、lambda、EMR等。
    • 可以使用专用实例对体系结构进行更多控制,例如选择操作系统、软件版本等。有多个后端层。
    • 弹性豆茎的特点类似于Heroku的Paas。
    • 可以使用自动部署,也可以自己滚动。


    正如克里斯蒂安·格拉斯所说,IAAS(AWS)和PAAS(Heroku,Engineyard)之间没有比较。

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

    但是,仍然有一个黑暗的一面,导致了帕亚斯的采用障碍:

    • 减少对服务器和数据库的控制
    • 如果管理不当,成本会很高。
    • 在当今的时代,早熟和可疑

    除此之外,你还应具备足够的技能来管理你的IAA:

    • 硬件采集
    • 操作系统
    • 服务器软件
    • 服务器端脚本环境
    • 网络服务器
    • 数据库管理系统(mysql、redis等)
    • 配置生产服务器
    • 测试和部署工具
    • 监控应用程序
    • 高可用性
    • 负载均衡/HTTP路由
    • 服务备份策略
    • 团队协作
    • 重建生产

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

    • 随手付钱
    • 低启动成本
    • 把水管交给专家
    • PaaS处理自动缩放/除垢、负载平衡、灾难恢复
    • PaaS管理所有安全需求
    • PaaS管理可靠性、高可用性
    • Paas为您管理许多第三方附加组件

    这完全是基于需求的个人选择。您可以了解我的PPT托管Rails应用程序的详细信息。


    从开发、IT和业务目标的角度来看这个决策有很多不同的方法,所以如果它看起来势不可挡,不要觉得不好。但也不要过度考虑可扩展性。

    想想你的要求。

    我设计的网站每天为超过800万台Uniques提供服务,每周提供数兆字节的视频,这些视频都是基于基础设施建设的,由数百万美元的IT员工以25万美元的资本硬件UNR开始。

    但我也有一些小网站,它们的设计目标是每年产生10-2万美元,没有很高的流量、数据库或处理要求,而且我把它们从一个10美元/月的通用托管帐户上运行而不妥协。

    在未来,部署看起来更像Heroku而不是AWS,仅仅是因为进展。扩展互联网基础设施的IT旋钮是零价值的,而这些基础设施并不是越来越自动化的,而且这些都与你所提供的产品或服务的价值无关。

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

    如果您有一个每天生成10万个Uniques的服务,并且存在扩展问题,那么不管您运行的是哪种语言、数据库、平台或基础设施,我都很乐意为您解决这个问题!

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


    事实上,你可以两者兼用——你可以用亚马逊服务器EC2开发一个应用程序。然后将它(使用git)免费推到heroku上一段时间(使用heroku-free-tier为公众服务),然后像这样测试它。与租用服务器相比,这是非常划算的,但是您必须与更严格的heroku api进行交流,这是您应该考虑的事情。资料来源:这一方法被Balaji S.Srinivasan和Vijay S.Pande在我的在线课程"Coursera/Stanford的创业工程"中采用。

    Added a scheme so my explanation will be easier to understand


    现有的答案大体上是准确的:好的。

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

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

    对于TL,博士跳到这篇文章的结尾。好的。

    AWS ElasticBeanstalk试图提供一个类似Heroku的自动缩放和轻松部署平台。因为它使用EC2实例(它自动创建),所以eb服务器可以做任何其他EC2实例可以做的事情,而且运行起来很便宜。好的。

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

    您可以使用ElasticBeanstall在幕后使用的所有服务来构建您自己的定制系统(使用codedeploy、弹性负载均衡器、自动伸缩组以及codecommit、codebuild和codepipeline,如果您想全力以赴的话),但您肯定可以花上几周时间来第一次设置它,因为它相当复杂,而且比在EC2中配置稍微复杂一些。好的。

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

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

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

  • 不要低估自动部署、自动伸缩和SSL配置的好处。好的。

    使用Heroku更新Git存储库时,可以轻松地进行自动部署。它几乎是即时的、优美的,因此不会给最终用户造成中断,并且只能在测试/持续集成通过时设置为更新,这样在部署中断的代码时就不会中断站点。好的。

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

    在估算成本时要注意,为了在不中断eb的情况下进行无缝部署,您需要运行多个实例-eb单独向每台服务器发布更新,这样您的服务就不会降级-在Heroku为您启动一个新的dyno时,只会拒绝旧服务,直到对它的所有请求都处理完毕(然后它删除TES)。好的。

    有趣的是,使用eb运行多个服务器的托管成本可能比单个Heroku实例便宜,尤其是在包含附加组件成本的情况下。好的。

  • 其他一些问题没有特别提出,但由其他答案提出:好的。

  • 使用不同的供应商进行生产和开发是一个坏主意。好的。

    我对人们的建议感到不安。理想情况下,代码在任何合理的平台上都可以运行得很好,因此它是尽可能的可移植的,但是每台主机上的软件版本都会有很大的不同,仅仅因为代码在分段运行并不意味着它将在生产环境中运行(例如major 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实例(单独使用和集群使用)、弹性Beanstalk、Lightsail和Heroku。好的。

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

    DR好的。

    如果钱不是一个问题,我会把Heroku用于几乎所有的事情,因为它是一个巨大的省时器-但我仍然想把AWS用于更复杂的项目,在那里我需要Heroku不提供的灵活性和更先进的服务。好的。

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

    现在几乎就是这样的服务的一个例子是now.sh,它实际上在后台使用了AWS,但是使部署和集群变得和heroku上一样简单(具有自动SSL、DNS、优雅的部署、超级简单的集群设置和管理)。好的。

    我已经在node.js应用程序和docker映像部署中大量使用了它,主要的警告是实例是共享的(这反映在它们的低成本上),目前没有购买专用实例的选择。然而,他们的开源部署工具"now"也可以用于部署到AWS以及谷歌云和Azure上的专用实例。好的。好啊。


    嗯,人们通常会问这个问题:当开始部署某些东西时,Heroku或AWS。

    我使用Heroku和AWS的实验,以下是我的快速回顾和比较:

    赫鲁库

    • 部署任何项目类型的命令:ruby on rails、nodejs
    • 如此之多的一点式集成插件和第三方:从某件事开始非常容易。
    • 没有自动缩放功能;这意味着您需要手动缩放
    • 成本很高,特别是当系统需要更多资源时
    • 可用实例
    • 如果空闲实例处于非活动状态,它将进入睡眠状态。
    • 数据中心:仅限美国和欧盟
    • 可以使用Heroku run bash潜入/访问机器级别(谢谢,mjafar mash提供建议),但这是有限的!您没有完全访问权限!
    • 不需要太了解DevOps

    AWS- EC2

    • 这就像一台带有预配置操作系统(或不带预配置操作系统)的机器,所以您需要安装软件、库以使您的网站/服务联机。
    • 插件库需要手动集成,或者自动化脚本(由您编写的公共脚本)
    • 自动伸缩和负载均衡器是受支持的服务,只需了解如何配置和集成到您的系统即可。
    • 费用很便宜,取决于你使用的服务和小时数。
    • t2.micro实例有几个小时的免费时间,但通常每个月只需支付几美元(如果仍然使用t2.micro的话)
    • 您的免费实例将不会进入睡眠状态,全天候可用(因为您可能会为此付费:)
    • 数据中心:世界各地。选择最适合您的区域。
    • 潜入机器高度。所以你可以享受它
    • 关于DevOps的一些知识,但是没关系,StackOverflow在那里很有用!

    弹性豆茎是Heroku的替代品,但更便宜

    • 从2010年起,弹性Beanstalk作为公共测试版发布;它有助于我们更轻松地进行部署。详情请到这里

    • Beanstalk是免费的,您将支付的费用是您使用的服务和使用小时数。

    • 我用弹性豆茎很长一段时间了,我想它可以代替苍鹭而且更便宜!

    总结

    • Heroku:一开始容易,实例免费,但后来很贵
    • 美国焊接学会:不容易,免费提供工时,价格比较便宜,豆茎应该考虑使用。

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


    从Heroku到AWS的人员迁移在我们的业务中占很大比例。两者都有好处,但过了一段时间Heroku就变得一团糟…一旦你需要某种程度的复杂性,就不再容易用Heroku的限制来维护了。

    也就是说,有越来越多的选择可以通过使用伟大的框架/工具在AWS上实现Heroku的易用性和AWS的灵活性。


    好!我观察Heroku是著名的萌芽和新生的开发者,而AWS有先进的开发人员的角色。数字海洋也是这一领域的主要参与者。通过点击DigitalOcean和AWS,Cloudway可以很容易地创建灯管。单击所有服务和包更新远比手动执行所有操作要好。

    您可以在这里完全查看:https://www.cloudways.com/blog/host-php-on-aws-cloud/


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


    Heroku就像是AWS的一个子集。它只是一个平台作为一个服务,而AWS可以作为任何东西和任何级别来实现。

    实现取决于业务需求。如果两者都适合,请相应地使用。


    亚马逊网络服务(AWS)提供了从IAAS到PAAS的大量服务,保证了99.999999%的数据和基础设施的耐久性和可用性。AWS为开发人员提供了基础设施自动化以及一些工具,以管道化他们的应用程序部署过程。

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


    有时,我想知道为什么人们把自动焊接系统比作英雄。AWS是一个IAAS(基础设施即服务),它清楚地说明了系统的健壮性和可计算性。另一方面,Heroku只是一个SaaS,它基本上只是AWS服务的一部分。所以,当你可以使用Heroku将你的第一个产品运送到Prime时,为什么还要努力设置AWS呢?

    Heroku是免费的、简单的,并且易于将几乎所有类型的堆栈部署到Web上。Heroku是专门为在短时间内将应用程序传送到活动服务器而构建的。

    不过,您可能希望使用来自双方的任何教程部署应用程序,并进行比较

    AWS文件和Heroku文件


    Heroku在后台使用AWS,这完全取决于您需要的解决方案类型。如果你是一个核心Linux和DevOps用户,你不必担心从头开始创建虚拟机,比如选择AMI、选择Palcement选项等,你可以选择AWS。如果你想在表面上做一些事情而没有这些荨麻,你可以和Heroku一起去。


    虽然aws和heroku都是云平台,但它们是不同的,因为aws是iaas,heroku是paas。


    好。。不是那么美好……

    首先:AWS不是火箭科学,如果你知道如何在一天结束时部署"东西",那么最好使用AWS,而且更便宜。而不是任何其他多环芳烃往往是更昂贵的交换做"事情"为你…imho aws好多了,总体上你有更多的控制权,

    尤其是现在有了正确的比例,比特纳米等…所有那些为这么多不同的软件栈预先制作的EC2图像。