微服务组合方法

Tav*_*ies 6 architecture web-services microservices

我对微服务社区有疑问.我将从教育领域给出一个例子,但它适用于每个微服务架构.

假设我有学生服务许可服务,其业务要求是学生数量受许可限制.因此,每次创建学生时都必须进行许可检查.有多种类型的许可证,因此许可证的类型必须包含在操作中.

我的问题是你发现哪种方法在实践中更好:

  1. 构建一个调用2个服务的组合服务
  2. 将学生服务与许可服务相结合,以便在调用createStudent时,学生服务会调用许可服务,并且只有在完成后才会创建学生服务
  3. 使用基于事件的体系结构

人们谈论微服务体系结构更像是图形而不是层次结构,选项1有点将其转换为层次结构,在这种层次结构中,复合材料越来越粗糙.其他缺点是它会对服务客户端应该实际使用的内容产生混淆,并且会出现一些重复,因为复合API必须包含调用下游服务所需的所有参数.它确实有很大的好处,因为它为您提供了一个自然的地方来进行故障处理,编排和处理一致性.

选项2似乎也有缺点:

  • 许可API必须泄漏到学生API中,以便您可以指定许可限制.

  • 它给学生服务带来了很大的负担,因为它必须处理所有依赖服务的一致性

  • 随着更多服务需要在创建学生时做出反应,我可以看到依赖图快速失控,除了用于管理学生的逻辑之外,服务还必须处理这种复杂性.

选项3虽然天堂脱钩,但我认为这不会起作用,因为这一切都是从用户界面触发的,而且人们并不习惯"在这个新学生出现之前先去做其他事情"的方法.

谢谢

Pol*_*Pol 2

应用程序许可和创建学生是正交的,因此选项 2 没有意义。

选项 1 更明智,但我会尽量不构建另一个服务。相反,我会尝试通过许可中间件“过滤”对学生服务的调用。

这样,您就可以将此中间件用于其他服务调用(例如课程服务),并且许可和学生的 API 更改都可以独立完成,因为这些事情实际上是独立的。碰巧许可使用的是学生数量,但这很容易改变。

我不确定选项 3(基于事件的方法)在这里有何帮助。但它可以解决其他问题。