首先,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仅在us-east
和中的AWS实例上运行eu-west
。对于您来说,这听起来还是您想要的。对于其他人,可能更需要考虑。
安全
我已经看到许多内部维护的生产服务器,这些服务器在安全更新上远远落后,或者通常组合得很差。使用Heroku,您可以由其他人来管理此类事情,这取决于您的看法,这是福还是祸!
部署时,您可以有效地将代码直接交给Heroku。这可能对您来说是个问题。他们在Dyno Isolation上的文章详细介绍了其隔离技术(似乎在单个EC2实例上运行了多个Dyno)。几位同事已经对这些技术及其隔离的强度表示了疑问。遗憾的是,我没有足够的知识/经验来发表评论,但是我目前在Heroku上的部署认为“足够好”。我不知道这对您来说可能是个问题。
缩放比例
我在上面的IaaS与PaaS比较中谈到了如何实现这一点。大约,您的应用程序具有一个Procfile
,其行形式dyno_type: command_to_run
为,例如(从http://devcenter.heroku.com/articles/process-model抄录):
web: bundle exec rails server
worker: bundle exec rake jobs:work
带有:
heroku scale web:2 worker:10
将导致您运行2个测web
功机和10个测worker
功机。很好,简单,容易。请注意,这web
是一种特殊的dyno类型,可以访问外界,并且位于其漂亮的Web流量多路复用器(可能是Varnish / nginx组合的某种形式)的后面,它将相应地路由流量。您的工作人员可能与消息队列进行交互以进行类似的路由,然后他们将通过环境中的URL从中获取位置。
成本效益
很多人对此有不同的看法。当前,动态小时的价格为$ 0.05 / hr,相比之下,AWS微型实例为$ 0.025 / hr,AWS小型实例为$ 0.09 / hr。
Heroku的dyno文档说您拥有大约512MB的RAM,因此,将dyno有点像EC2微型实例,可能并不是不太合理。它值得两倍的价格吗?您认为您的时间价值多少?在IaaS产品之上构建以使其达到此标准所需的时间和精力绝对不便宜。我不能真正为您回答这个问题,但请不要低估安装和维护的“隐性成本”。
(暂且不谈,但是如果我从此处(heroku run bash
)连接到dyno ,粗略的外观将显示4个内核/proc/cpuinfo
和36GB的RAM-这使我相信我正在使用“高内存双倍超大型实例“。Heroku dyno文档说每个dyno都接收512MB的RAM,因此我有可能与多达71个其他dynos共享。(我没有关于Heroku的AWS实例同质性的足够数据,因此您的里程可能会有所不同)
他们如何与竞争对手抗衡?
恐怕我真的无法为您提供帮助。我真正看过的唯一竞争对手是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产品