【问题标题】:Shared data across multiple microservices跨多个微服务共享数据
【发布时间】:2019-11-19 05:49:03
【问题描述】:
我有以下场景:
您可以通过应用程序服务创建应用程序。
在创建应用程序之前,需要检查特定信息。此信息是分发的,并且只能通过用户服务和产品服务访问。
第一个想法是通过服务总线通过所有服务发送消息,并通过所有必要的数据对其进行扩展,最后在应用程序服务中再次处理数据:
->应用-服务->用户-服务->产品-服务->应用-服务
第二个想法是将所有相关数据冗余存储在所有服务中。表示应用服务拥有用户和产品数据的副本。
感觉这两个想法都不对。
有没有更好的方法?
【问题讨论】:
标签:
architecture
microservices
【解决方案1】:
在您所描述的面向服务的架构中,在多个服务中复制数据是完全正常的,每个服务都扩展了特定于该服务的核心实体。
不过,我建议重新考虑您的服务边界。服务是特定业务流程的技术权威。服务并不意味着与业务数据保持一致。
例如,您的Product Service 和User Service 听起来像是业务数据,而Application-Service 听起来太宽泛,不了解更多信息。
考虑一个需要产品信息的Order-Service。它可能会从Product-Service 订阅ProductCreated 事件以使用产品信息填充自身,尽管可能只是一个ProductID。 Order-Service 不需要知道产品的名称、描述、价格(这可能存在于Billing 服务中)等。
由于服务是业务流程的唯一授权,因此它也应该拥有用户界面。复合 UI 模式允许使用来自多个服务的组件呈现单个页面。 Application-Service 将托管页面和将组件拉在一起的胶水。有关这方面的更多信息,我发现 Micro Frontends 很好读。