提问



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


我已经查看了他们的网站,简而言之,Heroku所做的是缩放的帮助,但是......为什么这甚至重要?Heroku如何帮助:[15]



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

  2. 安全 - 他们有多安全?

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

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

  5. 他们如何与竞争对手竞争?例如,Engine Yard和bluebox?[16] [17]



请用外行英语术语来解释......我是一名初学程序员。

最佳参考


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


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


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





Heroku的



  • 平台即服务(PAAS)

  • 良好的文档

  • 内置工具和架构。

  • 设计app时对架构的控制有限。

  • 部署工作(仅通过git命令)。

  • 不耗时。






AWS



  • 基础设施即服务(IAAS)

  • 多功能 - 有许多产品,如EC2,LAMBDA,EMR等。

  • 可以使用专用实例来更好地控制体系结构,例如选择操作系统,软件版本等。这里有多个后端层。

  • Elastic Beanstalk是一个类似于Heroku的PAAS的功能。

  • 可以使用自动部署,也可以自行部署。


其它参考1


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


有什么区别?非常近似,IaaS为您提供了构建基础所需的组件; PaaS为您提供了一个环境,您可以在其中推送代码和一些基本配置并获得正在运行的应用程序.IaaS可以为您提供更多功率和灵活性,代价是必须自己构建和维护更多。


为了让您的代码在AWS上运行并且看起来有点像Heroku部署,您将需要一些EC2实例 - 您将需要在其上安装负载均衡器/缓存层(例如Varnish),您将希望实例运行类似Passenger和nginx为您的代码提供服务,您将要部署和配置类似PostgreSQL的集群数据库实例。你会想要一个像Capistrano这样的部署系统,以及做日志聚合的东西。[20] [21] [22] [23] [24]


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


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


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


速度



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


安全



我已经看到很多内部维护的生产服务器在安全更新方面落伍,或者通常很难放在一起。使用Heroku,你有其他人管理那种东西,这要么是祝福,要么是诅咒,取决于你怎么看待它!


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


缩放



我谈到了如何在上面的IaaS vs PaaS比较中实现这一点。大概,你的应用程序有一个Procfile,它有dyno_type: command_to_run形式的行,所以例如(来自http://devcenter.heroku.com/articles/process-model):[27]]]


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文档说你有大约512MB的RAM,因此将dyno视为有点像EC2微实例可能不太太多不合理。值得加价吗?你重视你的时间多少钱?在IaaS产品之上构建以达到此标准所需的时间和精力绝对不便宜。我不能为你真正回答这个问题,但不要低估设置和维护的隐性成本。[28]


(稍等一下,但如果我从这里连接到一个dyno(heroku run bash),粗略的外观显示/proc/cpuinfo中的4个内核和36GB内存 - 这让我相信我关于高内存双超大实例.Heroku dyno文档说每个dyno接收512MB RAM,所以我可能与其他71个dynos共享。(我没有足够的关于Heroku同质性的数据) AWS实例,所以你的milage可能会有所不同))[29] [30]


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



这,我恐怕无法帮助你。我真正关注的唯一竞争对手是Google App Engine--当时我正在寻求部署Java应用程序,对可用框架和技术的限制令人难以置信。这不仅仅是Java事情 - 一般限制的数量和必要的考虑因素(常见问题解答中的几个提示)似乎不太方便。相比之下,部署到Heroku是一个梦想。[31] [32] [33]


结论



我希望这能回答你的问题(请评论是否有差距/其他方面你要解决)。我觉得我应该提供我的个人立场。我喜欢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产品[34]

其它参考2


正如Kristian Glass Said所说,IaaS(AWS)和PaaS(Heroku,EngineYard)之间没有比较。 [35] [36] [37]


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


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



  • 对服务器和数据库的控制较少

  • 如果管理不当,费用将非常高

  • 当前时代的早熟和可疑



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



  • 硬件采购

  • 操作系统

  • 服务器软件

  • 服务器端脚本环境

  • 网络服务器

  • 数据库管理系统(Mysql,Redis等)

  • 配置生产服务器

  • 测试和部署工具

  • 监控应用

  • 高可用性

  • 加载Blancing/Http路由

  • 服务备份政策

  • 团队协作

  • 重建生产



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



  • 按需付款

  • 启动成本低

  • 将管道留给专家

  • PaaS处理自动扩展/降级,负载平衡,灾难恢复

  • PaaS管理所有安全要求

  • PaaS管理可靠性,高可用性

  • Paas为您管理许多第三方附加组件



