当存在 AWS 时,为什么人们使用 Heroku? Heroku 与 AWS 的区别是什么?

我是 RoR 初学者,他打算使用 Heroku 部署我的应用程序。我其他顾问朋友的话说,Heroku 确实很容易使用。唯一的问题是我仍然不知道 Heroku 会做什么...

简而言之,我已经看过他们的网站 ,Heroku 所做的工作对扩展具有帮助,但是... 为什么那仍然重要? Heroku 如何帮助您:

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

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

  3. 缩放 - 它实际上如何工作?

  4. 成本效率 - 像 dyno 这样的东西可以轻松扩展。

  5. 他们如何与竞争对手抗衡?例如, Engine Yardbluebox

请使用外行英语术语进行解释... 我是初学者。

答案

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

有什么不同?大致而言,IaaS 为您提供了在其之上构建组件所需的组件。 PaaS 为您提供了一个环境,您可以在其中推送代码和一些基本配置并获得运行的应用程序。 IaaS 可以为您提供更多功能和灵活性,而您必须自己构建和维护更多的设备。

为了使您的代码在 AWS 上运行并看起来有点像 Heroku 部署,您需要一些 EC2 实例 - 您需要在它们上安装负载平衡器 / 缓存层(例如Varnish ),您希望实例运行类似passengernginx服务于您的代码,您将需要部署和配置PostgreSQL之类的集群数据库实例。您将需要一个具有Capistrano 之类的部署系统,并进行日志聚合。

设置和维护的工作量并不小。使用 Heroku,进入这种阶段所需的工作可能是几行应用程序代码和git push

因此,您到现在为止了,您想扩大规模。大。您正在使用Puppet进行 EC2 部署,对吗?因此,现在您将 Capistrano 文件配置为根据需要旋转实例。您可以重新设置 Puppet 配置,以使 Varnish 知道 Web-Worker 实例,并将在它们之间自动合并。或者您是heroku scale web:+5

希望您能对两者进行比较。现在解决您的具体问题:

速度

目前,Heroku 仅在us-easteu-west AWS 实例上运行。对于您来说,这听起来还是您想要的。对于其他人,可能更需要考虑。

安全

我已经看到许多内部维护的生产服务器,这些服务器在安全更新上远远落后,或者通常组合得很差。使用 Heroku,您可以由其他人来管理此类事情,这取决于您的看法,这是福还是祸!

部署时,可以有效地将代码直接交给 Heroku。这可能对您来说是个问题。他们在Dyno Isolation上的文章详细介绍了其隔离技术(似乎在单个 EC2 实例上运行了多个Dyno )。几位同事已经对这些技术及其隔离的强度表示了疑问。遗憾的是,我没有足够的知识 / 经验来发表评论,但是我当前的 Heroku 部署认为这已经足够了。我不知道这对您来说可能是个问题。

缩放比例

