为什么在AWS存在的时候人们使用Heroku? Heroku与AWS有什么区别?

我是一个初学者的RoR程序员,他正计划使用Heroku来部署我的应用程序。 我的其他顾问的朋友说,Heroku真的很简单,很好用。 唯一的问题是我还不知道Heroku是做什么的

我已经看了他们的网站 ,简而言之,Heroku做的是帮助扩展,但是…为什么这甚至很重要? Heroku如何帮助:

  1. 速度 – 我的研究表明,如果我针对美国/亚洲的观众,在美国东海岸部署AWS将是最快的。

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

  3. 缩放 – 它是如何工作的?

  4. 成本效益 – 有一个像dyno这样的东西,可以很容易地扩展。

  5. 他们如何面对竞争对手? 例如, Engine Yard和bluebox ?

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

AWS / Heroku – 两者都是免费的小型业余爱好项目(开始)。

Heroku是一个平台即服务,你可以使用所有现有的东西。 如果你对Heroku提供的架构很好,那么Heroku很棒。

Heroku的

  • PAAS
  • 文档非常好。
  • 具有内置的工具和体系结构。
  • 在devise应用程序时,有限的架构控制
  • Heroku是他们所提供的最好的。
  • 部署照顾(只通过git命令)。
  • 良好的支持。
  • 不费时。

AWS

  • IAAS
  • AWS是多function的。 他们有很多种产品。 EC2,LAMBDA,EMR等。
  • 你可以去专门的实例。 您可以更好地控制体系结构,例如select操作系统,软件版本等。不止一个后端层。
  • 我也使用了相当于Heroku的Elastic Beanstalk(AWS)(PAAS)。 仍然喜欢Heroku到BeanStalk。
  • 可以使用自动化部署,或者自己推出。
  • 大力支持。

结论

这取决于开发者想要的select/努力。 如果你想立即启动一个应用程序,没有太多的定制的架构,然后selectHeroku。 如果您想构build一个应用程序,并且希望将注意力集中在架构等不同的Web服务器上,并且如果您还想使用AWS提供的其他服务,则可能需要selectAWS。 使用AWS可能会耗费大量的时间,这取决于您select哪种服务/产品,但不值得。 AWS还附带了许多服务/产品来进行即插即用。

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

有什么不同? 非常近似,IaaS为您提供了所需的组件,以便在其上构build一些东西; PaaS为您提供了一个只需推送代码和一些基本configuration并获得正在运行的应用程序的环境。 IaaS可以为您提供更多的权力和灵活性,但需要自行构build和维护更多的代价。

为了使您的代码在AWS上运行,看起来有点像Heroku部署,您需要一些EC2实例 – 您需要在其上安装负载平衡器/caching层(例如Varnish ),您将希望实例运行类似于Passenger和nginx为你的代码提供服务,你需要部署和configuration类似于PostgreSQL的集群数据库实例。 你需要一个像Capistrano这样的部署系统,还有一些做日志聚合的东西。

这不是一个微不足道的工作来build立和维护。 用Heroku,达到这种阶段所需的努力可能是几行应用程序代码和一个git push

所以你到目前为止,你想扩大规模。 大。 您正在使用Puppet进行EC2部署,对不对? 所以,现在你可以configuration你的Capistrano文件来启动/closures实例, 你重新调整你的Puppetconfiguration,让Varnish知道web-worker实例,并自动在它们之间build立连接。 或者你heroku scale web:+5

希望这给你一个两者之间的比较的想法。 现在来解决你的具体问题:

速度

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

安全

我看到很多内部维护的生产服务器在安全更新上落后了,或者通常很糟糕。 用Heroku,你有其他人pipe理这样的事情,这是一个祝福或诅咒取决于你如何看待它!

部署时,您将代码直接传送到Heroku。 这可能是你的一个问题。 他们关于Dyno Isolation的文章详细介绍了他们的隔离技术(好像在单独的EC2实例上运行多个dynos)。 有几位同事expression了这些技术的问题和他们孤立的力量, 我不能真正评论足够的知识/经验,但我目前的Heroku部署认为“足够好”。 这可能是你的一个问题,我不知道。

缩放

