在围绕微服务架构进行POC的同时;我需要解释的一个挑战是如何以有效的方式从不同的服务中获取报告数据?
我希望能指导我朝着正确的方向前进。
如果数据跨越多个微服务,那么它取决于业务用例。在我看来,有几种方法可以做到这一点
方法1查询微服务dbs(不是首选方法)
如果您的微服务不是非常负载,那么您可以在非高峰时间查询来自所有服务数据库的数据,并将记录插入仓库数据库。这不是首选方法,因为您仍然需要为服务增加额外的负载,但它更容易。报告数据也可能不是实时的。
方法2事件采购/ CQRS
这种方法非常受欢迎,因为您的写入和读取模型是完全独立的。简而言之,如果工作是由您的不同微服务生成的事件的方式,也将更新您的读取模型称为物化视图。如果您要求报告数据需要接近实时数据,那么这就是前进的方法。您可以根据需要调整报表模型,并可以使用事件创建多个报表模型。但这是一种复杂的方法,需要相应的应用设计。然而,好处是无数的。如果您有兴趣,可能需要了解有关Event Sourcing和CQRS的更多信息。
方法3只读了复制品
如果您使用的是云服务,则可以创建数据库的只读副本,并可以使用它们进行报告。这是一种被广泛接受的方法,因为您不会影响事务数据库。但这可能很昂贵,因为您要支付额外的数据库。
开始考虑如何在单片架构中设计应用程序(monolith-first strategy),然后为每个Miro服务识别有界上下文。
一旦你清楚了解微服务边界,开始考虑报告可能是一个报告需要来自多个微服务的数据,这需要在微服务之间进行编排。
请在以下github链接中找到更多详细信息