基于Heroku建议的云微服务设计

时间:2018-08-20 22:28:01

标签: heroku architecture microservices paas

我是微服务领域的新手,我试图了解它以及如何将其应用于我的需求。我需要设计一个易于维护和扩展的云平台(据我所知):

  • Rails API + PostgreSQL(微服务1)
  • 前端框架(微服务2)
  • 一些Python脚本(微服务3)
  • 其他一些Python脚本(微服务4)

this question & answer的启发,每个微服务都是一个单独的Heroku应用。他们彼此交谈时的安全性和响应时间如何?

此外,由于该服务旨在发展,因此迟早会变得昂贵,如何在这种情况下优化成本?我刚刚发现了CaptainDuckDuck,但是我担心它的用户群会缺乏“经验”,因为它很新并且不如其他PaaS受欢迎。唯一的解决方案是去DigitalOcean或AWS EC2之类的东西,并自己管理Heroku的工作吗?

因为这样做是微服务,所以并不是真正的微服务设计,因为并非所有服务都托管在同一台机器上,对吗? 更适合微服务的方法是使用Heroku Private Spaces(即使这不能解决成本问题)?

有关信息,我已经将此设计投入运行。因此,这不是“会起作用吗?” 的问题,而是更多的“这是正确的方法吗?”

感谢您的反馈

1 个答案:

答案 0 :(得分:1)

理论上,您确实可以按照您的建议将每个微服务部署为一个完全独立的Heroku应用程序。

但是,根据您的要求,一种更简单,可能更好并且几乎绝对便宜的方法可能是使用polyglot Heroku app将它们作为单独的微服务部署在一个Heroku dynos中。

例如,您可以将Rails API作为单个应用程序的web dyno运行。在这种情况下,您可能希望它也可以为您的前端框架服务。

您应该考虑将Heroku Postgres用作托管DBaaSconnect your Rails web dyno to your Heroku Postgres instance轻而易举。

然后,您可能想将每个python脚本定义为单独的process type in your Procfile。如果需要它们“始终打开”,则需要这样做。 另外,根据您的要求,您可能需要考虑将one-off dynos用于python脚本。 无论如何,您的python脚本将在单独的dynos上运行。

请注意,您的每种过程类型都可以是separately scaled

您需要考虑的一件事是微服务如何进行交互(如果需要这样做)。有很多方法可以解决此问题,但是请注意,只有Web dyno实例才能侦听http / s流量。有关此方面的一些想法,请参见here