我提到了如何在上面的IaaS和PaaS比较中实现这一点。 Procfile ,你的应用程序有一个Procfile ,它具有dyno_type: command_to_runforms的行,例如(从http://devcenter.heroku.com/articles/process-model dyno_type: command_to_run ):

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

这个,有一个:

 heroku scale web:2 worker:10 

将导致你有2个web dynos和10个worker dynos运行。 好,简单,轻松。 请注意, web是一个特殊的dynotypes,可以访问外部世界,并且在他们漂亮的networkingstream量多路复用器(可能是某种Varnish / nginx组合)后面,将相应地路由stream量。 您的工作人员可能会与消息队列进行交互,以获取类似的路由,从而通过环境中的URL来获取位置。

成本效益

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

Heroku的dyno文档说你有大约512MB的内存,所以把一个dyno看作有点像EC2微型实例可能不是不合理。 价值是否值得一倍? 你看重你的时间多less钱? 在基于IaaS的产品之上构build这个标准所需要的时间和精力绝对不是很便宜。 我不能真正回答这个问题,但不要低估设置和维护的“隐藏成本”。

(稍微有一点,但是如果我从这里连接到一个dyno( heroku run bash ),粗略的看一下/proc/cpuinfo中的4个内核和36GB的内存 – 这让我相信我在“高内存双额外大型实例“ ,Heroku dyno文档说每个dyno接收512MB内存,所以我最多可以共享其他71个dynos(我没有足够的关于Heroku AWS实例的同质性的数据,所以你的milage可能会有所不同))

他们如何面对竞争对手?

这恐怕我真的帮不了你 我真正看过的唯一竞争对手就是Google App Engine–当时我正在考虑部署Java应用程序,而对可用框架和技术的限制令人难以置信地令人难以置信。 这不仅仅是“只是一件Java事情” – 一般的限制和必要的考虑(几个常见问题提示)的数量看起来并不方便。 相比之下,部署到Heroku是一个梦想。

结论

我希望这可以回答你的问题(请留下您是否有空缺或其他方面的问题)。 我觉得我应该提出我的个人立场。 我喜欢Heroku“快速部署”。 当我开始一个应用程序,我想要一些便宜的主机(Heroku的免费层很棒 – 本质上如果你只需要一个networkingtesting和5MB的PostgreSQL,它可以免费提供一个应用程序),Heroku是我的职位。 对于几个支付客户的“严重的生产部署”,通过服务级别协议以及花在操作上的专门时间等等,我不能把自己的控制权交给Heroku,然后是AWS或者我们自己的服务器一直是首选的主机平台。

最终,这是关于什么最适合你的。 你说你是一个“初学者程序员” – 可能只是使用Heroku将让你专注于编写Ruby,而不必花费时间让你的代码周围的所有其他基础设施build立起来。 我一定会试一试。


请注意,AWS实际上有一个支持Ruby,Node.js,PHP,Python,.NET和Java的PaaS产品Elastic Beanstalk 。 我认为一般来说,大多数人在看到“AWS”时,都会跳到EC2和S3以及EBS之类的东西,这绝对是IaaS产品

正如Kristian Glass Said所说,IaaS( aws )和PaaS( Heroku , EngineYard )之间没有比较。

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

但PaaS仍然存在一个阴影,导致PaaS采用的障碍:

  • 减less对服务器和数据库的控制
  • 如果pipe理不当,成本将会很高
  • 在当前和时代的过早和可疑

除了上面你应该有足够的技能来pipe理你的IaaS:

  • 硬件采购
  • 操作系统
  • 服务器软件
  • 服务器端脚本环境
  • networking服务器
  • 数据库pipe理系统(Mysql,Redis等)
  • configuration生产服务器
  • testing和部署工具
  • 监视应用程序
  • 高可用性
  • 加载Blancing / Http路由
  • 服务备份策略
  • 团队合作
  • 重build生产

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

  • 现收现付
  • 低启动成本
  • 把pipe道留给专家
  • PaaS处理自动扩展/除垢,负载平衡,灾难恢复
  • PaaSpipe理所有安全要求
  • PaaSpipe理可靠性,高可用性
  • Paas为您pipe理许多第三方附件

根据要求完全是个人select。 您可以在我的PPT 托pipeRails应用程序的详细信息。

从开发,IT和业务目标来看这个决定有很多不同的方法,所以如果看起来不可思议的话,不要感觉不好。 但也 – 不要过度伸缩性。

考虑你的要求

我devise的网站每天为超过8百万的独立服务提供服务,每周为基础设施提供数TB的video,这些基础设施从$ 25万美元的资本硬件开始,由一个巨大的$ MM IT员工开始。

但我也有一些小网站,每年产生10到20万美元,没有很高的stream量,数据库或处理要求,而且我毫不妥协地将这些网站从一个10美元/月的通用托pipe账户上运行。

未来,部署将看起来更像Heroku,而不仅仅是因为进步。 缩放互联网基础设施的IT旋钮并没有越来越大的自动化程度,没有什么与您提供的产品或服务的价值有关。

另外,请记住一个商业网站 – 可扩展性是我们经常所说的“有一个好问题” – 虽然像Facebook和Twitter这样的网站的可扩展性问题非常重要,但是它们对成功没有负面影响 – 新闻甚至可能会有更多的注册(所有的新闻是好的新闻)。

如果您有一项服务每天产生10万以上的独特function,并且出现扩展问题,那么无论您使用哪种语言,数据库,平台或基础架构,我都会很高兴为您脱手!

可伸缩性是一个可解决的实现问题 – 没有客户是一个存在的问题。

其实你可以同时使用 – 你可以开发一个应用程序与亚马逊服务器ec2。 然后把它(与Git)推到Heroku免费一段时间(使用Heroku免费层向公众服务),并像这样testing它。 与租用服务器相比,这是非常符合成本效益的,但是您将不得不与更严格的heroku API进行交stream,这是您应该考虑的事情。 资料来源:我的一个在线课程采用了这种方法“Coursera / Stanford的Startup Engineering by Balaji S. Srinivasan和Vijay S. Pande

增加了一个方案,所以我的解释会更容易理解

那么,人们通常会问这个问题:Heroku或AWS开始部署时。

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

Heroku的

  • 一个命令来部署你的项目types:Ruby on Rails,Nodejs
  • 这么多的一键点击来整合插件和第三方:从一开始就非常容易。
  • 不要自动缩放; 这意味着您需要手动放大/缩小
  • 成本昂贵,特别是当系统需要更多资源时
  • 免费实例可用
  • 空闲实例如果处于非活动状态,则进入hibernate状态。
  • 数据中心:仅限美国和欧盟
  • CAN通过使用Heroku run bash (感谢,MJafar Mash的build议)潜入/访问机器级别,但它是有限的! 您没有完全访问权限!
  • 不需要太多了解DevOps

AWS – EC2

  • 这就像一个预configuration的操作系统(或不是),所以你需要安装软件,库,使您的网站/服务上网。
  • 插件和库需要手动集成,或自动化脚本(公共脚本和你写的)
  • Auto scaling和负载平衡器是支持的服务,只要学习如何configuration和集成到您的系统
  • 成本相当便宜,取决于你使用的服务和小时数
  • T2.micro实例有几个空闲时间,但通常情况下,您每月只需支付几美元(如果仍然使用T2.micro)
  • 你的免费实例将不会进入睡眠,24/7(因为你可能会付钱:))
  • 数据中心:在世界各地。 select最适合你的地区。
  • 潜入机器级别。 所以你可以享受它
  • 关于DevOps的一些知识,但是没关系,Stackoverflow对你有帮助!

