编排服务组合中如何隔离服务

How to isolate services in choreography service composition

我总是鼓励在不知道其他服务存在(孤立)的情况下设计每个服务。

几天前,我在阅读有关微服务架构中编排与编排的优缺点时,我遇到了这个话题, 假设我们有一个包含 3 项服务的系统:订购、付款、发货。如果我使用编排器,编排器知道何时以及如何调用每个服务。事实上,它的职责是知道如何以及何时调用什么服务,但在编排中,我不知道支付服务何时不知道订购服务的存在如何订阅它的事件(当然至少订购系统需要支付模型)?

当我开始思考时,我变得更加困惑,如果我们在订购服务中有一种方法,returns 订购信息后跟付款数据和运输数据。 return 付款和运输数据如何?

when payment service does not know the ordering service exists how its gonna subscribe to its event (for sure at least ordering system needs to have payment models)?

如果业务目的需要,一个服务知道另一个服务是可以的。只要确保您没有混淆目的并确保任何一项服务的独立开发过程,例如正确地对您的 API 进行版本控制,并制定过时政策。 Google 甚至对团队之间的服务使用征收内部费用。

也允许有两种服务都使用的代码库,只要您像对待第 3 方库一样对待这些库依赖项。

how its going to return payment and shipping data?

根据聚合过程的复杂性,您可以使用第三种服务来负责依赖于支付的业务范围和 shipping-services,或者您可以使用专用的聚合器组件来允许merge/split 来自前端的请求(有时作为 API Gateway). If your aggregation logic is complex, create a dedicated service, otherwise you can use a generic aggregator.

的一部分实现