服务协同模式:Orchestration or Choreography

Orhchestration模式是指,有一个中心的控制模块协调多个服务模块(同步或异步)完成一个用户请求。这要求控制模块需要知道所有它依赖的服务模块的信息(e.g. service name),有一定程度的耦合。

例如:

orchestration

Choreography模式则没有这么一个中心的控制模块,一个请求被接收到并广播到系统中,系统中关心该请求的服务模块会进行处理,并且不必要将结果告知某个中心的控制模块。这带来的好处是使模块间完全解偶。

例如:

choreography

Choreography的模式有个问题是下如果某个服务模块没有接收到请求,或者处理该请求的过程中发生异常,由于没有控制模块的存在,默认情况下该异常无法被告警或者补救。因此,需要额外加入一套监控系统监控每一个请求是否被正确处理。

异步逻辑

服务之间的异步逻辑有多种实现方式:

最佳实践?

好吧,其实微服务里没有一个普适的方案,需要各种方案的结合使用,并且结合你的业务需求。

我个人认为接口设计越简单越好,所以觉得还是第一种更合适(异步+polling),最多在server端再向外发送一些额外的event供一些choreography的服务使用。