我在上面的 IaaS 与 PaaS 比较中谈到了如何实现这一点。大约,您的应用程序具有一个Procfile ,其行格式为dyno_type: command_to_run ,因此例如(从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是一种特殊的动态类型,可以访问外界,并且位于其漂亮的 Web 流量多路复用器(可能是某种 Varnish / nginx 组合)的后面,该多路复用器将相应地路由流量。您的工作人员可能与消息队列进行交互以进行类似的路由,然后他们将通过环境中的 URL 从中获取位置。

成本效益

很多人对此有不同的看法。当前,动态小时的价格为 $ 0.05 / hr,相比之下,AWS 微型实例为 $ 0.025 / hr,AWS 小型实例为 $ 0.09 / hr。

Heroku 的dyno 文档说,您有大约 512MB 的 RAM,因此,将 dyno 有点像 EC2 微型实例,可能并不太合理。它值得两倍的价格吗?您认为您的时间价值多少?要在 IaaS 产品之上达到此标准所需的时间和精力绝对不菲。我不能真正为您回答这个问题,但是请不要低估安装和维护的 “隐性成本”。

(暂且不谈,但是如果我从这里连接到 dyno( heroku run bash ),粗略的外观显示了/proc/cpuinfo中的 4 个内核和 36GB 的 RAM - 这使我相信我在“高内存双超大型实例” 。Heroku 的赛道文档说,每个赛道接收 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 产品

AWS / Heroku 都是免费的,用于小型的业余项目(一开始)。

如果您想立即启动应用程序,而无需太多架构定制,那么请选择Heroku

如果您想专注于架构并能够使用其他 Web 服务器,请选择AWS 。根据您选择的服务 / 产品,AWS 更加耗时,但是值得。 AWS 还附带了许多插件服务和产品。


Heroku

  • 平台即服务(PAAS)
  • 好的文档
  • 具有内置的工具和体系结构。
  • 设计应用程序时对架构的控制有限。
  • 部署(由 GitHub 自动完成,或由 git 命令或 CLI 手动完成)负责。
  • 不费时。

AWS

  • 基础架构即服务(IAAS)
  • 多功能 - 具有许多产品,例如 EC2,LAMBDA,EMR 等。
  • 可以使用专用实例对体系结构进行更多控制,例如选择操作系统,软件版本等。后端层不止一个。
  • Elastic Beanstalk 是类似于 Heroku 的 PAAS 的功能。
  • 可以使用自动部署,也可以自行部署。

正如 Kristian Glass Said 所说,IaaS( AWS )和 PaaS( HerokuEngineYard )之间没有可比之处。

PaaS 基本上可以帮助开发人员加快应用程序的开发速度,从而节省资金,最重要的是创新其应用程序和业务,而无需设置配置和管理服务器和数据库之类的东西。购买使用 PaaS 的其他功能是应用程序部署过程,例如敏捷性,高可用性,监视,可伸缩 / 缩放,对专业知识的需求有限,易于部署以及降低的成本和开发时间。

但是,PaaS 仍然存在阴暗面,这会导致采用 PaaS 的障碍:

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

除了上述内容,您还应该具备足够的技能来管理 IaaS:

  • 硬件采购
  • 操作系统
  • 服务器软件
  • 服务器端脚本环境
  • 网络服务器
  • 数据库管理系统(Mysql,Redis 等)
  • 配置生产服务器
  • 测试和部署工具
  • 监控应用
  • 高可用性
  • 加载 Blancing / Http 路由
  • 服务备份策略
  • 团队合作
  • 重建生产

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

  • 现收现付
  • 启动成本低
  • 将管道交给专家
  • PaaS 处理自动缩放 / 缩放,负载平衡,灾难恢复
  • PaaS 管理所有安全要求
  • PaaS 管理可靠性,高可用性
  • Paas 为您管理许多第三方加载项

根据需求将完全是个人选择。您可以在我的 PPT Hosting Rails Apps 中获得详细信息。

实际上,您可以同时使用两者 - 您可以使用 Amazon 服务器 ec2 开发应用程序。然后将其(使用 git)免费免费推送到 heroku 一段时间(使用 heroku 免费版将其提供给公众)并像这样进行测试。与租用服务器相比,这非常划算,但是您必须使用限制性更强的 heroku api,这是您应该考虑的事情。来源:这种方法被我的在线课程之一 “Balaji S. Srinivasan 和 Vijay S. Pande 的 Coursera / Stanford 的启动工程” 采用

添加了一个方案,这样我的解释将更容易理解

从开发,IT 和业务目标来看这个决定的方法有很多,因此,如果它看起来势不可挡,也不会感到不好。而且 - 不要过度考虑可扩展性。

考虑一下您的要求

我设计的网站每天提供超过 8M 的唯一身份服务,每周交付数 TB 的视频,这些视频是基于庞大的 MM IT 员工从基础硬件开始的 25 万美元的基础设施建设而来的。

但是我也有一些较小的网站,这些网站的设计收入为每年 $ 10- $ 20k,没有很高的流量,数据库或处理要求,我以每月 $ 10 的通用托管帐户运行这些网站而毫不妥协。

将来,由于进步,部署看起来将更像 Heroku 而不是 AWS。扩展互联网基础架构的 IT 旋钮转动中,零值变得越来越不可自动化,并且与您所提供的产品或服务的价值没有任何关系。

此外,请记住一个商业网站 - 可伸缩性是我们通常所说的 “好问题”- 尽管 Facebook 和 Twitter 等网站的可伸缩性问题备受瞩目,但它们对成功的负面影响为零 - 新闻甚至可能促成了更多的注册(所有媒体都是好媒体)。

如果您的服务每天生成 100k + 唯一身份并遇到扩展问题,那么无论您使用哪种语言,数据库,平台或基础结构,我都乐意为您服务!

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

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

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

Heroku

  • 一个用于部署任何项目类型的命令:Ruby on Rails,Nodejs
  • 如此众多的一键式集成插件和第三方:从某件事开始非常容易。
  • 没有自动缩放;这意味着您需要手动放大 / 缩小
  • 成本昂贵,尤其是当系统需要更多资源时
  • 免费实例可用
  • 如果空闲实例处于非活动状态,它将进入睡眠状态。
  • 数据中心:仅限美国和欧盟
  • 可以通过使用Heroku run bash来进入 / 进入机器级别(谢谢,MJafar Mash 提供建议),但这是有限的!您没有完全访问权限!
  • 无需对 DevOps 了解太多

AWS-EC2

  • 这就像具有预配置操作系统(或没有预配置操作系统)的计算机一样,因此您需要安装软件和库以使您的网站 / 服务在线。
  • 插件和库需要手动集成,或者自动化脚本(公共脚本,由您编写)
  • 自动扩展和负载平衡器是受支持的服务,只需了解如何配置和集成到系统
  • 成本相当便宜,取决于您使用的服务和使用时间
  • T2.micro 实例有几个免费小时,但是通常,您每月需要支付几美元(如果仍在使用 T2.micro)
  • 您的免费实例不会进入睡眠状态,可以 24/7 使用(因为您可以为此付费:))
  • 数据中心:全球。选择最适合您的区域。
  • 潜入机器级别。所以你可以享受它
  • 关于 DevOps 的一些知识,但是可以,Stackoverflow 在这里很有帮助!

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

  • Elastic Beanstalk 从 2010 年宣布为公开测试版;它有助于我们更轻松地进行部署。详情请点击这里

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

  • 我使用 Elastic Beanstalk 已有很长时间了,我认为它可以代替 Heroku,而且更便宜!

摘要

  • Heroku:一开始很容易,是免费实例,但后来又很昂贵
  • 卓:不容易,可提供免费时间, 价格便宜 ,应注意使用 Beanstalk

因此,在当前系统中,我使用 Heroku 进行登台,并使用 Beanstalk 进行生产!

现有答案大致正确:

  • Heroku 非常易于使用和部署,可以轻松配置为自动部署存储库(例如 GitHub),具有许多第三方附加组件,每个实例收取更多费用。

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

对于tl; dr,请跳至本帖子的结尾。

AWS ElasticBeanstalk 试图提供类似于 Heroku 的自动扩展和易于部署的平台。由于它使用 EC2 实例(它是自动创建的),因此 EB 服务器可以执行任何其他 EC2 实例可以做的所有事情,并且运行成本低。

EB 的部署非常缓慢;每个服务器部署更新可能需要 10 到 15 分钟,而部署到更大的群集可能需要一个小时的大部分时间,而在 Heroku 上部署更新只需几秒钟。 EB 上的部署也不是特别无缝地处理,这可能会限制应用程序设计。

您可以使用 ElasticBeanstalk 在后台使用的所有服务来构建自己的定制系统(如果您想全力以赴,可以使用 CodeDeploy,Elastic Load Balancer,Auto Scaling Groups 以及 CodeCommit,CodeBuild 和 CodePipeline),但是绝对可以花很多钱由于它相当复杂,而且比仅在 EC2 中进行配置要复杂得多,因此首次安装它需要几个星期。

AWS Lightsail 提供了价格具有竞争力的托管选项,但对部署或扩展无济于事 - 它实际上只是 EC2 产品的包装(但成本更高)。它使您可以在初始设置时自动运行 bash 脚本,这很不错,但是与仅设置 EC2 实例(您也可以通过编程方式进行)的成本相比,这是很昂贵的。

关于比较的一些想法(尝试并回答问题,尽管采用环回的方式):

  1. 不要低估了系统管理的工作量,包括使用安全补丁(以及偶尔的 OS 更新)使您安装的所有内容保持最新。

  2. 不要低估了自动部署,自动扩展以及 SSL 设置和配置带来的好处。

    使用 Heroku 可以轻松地在更新 Git 存储库时进行自动部署。它几乎是即时的,优美的,因此不会对最终用户造成中断,并且可以将其设置为仅在测试 / 持续集成通过时才进行更新,因此,如果部署损坏的代码,则不会破坏您的站点。

    您还可以使用 ElasticBeanstalk 进行自动部署,但是准备花一个星期的时间进行第一次设置 - 您可能必须更改部署和构建资产(如 CSS 和 JS)的方式,以配合 ElasticBeanstalk 处理部署或构建逻辑的方式进入您的应用以处理部署。

    请注意,在估算成本时要注意,要在 EB 上不发生中断的情况下进行无缝部署,您需要运行多个实例 - EB 分别向每台服务器推出更新,以使您的服务不会降级 - 在 Heroku 为您启动新的 dyno 时,旧服务,直到对它的所有请求都已处理完毕(然后将其删除)。

    有趣的是,使用 EB 运行多台服务器的托管成本可能比单个 Heroku 实例便宜,尤其是在包含附加组件成本之后。

其他一些未明确询问的问题,但由其他答案引起的:

  1. 使用其他提供商进行生产和开发是一个坏主意。

    我希望人们提出这个建议。虽然理想情况下,代码应该在任何合理的平台上都可以正常运行,因此应尽可能可移植,但每个主机上的软件版本将有很大差异,并且仅仅因为代码以暂存方式运行并不意味着它将在生产环境中运行(例如,主要的 Node.js / Ruby / Python / PHP / Perl 版本可以在使代码不兼容的方式上有所不同,通常以无声的方式进行,即使您具有不错的测试覆盖率,也可能无法捕获它们。

    一个好主意是利用 Heroku 之类的东西进行原型设计,较小的项目和微型站点 - 这样您就可以快速构建和部署事物,而无需花费大量时间进行配置和维护。

    做出该决定时,请务必考虑同时运行生产实例和预生产实例的成本,不要忘记复制整个环境的成本(包括第三方服务,例如数据存储 / 附加组件,安装和配置 SSL 等) 。

  2. 如果使用 AWS,请警惕 Bitnami 等供应商提供的 AWS 预配置实例 - 这是一场安全噩梦。默认情况下,它们可以公开许多臭名昭著的易受攻击的应用程序,而无需在说明中进行提及。

    可以考虑只使用受良好支持的主流发行版,例如 Ubuntu 或 Debian(如果需要 RPM 支持,则使用 CentOS)。

    注意:Amazon 提供了自己的发行版,称为 Amazon Linux,该发行版使用 RPM,但是它是 EC2 专用的,第三方 / 开源软件的支持较少。

  3. 您还可以在 AWS(或 Lightsail)上设置 EC2 实例,并在其上配置诸如flynndokku 之类的东西 - 然后可以在其上轻松部署多个站点,如果您维护大量服务或想要成为一个实例,这是值得的能够轻松产生新事物。但是,设置它并不像使用 Heroku 那样自动,它最终会花费大量时间来配置和维护它(到目前为止,我发现使用 Amazon 集群和 Docker Swarm 进行部署比设置它们要容易得多; YMMV)。

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

我讨厌花时间配置服务,但是如果我将其用于所有事情,那么我的 Heroku 账单每年将成千上万,而 AWS 却只占成本的一小部分。

tl; dr

如果钱从来都不是问题,那么我会使用 Heroku 来处理几乎所有事情,因为这是一个巨大的节省时间 - 但我仍然希望将 AWS 用于更复杂的项目,在这些项目中我需要 Heroku 无法提供的灵活性和更高级的服务。

对我来说,理想的情况是 ElasticBeanstalk 的工作方式更像 Heroku,即配置更简单,部署机制更快,更好。

now.sh就是一个几乎就是这样的服务示例 ,它实际上是在幕后使用 AWS,但使部署和集群像在 Heroku 上一样容易(具有自动 SSL,DNS,正常部署,超级容易的集群设置和管理)。

我已经在 Node.js 应用程序和 Docker 映像部署中大量使用了它,主要的警告是实例是共享的(这反映在它们的较低成本中),目前没有选择购买专用实例的选择。但是,他们的开源部署工具 “now” 也可以用于部署到 AWS 以及 Google Cloud 和 Azure 上的专用实例。

在将人员从 Heroku 迁移到 AWS 的业务中,这占了很大比例。两者都有优点,但是过一会儿,它就会在 Heroku 上变得一团糟... 一旦您需要某种程度的复杂性,就不再容易因 Heroku 的限制而难以维护。

也就是说,通过具有出色的框架 / 工具的 AWS,越来越多的选择可以简化 Heroku 和 AWS 的灵活性。

有趣的是,Heroku 实际上在后端使用 AWS。它可以消除所有开销,并为您在 EC2 上进行体系结构管理。 (在采访中从大公司的高级工程师那里获得了这些知识)

好!我的观察员 Heroku 以崭露头角和刚出生的开发人员而闻名,而 AWS 具有先进的开发人员角色。 DigitalOcean 也是这一领域的主要参与者。通过单击 DigitalOcean 和 AWS,Cloudways 使得创建 Lamp 堆栈变得非常容易。一次单击即可更新所有服务和程序包,这比手动完成所有操作要好得多。

您可以在此处完全签出: https : //www.cloudways.com/blog/host-php-on-aws-cloud/