Tav*_*ies 6 architecture web-services microservices
我对微服务社区有疑问.我将从教育领域给出一个例子,但它适用于每个微服务架构.
假设我有学生服务和许可服务,其业务要求是学生数量受许可限制.因此,每次创建学生时都必须进行许可检查.有多种类型的许可证,因此许可证的类型必须包含在操作中.
我的问题是你发现哪种方法在实践中更好:
人们谈论微服务体系结构更像是图形而不是层次结构,选项1有点将其转换为层次结构,在这种层次结构中,复合材料越来越粗糙.其他缺点是它会对服务客户端应该实际使用的内容产生混淆,并且会出现一些重复,因为复合API必须包含调用下游服务所需的所有参数.它确实有很大的好处,因为它为您提供了一个自然的地方来进行故障处理,编排和处理一致性.
选项2似乎也有缺点:
许可API必须泄漏到学生API中,以便您可以指定许可限制.
它给学生服务带来了很大的负担,因为它必须处理所有依赖服务的一致性
选项3虽然天堂脱钩,但我认为这不会起作用,因为这一切都是从用户界面触发的,而且人们并不习惯"在这个新学生出现之前先去做其他事情"的方法.
谢谢
应用程序许可和创建学生是正交的,因此选项 2 没有意义。
选项 1 更明智,但我会尽量不构建另一个服务。相反,我会尝试通过许可中间件“过滤”对学生服务的调用。
这样,您就可以将此中间件用于其他服务调用(例如课程服务),并且许可和学生的 API 更改都可以独立完成,因为这些事情实际上是独立的。碰巧许可使用的是学生数量,但这很容易改变。
我不确定选项 3(基于事件的方法)在这里有何帮助。但它可以解决其他问题。