当前位置: 首页 > 知识库问答 >
问题:

微服务:聚合数据:有什么好的模式吗?

茹元魁
2023-03-14

我有以下微服务架构的用例。

我的问题是,在当前情况下,我有3个微服务和一个APIGateway。

最后,网关必须在聚合(合成)来自3个服务的数据之前进行大量查询。因为3个微服务只提供基本的数据集。

请查看图片了解更多详情!

这是一个好的模式吗?还有其他模式吗?

共有1个答案

卫浩瀚
2023-03-14

以上是微服务的一个常见问题——域分离。尽管每个服务在不同的域中执行任务,但它们包含与其他服务“拥有”的数据的关系。您目前解决这个问题的方式实际上是管理实现的更简单的方法之一,因为它不是非常复杂,但是有更有效的解决方案。

在采用微服务时,很难理解的一件事是数据复制并不是一件坏事。尽管感觉数据在多个地方悬而未决,但通过将他们需要的数据复制到他们自己的托管数据库中,服务的创建者实际上获得了更多的自主权。

如果要将事件发布到共享队列中,则可以为微服务设置读取/同步过程,这些过程依赖于来自其他服务的数据来读取所述事件并将数据镜像到专用数据库中。在您的示例中,这意味着目录服务将能够返回 API 网关返回的完全填充的模型,而无需调用其他服务。

来源:微服务最难的部分:你的数据

另一个越来越常见的策略甚至更难理解,但它为不断发展的微服务架构提供了很多长期价值。不要将服务的数据库视为持久存储,而是将它们视为视图。所有写入都可以转到中央源,服务定义如何将中央数据映射到其读取服务的持久视图中。这让服务定义视图,其中包括其他服务写入的数据——同样,不限制服务创建者的自主权。

来源:使用Apache Samza将数据库由内向外翻转

根据您对增长的期望,可能不值得实施上述任何一种解决方案。鉴于数据的关系性质,您可能只是想将服务合并到一个可以使用连接进行查询并自行构建模型的服务中。

注意:上述所有选项都有一个主要相似之处 - 不要依赖自定义网关来深入了解每个服务并构建模型关系。确保每个服务都有足够的信息和上下文来自行执行有意义的任务。

 类似资料:
  • 我正试图理解API网关和微服务聚合器模式之间的区别。 目前,从我对聚合器模式的理解来看,它是通过从各种微服务收集数据片段并返回一个聚合进行处理来实现的。 现在,API网关是聚合对单个微服务的调用的单一入口点。虽然这听起来可能与聚合器模式非常相似,但也有一些不同的特性。最重要的是,这个新服务不存储数据,而是负责API组合、请求路由和身份验证等新功能 我很想知道我的推理是否正确。 提前谢谢你!

  • 本文向大家介绍微服务有什么特点?相关面试题,主要包含被问及微服务有什么特点?时的应答技巧和注意事项,需要的朋友参考一下 你可以列出微服务的特征,如下所示: 围绕业务功能组织团队 做产品而不是做项目 基本的消息传递框架 去中心化治理 去中心化管理数据 基础设施自动化 容错设计

  • 主要内容:微服务架构,微服务架构 vs 单体架构,微服务的特点,微服务框架微服务(MicroServices)最初是由 Martin Fowler 于 2014 年发表的论文 《 MicroServices》 中提出的名词,它一经提出就成为了技术圈的热门话题。 微服务,我们可以从字面上去理解,即“微小的服务”,下面我们从“服务”和“微小”两个方面进行介绍。 1) 所谓“服务”,其实指的是项目中的功能模块,它可以帮助用户解决某一个或一组问题,在开发过程中表现为 IDE(集

  • 问题内容: 该单例模式是一个缴足成员四人帮的模式书,但最近似乎而是由开发者世界孤立。我仍然使用很多单例,尤其是对于工厂类,尽管您必须对多线程问题(实际上是任何类)有所注意,但我看不出它们为什么如此糟糕。 堆栈溢出似乎特别假设每个人都同意Singletons是邪恶的。为什么? 请以“ 事实,参考或特定专业知识 ” 支持您的回答 问题答案: 布赖恩·巴顿(Brian Button)的释义: 它们通常用

  • 问题内容: 最近,我遇到了AngularJS Strict DI模式。使用它的目的和好处是什么?通过特别在移动设备上使用它,我们是否可以显着提高性能? 我尝试将其应用于代码,编写代码时未做任何注释。但是,我要压缩代码,并在构建过程中进行ng- annotate。但是,为什么在将严格的DI模式添加到代码中后,仍然出现错误消息“需要显式注释”? 问题答案: 严格的DI模式基本上在运行时发现不符合最小化