假设我有 `student-service` 和 `licensing-service`,业务要求是学生人数受许可证限制。因此,每次创建学生时必须进行许可证检查。许可证有多种类型,因此操作中必须包括许可证的类型。
我的问题是你们在实践中发现哪种方法更好:
1. 构建调用两个服务的复合服务 2. 将 `student-service` 与 `licensing-service` 耦合,因此当调用 `createStudent` 时,`student-service` 将调用 `licensing-service`,只有当完成该调用后才会创建学生。 3. 使用基于事件的架构
人们谈论微服务架构更像图形而不是层次结构,`选项1` 使得我们越来越依赖逐渐粗糙的组合服务,并且还会导致混乱,使客户端真正应该使用哪个服务变得不清楚,因为组合API必须包含调用下游服务所需的所有参数。它确实有一个巨大的好处,因为它为您提供了处理失败、编排和处理一致性的自然位置。
`选项2` 似乎也有缺点:
- 许可证API的信息会泄露到学生API中,以便您可以指定许可证限制。 - 它给 `student-service` 带来了很大的负担,因为它必须跨所有依赖服务处理一致性。 - 随着越来越多的服务需要在创建学生时响应,我可以看到依赖图很快变得失控,服务还必须处理除了自己管理学生的逻辑之外的复杂性。
`选项3` 虽然是解耦的天堂,但我认为它不太可行,因为这都是从 UI 触发的,人们并不习惯“去做其他事情,直到这个新学生出现”的方法。
谢谢。
create-student
遵守许可限制的一种方式。当然,如果许可证和学生服务都可用,组合服务实际上无法强制执行任何内容。 您认为学生创建和许可证完全独立 - 鉴于业务要求,我不这样认为,因此,选项2对我来说非常有意义。我认为,关键在于强调业务需求还是灵活性。 - schaueho