我开始研究Heroku,作为在空闲时间创建个人应用程序的一个选择。事实上,我把一个现有的应用程序从AWS生态系统转换到了Heroku,这在DZone.com上的一个系列中有所体现。
从Heroku的一个全新的想法开始,我也能够快速创建一个基于健身的SaaS解决方案,这在DZone.com上的另一个系列中有所记录。
在我的几个应用中使用Heroku已经一年多了,我想我应该退一步,描述一下Heroku是如何工作的,并就为什么Salesforce拥有的解决方案应该成为你下一个项目的考虑因素提出想法。
什么是Heroku?
Heroku成立于2007年,是一个平台即服务(PaaS)的生态系统,目前支持Ruby、Java、Node.js、Scala、Clojure、Python、PHP和Go编程语言(加上社区对许多其他语言的支持)。由于它能够支持多种语言来完成相同的结果,Heroku被认为是 一个多语言 平台。
在最高层面上,Heroku打算为寻找生存空间的应用程序的需求提供服务。开发者通过创建一个Heroku "应用 "开始,并通过一个标准化的git仓库介绍他们的原始代码。Heroku只是从这里开始工作--建设和部署应用程序,然后根据需要提供服务供人使用。这包括静态资源(如Angular或React.js应用程序),它可以从Node.js实现中提供。
Heroku提供了超过175个附加服务来补充每个应用程序,特点是:
下面是我的一个个人应用的图示,利用数据库、安全和消息传递都在Heroku内。
Heroku努力做到一切可能,以便让用户专注于在他们的应用程序中建立特性和功能。采取这种方法,你可以避免通常需要的学习、实施、管理和支持DevOps驱动的应用程序部署路径的时间。
Heroku自2010年以来一直是Salesforce公司的一员,是2.12亿美元收购的一部分。事实上,Salesforce首席执行官Marc Benioff表示。
" 有了Heroku,我们的平台可以成为下一代云计算的基石。
Heroku的特点
Heroku远不止是一个部署和容纳应用程序的地方--它提供了所有必要的方面来补充应用程序托管和管理。在这篇文章中,我将重点介绍Heroku的四个有趣的方面。
1.Buildpacks和Slugs
Buildpacks是Heroku生态系统中的一种机制,它编译应用程序代码并创建一个 "slug"。蛞蝓是一个预先包装好的应用程序副本(包括任何必要的运行时层),经过优化后可以分发到一个动力装置。为了更好地理解这个概念,请看下面的图示。
作为在Heroku中创建一个新的应用程序的一部分,从包含要部署的源代码的仓库中创建一个git远程。有了这个,就可以发布一个标准化的
git push
命令,同时指定目标主机和分支。在上面的例子中,
git push heroku master
,将当前分支推送到 "heroku "远程中的 "master "分支。
这就触发了Heroku开始处理这个请求。第一步是扫描项目,了解Heroku的配置中是否指定了构建包。如果使用上述支持的语言之一,这一步就没有必要了,因为Heroku会自动选择正确的构建包。如果你没有使用官方支持的语言之一,你可以创建一个自定义的构建包,或者你可以从 Elements Marketplace 的6000多个第三方构建包中选择。
然后,构建包会告诉Heroku如何检索运行应用程序所需的所有依赖性和运行时间。这个动作的结果是创建一个应用程序的slug。然后,Heroku将该lug部署到一个(或多个)dynos,并运行构建包或用户指定的命令来启动应用程序。
2.Dynos、配置变量和发布
在上一节中,利用buildpack和slug在Heroku中启动一个新的应用程序。应用程序本身运行在Heroku dyno中,它是Heroku平台的核心。Dynos是基于Linux的容器,它是孤立的,旨在根据用户指定的命令来执行代码。(Heroku想出了dyno这个词,因为在当时,Docker还没有提出或普及容器这个词)。由于这种设计,Heroku允许dynos扩大(或缩小)以满足容量需求。
为了避免在应用程序的源代码中包含敏感信息和配置信息,Heroku提供了一个机制来容纳配置变量。对于命令行用户,
heroku config
命令提供以下信息。
╭─me@mbp ~/new-dyno ‹master›
╰─$ heroku config
=== new-dyno Config Vars
DATABASE_URL: mysql://someUser:somePassword@someHost.net/someService?reconnect=true
CLIENT_ID: myAuthClientId
CLIENT_SECRET: myAuthSecreteId
在Heroku仪表板的设置选项卡中,有一个补充的基于网络的版本。
每当部署代码、改变配置变量或修改附加资源时,Heroku都会创建一个新的版本并重新启动dyno应用。这是Heroku的一个经常被忽视的功能,因为Heroku总是提供轻松回滚到先前状态的能力。
发布历史可以在Heroku仪表板上看到,也可以通过heroku releases
命令行获得。
╭─me@mbp ~/new-dyno ‹master›
╰─$ heroku releases
=== new-dyno Releases - Current: v3
v3 Deploy 2b93a215 me@example.com 2021/03/23 07:49:35 -0400
v2 Set CLIENT_ID, CLIENT_SECRET config vars me@example.com 2021/03/19 07:26:34 -0400
v1 Deploy 40e37807 me@example.com 2021/03/19 06:48:00 -0400
3.Heroku插件
一个产品或平台的适应性在很大程度上与库或服务有关,只需点击鼠标按钮或发布一个简单的命令行语句就可以了。目前,Heroku包括超过175个附加产品,涵盖了超过24个不同类别的附加组件。下面是Heroku市场的当前截图,在这里可以看到附加组件,并可以立即添加到现有的应用程序中。
大多数Heroku附加组件提供免费使用级别或试用期,这两种选择都允许开发者在进行长期投资之前更好地了解该产品。
就我个人而言,我已经利用了免费试用层级来比较在同一领域竞争的解决方案。事实上,附加组件可以像安装时一样迅速删除。
4.4.日志和路由
Heroku通过自动整理和路由来自你的应用程序的每个部分的日志到一个单一的渠道,简化了日志记录。这提供了一个真正全面和可扩展的以应用为中心的日志。
Heroku使用Logplex进行分布式日志路由和整理。使用命令行界面,可以发出以下命令来查看当前的日志。
╭─me@mbp ~/new-dyno ‹master›
╰─$ heroku logs --tail
2021-03-28T20:45:30 app[web.1]: 2021-03-28 20:45:30.020 INFO 4 --- [scheduling-1] c.g.j.f.services.SmsService : sendSmsSummaryMessages() completed
2021-03-28T20:50:00 app[web.1]: 2021-03-28 20:50:00.019 INFO 4 --- [scheduling-1] c.g.j.f.services.SmsService : start date=03/28/2021, time=08:50 PM
2021-03-28T20:50:00 app[web.1]: 2021-03-28 20:50:00.019 INFO 4 --- [scheduling-1] c.g.j.f.services.SmsService : end date=03/30/2021, time=02:50 AM
利用附加组件的力量可以将Coralogix Logging、Logentries、LogDNA、Papertrail和Sumo Logic等工具引入应用,以提供全功能的逻辑分析和调试。
谁应该(和不应该)使用Heroku?
由于有多种选择在竞争客户,下表说明了Heroku是(和不是)一种选择的情况。
从我个人对IT行业30年的分析来看,我觉得可以断言,Heroku提供了必要的解决方案集,以满足目前运行的80%以上的应用程序的需求。唯一的限制因素是要进行必要的分析和规划,以利用Heroku提供的服务。
一旦Heroku成为目的地,每个应用程序都将开始从时间中受益,这些时间可以应用于未来的特性和功能。
如果让我为任何IT专业人士起草一份简明的任务书,那将是非常简单的。
"将你的时间集中在提供特性/功能上,以扩大你的知识产权的价值。在其他方面利用框架、产品和服务"。
基本上,如果你是在建立一个有助于用小工具做一些事情的应用程序,那么就把你的时间和精力投入到最大限度地使小工具具有竞争优势的方法上。避免花时间去做一个框架、产品或服务产品已经提供的事情--知道他们很可能总是提供一个比你更好的解决方案,因为这就是他们存在的原因。
在为我的应用程序使用Heroku之前,我发现自己花费了不必要的时间来试图弄清楚Heroku已经为我做了(而且做得很好)的方面。这种努力带来了一个严重的后果,即无法以正确的方式分配我有限的时间。现在,一年过去了,我对坚持上述简单的任务声明所取得的成果感到惊讶。
从我能找到的最新信息来看,我的应用程序是目前在Heroku上运行的900多万个应用程序的一部分--显然是在下一代云计算中扮演了一个角色。
祝你有一个非常好的一天!