AWS Elastic Beanstalk是Heroku的另一种select,但更便宜

  • Elastic Beanstalk从2010年开始公开testing; 这有助于我们更轻松地部署。 详情请点击这里

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

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

概要

  • Heroku:易于入门, 免费的实例,但后来很贵
  • AWS:不容易,空闲时间可用, 便宜一些 ,Beanstalk应该使用

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

现有的答案是大致准确的:

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

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

对于tl; dr跳到这篇文章的末尾。

AWS ElasticBeanstalk试图提供类似Heroku的自动缩放和简单部署平台。 由于它使用EC2实例(它会自动创build),因此EB服务器可以完成其他EC2实例可以执行的任何操作,运行起来也很便宜。

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

您可以使用ElasticBeanstalk在幕后使用的所有服务来构build您自己的定制系统(如果您想要全部使用CodeDeploy,Elastic Load Balancer,Auto Scaling Groups和CodeCommit,CodeBuild和CodePipeline)几周的时间,这是第一次,因为它比EC2中的configuration更复杂,而且稍微有一些技巧。

AWS Lightsail提供了一个价格竞争力的托pipe选项,但并没有帮助部署或扩展 – 它只是EC2产品的封装(但成本更高)。 它可以让你在初始设置时自动运行一个bash脚本,这是一个很好的接触,但是与设置一个EC2实例(你也可以通过编程的方式)的成本相比,它是很有价值的。

关于比较的一些想法(尽pipe以迂回的方式尝试和回答问题):

  1. 不要低估系统pipe理的工作量,包括通过安全补丁(以及偶尔的操作系统更新)保持安装的最新版本。

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

    Heroku更新Git仓库时的自动部署非常简单。 它接近即时,优雅,所以没有terminal用户的中断,只有在testing/持续集成通过时才可以设置更新,以便在部署破损的代码时不会破坏您的网站。

    您也可以使用ElasticBeanstalk进行自动部署,但要准备第一次花费一周的时间 – 您可能必须更改部署和构build资产(如CSS和JS)的方式,以处理ElasticBean如何处理部署或构build逻辑到您的应用程序来处理部署。

    请注意,为了估计无缝部署而无需在EB上停机的成本,您需要运行多个实例 – EB分别向每个服务器推出更新,以便您的服务不会降级 – Heroku为您添加了一个新的testing仪,只是弃用旧的服务,直到所有的请求完成处理(然后删除它)。

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

