作者回复: 微服务之间要分两种情况,一种是项目级的少量微服务之间的调用。这样的调用可以放在微服务内的应用层,没必要再单独拿出一个微服务来进行服务组合和编排。
另外一种是复杂的企业级微服务调用和组合。拿出一个独立的BFF微服务的主要目的,一个是避免在一个微服务内组合太多的微服务的应用服务。二是,通过BFF微服务编排组合,可以减少由于前台的需求变化,传导到后端微服务中,可以降低后端微服务的发版频率,保持后端微服务的稳定。
作者回复: 是这样的。直白一点就是业务的归业务,基础的归基础,两者通过一层来适配,具体就是通过接口的方式。
作者回复: 它们几个其实是一点一点继承和发展过来的,在大的分层上基本上没什么太大的差异,思路基本是一致的,都是以领域模型为中心,加上用于编排的应用层逻辑。但是在分层的内部有一些小的差异。包括外部的适配方式也有差异。
作者回复: 你是说应用服务的编排吗?
你把这种编排理解成在同一个微服务内,一个方法对多个不同方法的调用就可以了,如果涉及到外部微服务的接口调用,你需要做DO与DTO的数据转换。
作者回复: BFF做微服务之间的编排。微服务内的应用服务主要做领域服务的编排和聚合之间的协调。BFF是微服务之间的,应用服务是微服务内的。
作者回复: 没有差异就不会有这么多叫法😄。它们几个其实是一点一点继承和发展过来的,在大的分层上基本上没什么太大的差异,思路基本是一致的,都是以领域模型为中心,加上用于编排的应用层逻辑。但是在分层的内部有一些小的差异。包括外部的适配方式也有差异。
作者回复: 是的,领域层也是少不了要演进的😄。
作者回复: 微服务之间的调用都是在应用层。
作者回复: 不是每个微服务都有自己的API网关,只是做一个示例。多个微服务可以共用一个API网关的。
在企业级中台设计的时候可以一个中台多个微服务共用一个网关。
作者回复: 这里你可以考虑单体架构的演进方式。可以先对系统做整体的领域建模分析,分解成多个不同的子域,建立领域模型。再根据优先级将部分领域模型对应的功能和数据从原来的单体应用中拆分出来,拆分为微服务。对原来的单体系统的前端提供API服务,原有系统的前端界面保持不变,整个架构演变用户无感知。当所有领域模型的微服务建设完成后,就可以抛弃原来的单体应用了。
作者回复: 仓储模式是一种设计模式。它是在应用业务逻辑和数据层之间增加的一个抽象层,应用逻辑通过调用仓储接口的方式与数据层交互,与数据相关的实现都在仓储实现中实现,这样就可以避免在应用逻辑中混入数据相关的实现逻辑。从而就解耦了应用逻辑和数据逻辑。在基础资源变化时不会对应用逻辑有太大的影响。
作者回复: 基础层是面向所有层的。
作者回复: 是这样的。
作者回复: 现在技术发展这么快,一切皆有可能的。这样做其实也是将领域模型和资源逻辑解耦的过程。
作者回复: 其实这几种架构模式大同小异,saga是通过分布式事务来保证微服务之间的数据一致性。对于实时性要求不高的建议优先采用领域事件驱动机制。
作者回复: 后端推送是指异步的事件机制吗?在领域事件那一节有专门介绍。
作者回复: 这种服务调用方式要尽量避免。在领域建模的时候,要根据服务地图和微服务的上下游关系把这种循环调用的方式切断。