Cloud Foundry中的微服务是如何通信的



我是Cloud Foundry的新手。遵循Predix提供的参考申请(https://www.predix.io/resources/tutorials/tutorial-details.html?tutorial_id=1473&tag=1610&旅程=使用%20引用%20App&连接%20设备%20;resources=159214731600),应用程序由几个模块组成,每个模块都作为微服务实现。

我的问题是,这些微服务是如何相互交流的?我知道他们一定在使用某种REST调用,但问题是:

  1. 服务注册表:假设我有服务A、B、C。这些组件如何"发现"其他组件的REST URL?因为组件URL只有在服务被推送到云代工之后才知道。

  2. 云代工如何在服务启动和关闭期间控制组件依赖性?假设在B启动之前A无法启动。如果A关闭,则需要关闭B。

ref应用程序"应用程序"由几个"应用程序和Predix"服务"组成。应用程序通过manifest.yml中的一个条目绑定到服务。因此,它通过该绑定获得服务端点和其他重要的配置信息。当应用程序绑定到服务时,"cf env"命令会返回所需的信息。

属性文件中可能仍然存在一些服务端点信息,但随着时间的推移,这些信息将被重构。

ref应用程序的各个应用程序被放在单独的微服务中,因为它们被用作其他应用程序的组件。因此,微服务方法。如果应用程序之间存在启动依赖关系,则将应用程序推送到云中的CI/CD管道将需要管理这些依赖关系。ref应用程序中的依赖关系只是显而易见的,请继续阅读。

虽然微服务的耦合确实不在设计中。发生这种情况有一些明显的原因。语言和功能。如果你有一个用Java编写的"后端"微服务,由NodeJS上用Javascript编写的"前端"UI微服务使用,那么它们将作为两个独立的应用程序推送。理论上讲,如果没有后端,UI就不会工作得很好,但有一个计划可以通过一些封装的JSON来实现这一点。仍然存在一些逻辑耦合。

你从微服务中得到的好处是,它们可能需要以不同的方式进行扩展,而云代工可以通过"cf scale"命令轻松实现这一点。它们可能被多个其他微服务使用,从而产生新的规模需求。因此,考虑需要扩展什么以及功能的发布周期有助于决定微服务的组成部分。

例如,对于订购,您的应用程序可能需要谷歌地图api,因此可以说它应该首先启动,然后再启动您的应用。但实际上,您的应用程序应该考虑到mapsapi可能已关闭。你的目标应该是,当依赖的微服务不可用时,你的应用程序表现良好。

"应用程序"的"应用程序(apps)"知道每个应用程序的名称和云提供的URL。实际上,在各种云和空间中运行着许多参考应用程序的副本。它们以开发人员、QA或集成等为开头。我们能让开发人员前端与QA后端微服务对话吗?当然,这只是一个URL。

除了前面提到的etcd(我还没有尝试过),您还可以创建一个CUPS服务"定义"。这也是一组键/值对。您可以将其绑定到Space(dev/qa/stage/prod),并通过清单将其绑定。这样你就可以从环境中获得道具。

如果微服务确实需要相互通信,那么正如您所注意到的,通常是通过REST进行的。然而,微服务纯粹主义者可能反对这种依赖关系。除此之外,服务发现是通过将可用端点发布到服务注册表来实现的——在CloudFoundry的情况下是etcd。一旦注册了端点,给定服务的各种实例就可以使用POST操作将自己注册到注册表中。客户端只需要知道发布的终点,而不需要知道单个服务实例的终点。这是自我注册。客户端将与查找服务注册表的负载均衡器(如ELB)通信,或者客户端应该知道服务注册表。

对于(2),根据微服务定义,如果设计这样一组耦合的服务,表明一些迫在眉睫的问题,如编排和同步,那么微服务之间不应该存在这样的硬依赖关系。如果出现这种依赖关系,您将不得不依赖服务注册、健康检查和断路器来进行回退。

相关内容

  • 没有找到相关文章

最新更新