2017-03-16 60 views
3

我有一个关于heroku架构的问题。我正在创建以微服务运行的小应用程序(不是很多 - 大约4-6个微服务)。关键是,我希望这个应用程序全天候可用,所以免费的动态小时对我来说是不够的。同一个测功机可以运行多个不同的进程吗?

我看到,如果我将扩大到hobby计划我会得到什么heroku电话10 Process Types。在这里我的问题来了:

我可以在每一个进程(网络)上运行另一个微服务,或者heroku给我的能力只能安装一个网络进程每个动态,并给10 process types是缩放我的应用程序?换句话说,如果我需要6个运行24/7的微服务,我应该购买6个业余爱好者?

回答

4

您只能有1个Web进程类型。您可以水平缩放您的web进程以在多个dynos上运行(“水平可伸缩性”),但是您至少需要升级至标准1x dyno类型才能这样做(即,如果您正在使用,则只能运行1个web dyno实例免费或爱好动态类型)。

但是,除了Web进程之外,还可以实例化多个其他进程类型(例如“worker”进程)。这些将无法侦听来自客户端的HTTP/S请求,但可用于从Web进程中卸载长时间运行的作业。因此,如果你将你的4-6个微服务中的每一个映射到你的Procfile中的一个不同的进程类型,并且如果你的微服务不是他们自己的Web服务器,那么你也许可以用爱好dynos来做。

+0

好的。明白了你的观点。有没有办法在一台dyno上部署多个微服务?例如作为一组码头集装箱? –

+0

您当然可以在单个测功机上运行多个进程,但不一定建议。 –

1

Heroku的默认模式是一个过程类型映射到自己的赛道:https://devcenter.heroku.com/articles/procfile状态

“应用程序中每个赛道将属于过程 类型之一,并开始运行该命令而执行与 关联的进程类型“。

例如, heroku ps:scale worker=1worker类型。

其他人写了关于how to use foremanHoncho运行在单个DYNO多个蟒工艺,其利用一个次级Procfile和可能的其他塞设置在post_compile步骤。据推测,你可以根据你选择的语言和构建包做类似的事情;官方buildpack API没有列出这一步,虽然:/。也就是说,考虑到Heroku的基地Ubuntu stacks,你或许可以通过web: script.sh逃脱任何设置和执行进程。

对于Docker容器中的多个进程的分组,您可以检出https://runnable.com/docker/rails/run-multiple-processes-in-a-container,这又依赖于自定义的CMD [ "/start.sh" ]。请注意,这与Docker的单容器每单元容器哲学背道而驰,并且会给您带来更多令人头疼的问题,例如(如果你决定使用多个容器,Heroku在using Docker Compose for local dev上有书写)。

另外,别忘了你是bounded by the performance of your dynoprocess/thread limits

当然,对于非玩具生产或长期开发维护,通常不建议给定测功机中的多个进程。;)

2

RUNIT buildpack这使得它可以很容易地结合多个过程在一个测功机 - 只要他们都符合您的dyno内存限制(512M的霍尼测功机)。

每个Heroku应用程序仍然只有一个HTTP端点,这意味着您的微服务需要通过队列,pub/sub或某个RPC集线器(如deepstream.io)进行通信。

相关问题