Microservices 微服务中的复合/聚合服务

Microservices 微服务中的复合/聚合服务,microservices,Microservices,我们正在准备从一个整体模型向一个微服务模型的转变,作为这一转变的一部分,我正在准备设计和分解我们的服务。我越来越多地发现一种模式再次出现,我在web上看到这种模式被称为复合或聚合服务,对此我并不完全清楚 我的问题分为两部分: 首先,我看到的模式是,在一个来自UI的调用中,我需要通过对话从2个或更多服务获取数据。让我们调用这些服务A、B和C。现在,我可以创建另一个服务,比如服务D,它将为这个特定的调用进行编排,并将管理对服务A、B和C的下游调用。我认为这被称为复合或聚合服务。我对此感到困惑的是,现

我们正在准备从一个整体模型向一个微服务模型的转变,作为这一转变的一部分,我正在准备设计和分解我们的服务。我越来越多地发现一种模式再次出现,我在web上看到这种模式被称为复合或聚合服务,对此我并不完全清楚

我的问题分为两部分:

首先,我看到的模式是,在一个来自UI的调用中,我需要通过对话从2个或更多服务获取数据。让我们调用这些服务A、B和C。现在,我可以创建另一个服务,比如服务D,它将为这个特定的调用进行编排,并将管理对服务A、B和C的下游调用。我认为这被称为复合或聚合服务。我对此感到困惑的是,现在每当我需要一些协调时,我必须创建另一个位于原子服务之上一个级别的服务,只是为了协调

而且,这看起来很像BFF(后端前端)模式,但在我的例子中,我有多个“复合”服务组成我的BFF。我不确定,但我认为对于BFF来说,你的所有UI调用都有一个大的“编排”服务,即使这可能是一个SPOF,看起来像是一个反模式

因此,我的问题是,我是否应该让这些“微编排器”(如上面示例中的服务D)来进行协调?或者我应该让每个服务直接调用它们依赖于数据的任何服务吗

其次,对于所有请求,我应该只在原子服务之上实现一层吗?我已经看到了许多名称编排/api网关/边缘服务,或者有多个这样的“微编排器”或复合服务?如果顶层只有一个服务,比如api网关,这看起来像是一种反模式,因为现在有了SPOF,但我认为推荐使用它

为了说明这一点,我将提供具体的例子,说明我上面描述的情况,以及我认为非常常见的情况。在UI中有一个登录页面,在输入他们的用户名/密码后,我们将验证凭据,如果凭据正确,则返回所有用户信息

将有两个服务来实现这一点,一个用于检查/验证用户凭据的身份验证服务和一个用于获取所有数据的用户服务。如何协调这个简单的调用,以便在凭据有效的情况下,我们在同一个api调用中从用户服务返回数据,如果不是,我们只从身份验证服务返回错误。是否应该有一个组合服务来协调对这两个服务的调用,或者如果凭据有效,这些服务是否应该直接与调用用户服务的AuthService交互?这应该是多个组合服务中的一个,还是应该将所有组合服务合并到一个api网关类型的服务中

我已经看了以下内容,但这并没有提供任何明确的答案。我的问题不仅在于服务的组合,还在于是否应该有一个这样的组合,即一个api网关,或者对于需要它的每个交互都应该有多个组合服务


身份验证和授权是一种特殊情况,OAuth 2授权服务器根据身份验证服务器(即LDAP等)对用户进行身份验证,并返回令牌。它主要是基于OAuth2规范设计的。让我们暂时把它放在一边

有时会完成服务编排。但是如果你经常看到自己需要做服务编排,你需要考虑其他一些事情:

首先需要检查您是否正确标识了服务的绑定上下文。换言之,各服务之间职责的逻辑划分是否正确

如果您对该部门感到满意,则需要实现以下一种或多种模式:

  • CQRS/物化视图
  • 传奇
  • 活动来源
  • 这里解释了使用CQR和事件源处理此类场景的方法: