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

我看了他们的网站,简而言之,Heroku所做的是帮助缩放,但是……这有什么关系呢?Heroku如何帮助:

速度——我的研究表明,如果我的目标受众是美国/亚洲,那么在美国东海岸部署AWS将是最快的。 安全性——他们有多安全? 缩放-它实际上是如何工作的? 成本效率——有一些像动态的东西,使其易于扩展。 他们在竞争对手面前表现如何?比如Engine Yard和bluebox?

请用外行的英语术语来解释……我是一个初级程序员。


当前回答

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

有什么不同?大致说来,IaaS为您提供了所需的组件,以便在其之上构建内容;PaaS为您提供了一个环境,在这个环境中,您只需推送代码和一些基本配置,就可以得到一个运行的应用程序。IaaS可以为您提供更强大的功能和灵活性,但代价是必须自己构建和维护更多内容。

为了让你的代码在AWS上运行,看起来有点像Heroku部署,你需要一些EC2实例——你需要在它们上面安装一个负载均衡器/缓存层(例如Varnish),你需要运行一些实例,比如Passenger和nginx来服务你的代码,你需要部署和配置一个集群数据库实例,比如PostgreSQL。您将需要一个带有类似Capistrano的部署系统,以及一些执行日志聚合的功能。

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

到这里,你想要放大。太好了。您正在使用Puppet进行EC2部署,对吗?现在你可以配置你的Capistrano文件来根据需要旋转实例;你重新调整你的Puppet配置,这样Varnish就能意识到web-worker实例,并自动在它们之间进行池化。或者你heroku scale web:+5。

希望这能让你们对两者之间的比较有所了解。现在谈谈你的具体问题:

速度

目前Heroku只在美国东部和欧盟西部的AWS实例上运行。对你来说,这听起来就是你想要的。对其他人来说,这可能更多是一种考虑。

安全

我见过许多内部维护的生产服务器在安全更新方面远远落后,或者通常只是组装得不好。有了Heroku,你就有了另一个人来管理这类事情,这是福是祸取决于你怎么看!

When you deploy, you're effectively handing your code straight over to Heroku. This may be an issue for you. Their article on Dyno Isolation details their isolation technologies (it seems as though multiple dynos are run on individual EC2 instances). Several colleagues have expressed issues with these technologies and the strength of their isolation; I am alas not in a position of enough knowledge / experience to really comment, but my current Heroku deployments consider that "good enough". It may be an issue for you, I don't know.

扩展

我在上面的IaaS与PaaS的比较中提到了如何实现这一点。大约,你的应用程序有一个Procfile,它的行形式为dyno_type: command_to_run,例如(摘自Heroku Architecture - the Process Model):

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

这里,有一个:

heroku scale web:2 worker:10

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

成本效率

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

Heroku的dyno文档说你有大约512MB的RAM,所以把dyno看作有点像EC2微实例可能不是太不合理。它值双倍的价钱吗?你有多珍惜你的时间?在IaaS产品基础上构建以使其达到这一标准所需的时间和精力绝对不便宜。我不能回答这个问题,但不要低估设置和维护的“隐藏成本”。

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

他们在竞争对手面前表现如何?

这个,恐怕我帮不上什么忙。我曾经真正关注过的唯一竞争对手是谷歌应用引擎——当时我正在寻找部署Java应用程序,可用框架和技术的限制数量令人难以置信。这不仅仅是“Java的事情”——大量的一般限制和必要的考虑(常见问题解答中暗示了一些)似乎不太方便。相比之下,部署到赫鲁库一直是一个梦想。

结论

