当 AWS 存在时,为什么人们还使用 Heroku? Heroku 与 AWS 有何不同? [关闭]

2024-04-03

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

我看过他们的website http://www.heroku.com/how/command简而言之,Heroku 所做的是帮助扩展,但是……为什么这很重要? Heroku 如何提供帮助:

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

  2. 安全性——它们的安全性如何?

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

  4. 成本效率——有像测功机这样的东西可以轻松扩展。

  5. 他们与竞争对手的竞争如何?例如,发动机厂 http://www.engineyard.com/ and bluebox http://www.bluebox.net/?

请用通俗英语术语来解释...我是一名初学者程序员。


首先,AWS 和 Heroku 是不同的东西。 AWS 提供基础设施即服务(IaaS https://en.wikipedia.org/wiki/Cloud_computing#Infrastructure_as_a_service_.28IaaS.29)而 Heroku 提供平台即服务(PaaS https://en.wikipedia.org/wiki/Platform_as_a_service).

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

为了让您的代码在 AWS 上运行并且看起来有点像 Heroku 部署,您需要一些 EC2 实例 - 您需要在它们上安装负载均衡器/缓存层(例如Varnish https://www.varnish-cache.org/),你会希望实例运行类似乘客 http://www.modrails.com/ and nginx http://nginx.org/为了服务您的代码,您需要部署和配置类似的集群数据库实例PostgreSQL http://www.postgresql.org/。您需要一个具有类似功能的部署系统卡皮斯特拉诺 https://github.com/capistrano/capistrano/wiki,以及进行日志聚合的操作。

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

所以你已经走到这一步了,你想扩大规模。伟大的。你正在使用Puppet http://puppetlabs.com/适合您的 EC2 部署,对吗?现在,您可以配置 Capistrano 文件以根据需要启动/关闭实例;您重新调整您的 Puppet 配置,以便 Varnish 能够识别 Web Worker 实例并自动在它们之间进行池化。或者你heroku scale web:+5.

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

Speed

目前 Heroku 仅在 AWS 实例上运行us-east and eu-west。对你来说,这听起来无论如何都是你想要的。对于其他人来说,这可能更多是一个考虑因素。

Security

我见过很多内部维护的生产服务器在安全更新方面远远落后,或者通常组合得很差。有了 Heroku,你就可以由其他人来管理这类事情,这要么是福,要么是祸,取决于你如何看待它!

当您部署时,您实际上是将代码直接交给 Heroku。这对您来说可能是个问题。他们的文章关于测功机隔离 http://devcenter.heroku.com/articles/dyno-isolation详细介绍了它们的隔离技术(看起来好像多个测功机在各个 EC2 实例上运行)。几位同事对这些技术及其隔离强度表示了疑问;遗憾的是,我没有足够的知识/经验来真正发表评论,但我当前的 Heroku 部署认为“足够好”。我不知道,这对你来说可能是个问题。

Scaling

我在上面的 IaaS 与 PaaS 比较中谈到了如何实现这一点。大约,您的应用程序有一个Procfile,其行的形式为dyno_type: command_to_run,例如(抄袭自Heroku 架构 - 流程模型 https://devcenter.heroku.com/articles/process-model):

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

这,带有:

heroku scale web:2 worker:10

将导致你有 2web测功机和 10worker动力运行。不错,简单,容易。注意web是一种特殊的 dyno 类型,它可以访问外部世界,并且位于其良好的网络流量多路复用器(可能是某种 Varnish / nginx 组合)的后面,该多路复用器将相应地路由流量。您的工作人员可能会与消息队列进行交互以进行类似的路由,他们将通过环境中的 URL 从中获取位置。

成本效益

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

赫罗库的动态文档 http://devcenter.heroku.com/articles/dynos说你有大约 512MB 的 RAM,所以可能不是too将 dyno 视为有点像 EC2 微型实例是不合理的。值得双倍的价格吗?你有多珍惜你的时间?在 IaaS 产品之上进行构建以使其达到此标准所需的时间和精力绝对不便宜。我无法真正为您回答这个问题,但不要低估设置和维护的“隐性成本”。

(有点旁白,但如果我从这里连接到测功机(heroku run bash),粗略一看,有 4 个核心/proc/cpuinfo和 36GB RAM - 这让我相信我正在使用《高内存双超大实例》 http://aws.amazon.com/ec2/instance-types/。赫鲁库动态文档 http://devcenter.heroku.com/articles/dynos说每个测功机接收 512MB RAM,因此我可能与最多 71 个其他测功机共享。 (我没有足够的关于 Heroku 的 AWS 实例同质性的数据,因此您的情况可能会有所不同))

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

这个,恐怕我真的帮不了你。我真正关注过的唯一竞争对手是谷歌应用引擎 http://code.google.com/appengine/- 当时我正在考虑部署 Java 应用程序,并且对可用框架和技术的限制程度 http://code.google.com/p/googleappengine/wiki/WillItPlayInJava非常令人反感。这不仅仅是“只是 Java 的事情”——一般限制和必要考虑因素的数量(the FAQ http://code.google.com/appengine/kb/general.html几个提示)似乎不太方便。相比之下,部署到 Heroku 一直是一个梦想。

结论

如果存在差距/您想要解决的其他领域,请发表评论。我觉得我应该提出我的个人立场。我喜欢 Heroku 的“快速部署”。当我启动一个应用程序时,我想要一些便宜的托管(Heroku 免费套餐很棒 - 本质上,如果您只需要一个 Web dyno 和 5MB PostgreSQL,它可以免费托管应用程序),Heroku 是我的首选。对于有多个付费客户的“认真的生产部署”,有服务级别协议,有专门的时间花在运维上,等等,我不太能让自己把那么多控制权转移给 Heroku,然后要么 AWS 要么我们自己的服务器一直是首选的托管平台。

最终,这取决于什么最适合您。您说您是“一名初学者程序员” - 可能只是使用 Heroku 可以让您专注于编写 Ruby,而不必花时间围绕您的代码构建所有其他基础设施。我肯定会尝试一下。


请注意,AWS 实际上有 PaaS 产品,弹性豆茎 http://aws.amazon.com/elasticbeanstalk/,支持 Ruby、Node.js、PHP、Python、.NET 和 Java。我认为大多数人在看到“AWS”时,都会跳到 EC2、S3 和 EBS 之类的东西,这些绝对是 IaaS 产品

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

当 AWS 存在时,为什么人们还使用 Heroku? Heroku 与 AWS 有何不同? [关闭] 的相关文章

随机推荐

  • django admin - 如何显示缩略图而不是文件路径

    我正在尝试在管理界面中显示模型的缩略图 当我使用 list display 添加图像字段时 它显示文件的路径而不是图像本身 如何显示图像并控制其大小 我通过添加解决了这个问题 def image thumb self return img
  • 有哪些开源 C 项目值得学习来学习好的设计? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 有哪些小型 C 语言开源项目对于学习良好的设计很有趣 该项目应该是 不太大 像linux内核 有据可查 也许仍在积极开发中 我刚刚开始学习
  • 错误:未指定模块(IntelliJ IDEA)

    我试图在 IntelliJ IDEA 中作为静态 Web 项目执行一个简单的程序 我是新手 正在学习使用 Node js 进行 Web 开发 我向IntelliJ IDEA官网寻求帮助 但错误还是一样 不过 我还配置了设置和项目结构 Err
  • 我怎样才能说服 IE 只显示 application/json 而不是提供下载它?

    在调试使用 AJAX 的 jQuery 应用程序时 我经常需要查看服务返回到浏览器的 json 因此 我会将 JSON 数据的 URL 放入地址栏中 这对于 ASPNET 来说很好 因为如果出现编码错误 我可以在浏览器中看到 ASPNET
  • 从 SQL 脚本调用 aspnet_regsql.exe

    如何打电话aspnet regsql exe来自 SQL 脚本 谢谢 你可以看看xp cmdshell http msdn microsoft com en us library aa260689 SQL 80 aspx xp cmdshe
  • 需要与 Microsoft.SqlServer.Management.Smo Transfer 类连接的帮助

    我试图复制所有内容 数据 索引 触发器 存储过程 在 C 中从一个数据库到另一个数据库 这是我的代码 SqlConnection connection new SqlConnection ConnectionString Server my
  • 通过减去属性来获取两个对象的差异

    我试图找出两个物体之间的差异 previousChart BWP 1 ZAR 1 3 USD 0 09324 number 1 currentChart BWP 1 ZAR 1 35 USD 0 01 number 2 期望的答案是 new
  • 如何让 Swing 应用程序感知屏幕尺寸变化?

    当我的 swing 应用程序运行时 我更改屏幕尺寸 例如从 1024x768 更改为 800x600 我可以收听任何活动以获得有关此事件的通知吗 或者 我可以每隔几秒检查一次屏幕尺寸 但 Toolkit getScreenSize 不断告诉
  • 在 Apache Spark SQL 中我们可以回滚事务吗

    我想让spark sql将数据持久化 这样的话我可以使用回滚我们已经持久化的数据吗 前任 假设我们有 3 个表 t1 t2 和 t3 t1 和 t2 表数据已成功保留 但 t3 在数据完整性级别上失败了 那么我可以回滚我已经坚持的 t1 和
  • python 中的日志精度

    以下是检查数字是否可以用幂表示的源代码 但为什么代码失败n 76 89 1 and n 76 89 我该如何解决这个错误 对于两个 n 给出x log n 2 log i 2 89 0 from math import log sqrt f
  • Amazon ElasticBeanStalk 工作线程层无法连接到 SQS

    目前 我在允许我的工作人员连接到 SQS 时遇到问题 这是日志 2014 07 21T21 37 26Z error AWS SQS Errors AccessDenied Access to the resource https sqs
  • 从 java.util.date 转换为 JodaTime

    我想转换一个java util Date to JodaTime以便在日期之间进行减法 有没有一个好的简洁方法来转换Date to JodaTime java util Date date DateTime dateTime new Dat
  • 如何在网页中动态显示 ping 输出?

    作为诊断页面的一部分 我希望用户能够运行 ping 即一个普通的 shell 命令 将 ICMP ECHO REQUST 发送到某个 IP 并在浏览器的 div 中动态显示结果 后端是 Ruby Rails 我已经在服务器端运行该命令并读取
  • 如何使用 FCM 向特定用户发送通知?

    我为 FCM 准备了接收器 可以向所有设备发送通知 gcm http googleapis com gcm send使用此链接可以发送给注册的目标用户并发布到目标设备 如下所示 json notification title sample
  • R 错误:某些组对于“qda”来说太小

    我用的是MASS qda 找到我的数据的分类器 它总是报告 某些群体对于 qda 来说太小了 是由于我用于模型的测试数据的大小吗 我将测试样本大小从 30 增加到 100 它报告了相同的错误 求助啊啊啊啊啊 set seed 1345 Al
  • Spring Integration TCP - 在发送数据之前启动消息握手

    我正在使用 MessagingGateway 将数据发送到服务器 我为出站网关配置了 AbstractClientConnectionFactory 和 ServiceActivator 为了将数据发送到我的服务器 我需要在启动连接时发送握
  • delete *p 是删除 [] p 的替代方法吗?

    以下代码来自微软文档 https learn microsoft com en us cpp cpp new operator cpp view vs 2019 int p new int 7 delete p 我觉得delete p应该在
  • QUnit 与 Jasmine? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 这两个测试框架的主要区别是什么 我是测试驱动开发的新手 从头开始 QUnit 非常容易上手 因为您只需要包含两个文件和一点标记 然后就可以开始编
  • 链增量运算符

    为什么不能连锁经营 int test 5 test OR int test 5 test 此代码给出编译时错误 递增或递减运算符的操作数必须是变量 属性或索引器 我完全理解这一点 如果允许的话 将是一个完整的代码味道 几乎没有现实世界的用途
  • 当 AWS 存在时,为什么人们还使用 Heroku? Heroku 与 AWS 有何不同? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我是一名初级 RoR 程序员 计划使用 Heroku 部署我的应用程序 我的其他顾问朋友说 Heroku 真的很简单 很好用 唯一的问题是我仍然