我是微服务世界的新手,我尝试了解它以及它如何应用于我的需求。我需要设计一个易于维护和扩展的云平台,其中包含以下内容(据我所知):
- Rails API + PostgreSQL(微服务 1)
- 前端框架(微服务2)
- 一些 Python 脚本(微服务 3)
- 其他一些 Python 脚本(微服务 4)
灵感来自this question & answer ,每个微服务都是一个单独的 Heroku 应用。他们之间相互通话时的安全性和响应时间怎么样?
此外,由于服务是要增长的,迟早会很昂贵,在这种情况下如何优化成本?我刚刚发现CaptainDuckDuck但我担心它的用户群“缺乏”经验,因为它很新并且不像其他 PaaS 那样受欢迎。唯一的解决方案是使用 DigitalOcean 或 AWS EC2 之类的东西并自己管理 Heroku 所做的工作吗?
因为像这样做微服务,并不是真正的微服务设计,因为所有服务都不是托管在同一台机器上,对吗? 一种更微服务友好的方法是使用 Heroku Private Spaces (即使这不能解决成本问题)?
仅供引用,我已经启动并运行了此设计。因此,这不是“这会起作用吗?”的问题,而是“这是正确的方法吗?”的问题。
感谢您的反馈
最佳答案
理论上,您确实可以按照您的建议将每个微服务部署为完全独立的 Heroku 应用程序。
但是,根据您的要求,一种更简单、可能更好且几乎肯定更便宜的方法可能是将它们部署为一个 polyglot Heroku app 中的单独微服务。 ,使用Heroku dynos .
例如,您可以将 Rails API 运行为 web dyno您的单个应用程序。在这种情况下,您可能希望它也为您的前端框架提供服务。
您应该考虑使用Heroku Postgres作为托管DBaaS 。轻松访问connect your Rails web dyno to your Heroku Postgres instance .
然后,您可能希望将每个 python 脚本定义为单独的 process type in your Procfile 。如果您需要它们“始终在线”,则需要这样做。 或者,根据您的要求,您可能需要考虑使用 one-off dynos用于您的 python 脚本。 无论如何,您的 python 脚本将在单独的测功机上运行。
请注意,每个进程类型都可以是 separately scaled .
您需要考虑的一件事是您的微服务如何交互(如果您需要它们这样做)。有很多方法可以解决此问题,但请注意,只有您的 Web dyno 实例可以监听 http/s 流量。请参阅here对此的一些想法。
关于heroku - 基于 Heroku 建议的云微服务设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51939287/