我是初学者 RoR 程序员,他计划使用 Heroku 部署我的应用程序。来自我的其他顾问朋友的话说,Heroku 非常简单,易于使用。唯一的问题是我仍然不知道 Heroku 做了什么......
我看过他们的网站 ,简而言之,Heroku 所做的是帮助扩展但是...... 为什么这甚至重要? Heroku 如何帮助:
速度 - 我的研究表明,如果我的目标是美国 / 亚洲的受众,那么在美国东海岸部署 AWS 将是最快的。
安全 - 他们有多安全?
缩放 - 它实际上如何工作?
成本效率 - 像 dyno 这样的东西可以很容易地扩展。
他们如何与竞争对手竞争?例如, Engine Yard和bluebox ?
请用外行英语术语来解释...... 我是初学程序员。
首先,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
和eu-west
AWS 实例上运行。对你来说,这听起来像你想要的。对于其他人来说,这可能是更多的考虑因素。
我已经看到很多内部维护的生产服务器在安全更新方面落伍,或者通常很难整合在一起。使用 Heroku,你有其他人管理那种事情,这可能是一种祝福或诅咒,取决于你如何看待它!
部署时,您将有效地将代码直接交给 Heroku。这可能是一个问题。他们关于Dyno Isolation的文章详述了他们的隔离技术(好像多个 dynos 在各个 EC2 实例上运行)。几位同事表达了这些技术的问题和隔离的强度; 我真的没有足够的知识 / 经验来评论,但我目前的 Heroku 部署认为 “足够好”。对我来说这可能是一个问题,我不知道。
我在上面的 IaaS vs 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
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 micro 实例可能并不太不合理。是否值得双倍的价格?你重视你的时间多少钱?在 IaaS 产品之上构建以达到此标准所需的时间和精力绝对不便宜。我无法真正回答这个问题,但不要低估设置和维护的 “隐性成本”。
(稍等一下,但是如果我从这里连接到一个 dyno( heroku run bash
),粗略的外观显示/proc/cpuinfo
中的 4 个内核和 36GB 内存 - 这让我相信我正在“高内存双超大实例 “ .Heroku dyno 文档说每个 dyno 接收 512MB RAM,所以我可能与多达 71 个其他 dynos 共享。(我没有关于 Heroku 的 AWS 实例同质性的足够数据,所以你的 milage 可能会有所不同))
这个,我恐怕无法真正帮助你。我真正关注的唯一竞争对手是Google App Engine--当时我正在寻求部署 Java 应用程序,而且对可用框架和技术的限制令人难以置信。这不仅仅是 “Java 事物” - 一般限制和必要考虑因素( 常见问题解答中的几个提示)似乎不太方便。相比之下,部署到 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 产品
AWS / Heroku 对于小型业余爱好项目都是免费的(首先)。
如果您想立即启动应用程序,而无需对架构进行太多自定义,请选择Heroku 。
如果您希望专注于架构并能够使用不同的 Web 服务器,请选择AWS 。根据您选择的服务 / 产品,AWS 更耗时,但值得。 AWS 还提供了许多插件服务和产品。
Heroku 的
AWS
正如 Kristian Glass Said 所说,IaaS( AWS )和 PaaS( Heroku , EngineYard )之间没有比较。
PaaS 基本上可以帮助开发人员加速应用程序的开发,从而节省资金,最重要的是创新他们的应用程序和业务,而不是设置配置和管理服务器和数据库之类的东西。购买使用 PaaS 的其他功能是应用程序部署过程,例如敏捷性,高可用性,监控,扩展 / 除垢,对专业知识的有限需求,易于部署以及降低的成本和开发时间。
但 PaaS 仍然存在一个黑暗的一面,导致 PaaS 采用的障碍:
除此之外,你应该有足够的技能来管理你 IaaS:
如果您的业务规模较小,PaaS 将是您的最佳选择:
根据要求,它将完全是个人选择。您可以在我的 PPT Hosting Rails 应用程序中获得详细信息。