根据要求,它将完全是个人选择。您可以在我的PPT Hosting Rails应用程序中获得详细信息。 [38]

其它参考3


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


考虑一下要求。


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


但我还有一些较小的网站,其设计每年产生10至2万美元,并没有非常高的流量,数据库或处理要求,而且我还没有妥协就将这些网站从10美元/月的通用主机帐户中运行。


在未来,部署将看起来更像Heroku而不是AWS,仅仅是因为进步。 IT旋钮的价值没有任何价值 - 转变互联网基础设施,这种基础设施不会越来越自动化,而且它与您提供的产品或服务的价值无关。


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


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


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

其它参考4


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




其它参考5


现有答案大致准确:



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

  • 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实例便宜,特别是一旦包含附加组件的成本。



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



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


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


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


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

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


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


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

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



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


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


TL;博士


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


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


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


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

其它参考6


好吧,人们通常会在开始部署某些东西时提出这个问题:Heroku或AWS。


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


Heroku的



  • 一个部署任何项目类型的命令:Ruby on Rails,Nodejs

  • 如此多的单击以集成插件和放大器第三方:从一开始就非常容易。

  • 不要自动缩放;这意味着您需要手动放大/缩小

  • 成本很高,尤其是当系统需要更多资源时

  • 免费实例

  • 如果免费实例处于非Activity状态,则会进入休眠状态。

  • 数据中心:美国和美国仅限欧盟

  • 使用Heroku run bash(感谢,MJafar Mash的建议)可以潜入/访问机器级别,但它有点受限!你没有完全访问权限!

  • 不需要过多了解DevOps



AWS - EC2



  • 这就像具有预配置操作系统(或不配置)的机器,因此您需要安装软件,库以使您的网站/服务上线。

  • 插件&库需要手动集成,或自动化脚本(公共脚本和由您编写)

  • 自动缩放&负载均衡器是支持的服务,只需学习如何配置&集成到您的系统

  • 成本相当便宜,取决于您使用它的服务和小时数

  • T2.micro实例有几个免费小时,但通常情况下,你每月需要支付几美元(如果仍然使用T2.micro)

  • 你的免费实例不会全天候上网,因为你可能会付钱:))

  • 数据中心:遍布全球。选择最适合您的区域。

  • 潜入机器级别。所以你可以享受它

  • 关于DevOps的一些知识,但没关系,Stackoverflow在那里很有帮助!



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



  • Elastic Beanstalk从2010年宣布为公开测试版;它有助于我们更轻松地进行部署。详情请到[42]

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

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



摘要



  • Heroku:开始时很容易,免费实例,但后来很贵

  • AWS:不容易,免费提供时间,更便宜,应该关注使用Beanstalk



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

其它参考7


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


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

其它参考8


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

其它参考9


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


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

其它参考10


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


你可以在这里查看:https://www.cloudways.com/blog/host-php-on-aws-cloud/[43]

其它参考11


有时,我想知道为什么人们将AWS与Heroku进行比较。 AWS是一种IAAS(基础设施即服务),它清楚地说明了系统的稳健性和计算性。另一方面,Heroku只是一个SAAS,它基本上只是AWS服务的一小部分。因此,当您使用Heroku将第一个产品运送到素数时,为什么要设置AWS。


Heroku是免费的,简单易用的几乎所有类型的堆栈都可以部署到Web上。 Heroku专门用于避免在不久的将来将应用程序运送到实时服务器的所有麻烦。


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


AWS DOCS和Heroku Docs [44] [45]

其它参考12


Heroku在后台使用AWS,这完全取决于您需要的解决方案类型。如果你是一个核心的linux和devops人,你不担心从头开始创建vm,比如选择ami选择选项等选项,你可以选择AWS。如果你想在表面上做一些事情,而没有那些净值,你可以使用heroku。

其它参考13


我已经阅读了一些关于HEROKU和AWS如此不同的答案(第一个是平台即服务,第二个是Infra as Service。
为了进行比较,亚马逊确实提供了一个名为AWS Elastic Beanstalk的PaaS解决方案。
有关这些的比较,请检查以下URL
https://dzone.com/articles/heroku-or-amazon-web-services-which-is-best-for-your-startup[46]

其它参考14


嗯..它不是那么美好..


首先:AWS不是火箭科学,如果你知道如何在一天结束时部署东西,那么最好使用AWS,而且更便宜..而不是任何其他PaaS,往往总是更昂贵为你做事的交换......
恕我直言AWS更好,你有更多的控制整体,


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