其他一些问题没有具体询问,但由其他答案提出:

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

    我觉得人们都在暗示这一点。 虽然理想的代码应该在任何合理的平台上运行,所以它尽可能便携,每个主机上的软件版本会有很大的不同,只是因为代码在分段运行并不意味着它会在生产中运行(例如主要的Node.js / Ruby / Python / PHP / Perl版本在代码不兼容的方面可能有所不同,即使您有适当的testing覆盖率,通常也可能无法捕捉到的静默方式)。

    最好的办法是利用像Heroku这样的原型,小型项目和微型站点 – 这样你就可以快速构build和部署,而无需花费大量的时间进行configuration和维护。

    在做决定时,一定要考虑运行生产和生产前实例的成本,不要忘记复制整个环境的成本(包括第三方服务,如数据存储/附加组件,安装和configurationSSL等) 。

  2. 如果使用AWS,请警惕来自Bitnami等供应商的AWS预configuration实例 – 这是一个安全的噩梦。 他们可以在默认情况下暴露大量的臭名昭着的易受攻击的应用程序,而不会在描述中提及它。

    相反,只需要使用受支持的主stream发行版,如Ubuntu或Debian(如果需要RPM支持,则使用CentOS)。

    注意:亚马逊的产品有自己的分销系统,称为亚马逊Linux,它使用RPM,但是它是EC2特有的,并且没有得到第三方/开源软件的很好的支持。

  3. 你也可以在AWS(或Lightsail)上设置一个EC2实例,并在其上configurationflynn或dokku等,然后你可以很容易地部署多个站点,如果你维护很多服务或者希望能够轻松搞定新事物。 但是设置起来并不像使用Heroku那样自动化,而且你最终可能花费大量的时间来configuration和维护它(到了使用Amazon集群和Docker Swarm进行部署的时候,比设置它更容易;因人而异)。

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

我讨厌花费时间来configuration服务,但是如果我使用它的话,我的Heroku账单将会是每年数千美元,而AWS会花费一小部分的成本。

TL;博士

如果钱从来不是问题,我会用几乎所有的Heroku,因为它是一个巨大的倍频 – 但我仍然想要使用AWS更复杂的项目,我需要Heroku不提供的灵活性和更先进的服务。

对于我来说,理想的情况是ElasticBeanstalk只是像Heroku一样工作 – 比如更简单的configuration和更快的部署机制。

几乎是这样的服务的一个例子是now.sh ,实际上在后台使用AWS,但部署和群集与在Heroku上一样简单(具有自动SSL,DNS,优雅部署,超级简易群集设置和pipe理)。

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

从Heroku迁移到AWS的人员中,我们占有相当大的比例。 两者都有优点,但是Heroku在一段时间后会变得很杂乱……一旦你需要一定的复杂度,就不再容易维护Heroku的限制。

也就是说,越来越多的select可以通过搭载优秀的框架/工具在AWS上轻松实现Heroku和AWS的灵活性。

amazon web services(AWS)提供从IaaS到PaaS的大量服务,保证99.9999999%的持久性和数据和基础设施的可用性。 AWS为开发人员提供了基础架构自动化以及多个工具,以pipe理其应用程序部署过

另一方面,Heroku就是PaaS,它提供的服务可以在云上pipe理你的平台。 无论是基础架构还是安全性,AWS都毫无例外。

我已经读了关于HEROKU和AWS的一些答案(第一个是Platform as Service,第二个是Infra as Service),为了进行比较,amazon确实提供了一个名为AWS Elastic Beanstalk的PaaS解决scheme。 ,请检查以下urlhttps://dzone.com/articles/heroku-or-amazon-web-services-which-is-best-for-your-startup

好! 我观察到,Heroku在萌芽和新开发的开发人员中很有名,而AWS拥有先进的开发人员angular色。 DigitalOcean也是这个领域的主要参与者。 在CloudOne和AWS上单击创build灯泡堆栈,Cloudways变得非常容易。 让所有的服务和包更新点击比手动做所有事情要好得多。

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

好..不是那么美好..

首先,AWS不是火箭科学,如果你知道自己在一天结束时部署“事物”的方式,那么最好使用AWS和更便宜的..而不是任何其他PaaS,交换为你做“事情”…恕我直言,AWS是好多了,你有更多的控制整体,

特别是现在有rightScale,bitnami等等,所有这些预先制作的EC2镜像都有很多不同的软件堆栈。