Please comment if there are gaps / other areas you'd like addressed. I feel I should offer my personal position. I love Heroku for "quick deployments". When I'm starting an application, and I want some cheap hosting (the Heroku free tier is awesome - essentially if you only need one web dyno and 5MB of PostgreSQL, it's free to host an application), Heroku is my go-to position. For "Serious Production Deployment" with several paying customers, with a service-level-agreement, with dedicated time to spend on ops, et cetera, I can't quite bring myself to offload that much control to Heroku, and then either AWS or our own servers have been the hosting platform of choice.

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


请注意,AWS实际上有一个PaaS产品Elastic Beanstalk,它支持Ruby、Node.js、PHP、Python、. net和Java。我认为一般来说,大多数人一看到“AWS”,就会跳到EC2、S3和EBS这样的东西上,这些肯定是IaaS产品

其他回答

正如Kristian Glass所说,IaaS(AWS)和PaaS(Heroku, EngineYard)之间没有可比性。

PaaS基本上帮助开发人员加快应用程序的开发,从而节省资金,最重要的是创新他们的应用程序和业务,而不是设置配置和管理服务器和数据库之类的东西。使用PaaS的其他特性是应用程序部署过程,如敏捷性、高可用性、监视、扩展/去规模化、对专业知识的需求有限、易于部署以及减少成本和开发时间。

但PaaS仍有其黑暗的一面,这阻碍了PaaS的采用:

减少对服务器和数据库的控制 如果管理不当,成本将非常高 在当今时代,不成熟的,可疑的

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

硬件采购 操作系统 服务器软件 服务器端脚本环境 Web服务器 数据库管理系统(Mysql, Redis等) 配置生产服务器 用于测试和部署的工具 监控应用程序 高可用性 负载均衡/ Http路由 业务备份策略 团队协作 重新生产

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

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

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

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

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

有什么不同?大致说来,IaaS为您提供了所需的组件,以便在其之上构建内容;PaaS为您提供了一个环境,在这个环境中,您只需推送代码和一些基本配置,就可以得到一个运行的应用程序。IaaS可以为您提供更强大的功能和灵活性,但代价是必须自己构建和维护更多内容。

为了让你的代码在AWS上运行,看起来有点像Heroku部署,你需要一些EC2实例——你需要在它们上面安装一个负载均衡器/缓存层(例如Varnish),你需要运行一些实例,比如Passenger和nginx来服务你的代码,你需要部署和配置一个集群数据库实例,比如PostgreSQL。您将需要一个带有类似Capistrano的部署系统,以及一些执行日志聚合的功能。

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

到这里,你想要放大。太好了。您正在使用Puppet进行EC2部署,对吗?现在你可以配置你的Capistrano文件来根据需要旋转实例;你重新调整你的Puppet配置,这样Varnish就能意识到web-worker实例,并自动在它们之间进行池化。或者你heroku scale web:+5。

希望这能让你们对两者之间的比较有所了解。现在谈谈你的具体问题:

速度

目前Heroku只在美国东部和欧盟西部的AWS实例上运行。对你来说,这听起来就是你想要的。对其他人来说,这可能更多是一种考虑。

安全

我见过许多内部维护的生产服务器在安全更新方面远远落后,或者通常只是组装得不好。有了Heroku,你就有了另一个人来管理这类事情,这是福是祸取决于你怎么看!

When you deploy, you're effectively handing your code straight over to Heroku. This may be an issue for you. Their article on Dyno Isolation details their isolation technologies (it seems as though multiple dynos are run on individual EC2 instances). Several colleagues have expressed issues with these technologies and the strength of their isolation; I am alas not in a position of enough knowledge / experience to really comment, but my current Heroku deployments consider that "good enough". It may be an issue for you, I don't know.

扩展

我在上面的IaaS与PaaS的比较中提到了如何实现这一点。大约,你的应用程序有一个Procfile,它的行形式为dyno_type: command_to_run,例如(摘自Heroku Architecture - the Process Model):

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

这里,有一个:

heroku scale web:2 worker:10

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

成本效率

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

Heroku的dyno文档说你有大约512MB的RAM,所以把dyno看作有点像EC2微实例可能不是太不合理。它值双倍的价钱吗?你有多珍惜你的时间?在IaaS产品基础上构建以使其达到这一标准所需的时间和精力绝对不便宜。我不能回答这个问题,但不要低估设置和维护的“隐藏成本”。

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

他们在竞争对手面前表现如何?

这个,恐怕我帮不上什么忙。我曾经真正关注过的唯一竞争对手是谷歌应用引擎——当时我正在寻找部署Java应用程序,可用框架和技术的限制数量令人难以置信。这不仅仅是“Java的事情”——大量的一般限制和必要的考虑(常见问题解答中暗示了一些)似乎不太方便。相比之下,部署到赫鲁库一直是一个梦想。

结论

Please comment if there are gaps / other areas you'd like addressed. I feel I should offer my personal position. I love Heroku for "quick deployments". When I'm starting an application, and I want some cheap hosting (the Heroku free tier is awesome - essentially if you only need one web dyno and 5MB of PostgreSQL, it's free to host an application), Heroku is my go-to position. For "Serious Production Deployment" with several paying customers, with a service-level-agreement, with dedicated time to spend on ops, et cetera, I can't quite bring myself to offload that much control to Heroku, and then either AWS or our own servers have been the hosting platform of choice.

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


请注意,AWS实际上有一个PaaS产品Elastic Beanstalk,它支持Ruby、Node.js、PHP、Python、. net和Java。我认为一般来说,大多数人一看到“AWS”,就会跳到EC2、S3和EBS这样的东西上,这些肯定是IaaS产品

在我们的业务中,从Heroku迁移到AWS的人员占很大比例。两者都有优势,但在Heroku上一段时间后就变得很混乱了……一旦你需要一定程度的复杂性不再容易维持与Heroku的限制。

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

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

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

希罗库

One command to deploy whatever your project types: Ruby on Rails, Nodejs So many 1-click to integrate plugins & third parties: It is super easy to start with something. Don't have auto-scaling; that means you need to scale up/down manually Cost is expensive, especially, when system needs more resources Free instance available The free instance goes to sleep if it is inactive. Data center: US & EU only CAN dive into/access to machine level by using Heroku run bash (Thanks, MJafar Mash for the advice) but it is kind of limited! You don't have full access! Don't need to know too much about DevOps

AWS - EC2

This just like a machine with pre-config OS (or not), so you need to install software, library to make your website/service go online. Plugin & Library need to be integrated manually, or automation script (public script & written by you) Auto scaling & load balancer are the supported services, just learn how to config & integrate to your system Cost is quite cheap, depends on which services and number of hours you use it There are several free hours for T2.micro instances, but usually, you will pay few dollars every month (if still using T2.micro) Your free instance won't go to sleep, available 24/7 (because you may pay for it :) ) Data center: around the world. Pick the region which is the best fit for you. Dive into machine level. So you can enjoy it Some knowledge about DevOps, but it is okay, Stackoverflow is helpful there!

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

《Elastic Beanstalk》是在2010年发布的公测版本;它帮助我们更容易地进行部署。详情请点击这里 Beanstalk是免费的,您将支付的费用将用于您使用的服务和使用小时数。 我用了很长一段时间的弹性豆茎,我觉得它可以代替Heroku,而且更便宜!

总结

Heroku:开始很简单,免费实例,但之后很贵 AWS:不容易,免费小时可用,有点便宜,豆茎应该关注使用

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