微服务架构中如何构建一个数据报告服务?

场景描述

在微服务架构中,每个微服务负责自己的数据库,微服务A是不允许直接连接微服务B的数据库进行操作的。

现在有2个微服务,一个是订单服务,一个是用户服务。

有一个数据报告的需求:生成一份包含用户信息订单报告

这就需要获取2个服务中的数据,进行连接汇总。

如何构建这个数据报告的服务呢?

方案1 直接连接数据库

直接连接订单服务、用户服务的数据库,获取所需的数据,拿到后进行加工处理即可。

非常简单,但有明显的问题。

首先是破坏了上面所说的微服务的那个原则,直接去连别人的数据库,太粗暴了。

还有一个更严重的问题,如果订单服务和用户服务的数据库表结构变化了咋办?

报告服务必须跟着一起改变,敏感度太高。

方案2 数据汇聚

不直连数据了,调用这两个服务的 REST API 接口获取想要的数据。

解决了上个方案的问题,但此方法最大的问题是性能差

报告服务需要最新的数据,就会经常访问这2个服务,随着数据规模的增加,3个服务的性能都会越来越低。

方案3 批量拉取数据

为报告服务建立一个自己的数据库,使用一个定时程序,批量从2个服务的数据库中拉数据,存入自己的数据库。

解决了上个方案的问题,性能明显提升,但好像又回到了第一个方案的问题,破坏了微服务的原则,而且对数据表结构的变动极其敏感。

好处是因为有了自己的数据库,方便多了,性能更好了。

方案4 事件推送模型

订单服务、用户服务中,数据表更后,产生一个事件,发布到消息系统中(例如 kafka),报告服务订阅相关主题,把接收到的数据写入自己的数据库。

好处:

  • 松耦合,业务服务和报告服务没有调用关系,不管是业务接口层,还是数据库层。
  • 数据一致性好,准实时,业务服务数据表更后立即发送事件消息,报告服务可以快速消费。
  • 性能好,数据吞吐量增加后,报告服务可以增加处理事件的 worker,提供处理能力。
  • 扩展性好,方便以后添加更多的数据处理需求,例如实时分析,而且,以后可能不止是做订单报告,可能会对更多的业务系统数据进行分析,到时,新服务只需把自己的数据变更事件发送到消息系统中即可。

翻译整理自:

https://medium.com/@muneeb.ah...

推荐阅读

Image placeholder
lileng原木
未设置
  69人点赞

没有讨论,发表一下自己的看法吧

推荐文章
SOA架构和微服务架构的区别是什么?

来源:rrd.me/fqdANSOA架构和微服务架构的区别首先SOA和微服务架构一个层面的东西,而对于ESB和微服务网关是一个层面的东西,一个谈到是架构风格和方法,一个谈的是实现工具或组件。1.SOA

一个知名网站的微服务架构最佳实现

译者:蓝梦,十余年研发经验,现就职于某上市互联网公司。作者:小马,Medium 首席架构师。译者有话说,如果你的项目正在从单体升级为微服务而忧心;或者你在实践微服务过程中手忙脚乱,本文都是你不容错过的

微服务架构之「 服务注册 」

微服务架构是一个庞大复杂的工程,为什么说它庞大复杂呢?因为想要做好微服务,就必须先要建设好微服务所需的一系列基础设施和组件。我在前面的文章《架构设计之「微服务入门」》中已经初步介绍过了这些组件,包括:

微服务架构:拆分单体应用的难点

拆分单体应用为服务的难点从表面上看,通过定义与业务能力或子域相对应的服务来创建微服务架构的策略看起来很简单。但是,你可能会遇到几个障碍:网络延迟。同步进程间通信导致可用性降低。 在服务之间维持数据一致

微服务架构的四大金刚利器

Photo@ChristopherCampbell 文 | 孔凡勇概述互联网应用发展到今天,从单体应用架构到SOA以及今天的微服务,随着微服务化的不断升级进化,服务和服务之间的稳定性变得越来越重要,分

金融行业微服务架构解析

转载本文需注明出处:微信公众号EAWorld,违者必究。引言:对于微服务,每个人都有自己的理解,与互联网企业的大量落地相比,微服务在传统金融行业还没有普及,这首先是传统金融行业线上系统需求更新和版本迭

微服务架构的四大杀手锏

Photo@ChristopherCampbell 文 | 孔凡勇概述互联网应用发展到今天,从单体应用架构到SOA以及今天的微服务,随着微服务化的不断升级进化,服务和服务之间的稳定性变得越来越重要,分

微服务?数据库?它们之间到底是啥关系?

过去几年来,“微服务架构”这个术语持续火热,它描述了一种将软件应用程序设计为可独立部署的服务套件的特定方式。尽管这种架构风格没有确切的定义,但围绕业务能力,自动化部署,网点智能以及语言和数据的分散控制

如何构建批流一体数据融合平台的一致性语义保证?

一、批流一体架构 批和流是数据融合的两种应用形态 下图来自Flink官网。传统的数据融合通常基于批模式。在批的模式下,我们会通过一些周期性运行的ETLJOB,将数据从关系型数据库、文件存储向下游的目标

如何构建“小数据”驱动的泛场景智能应用体系?

张真百信银行首席技术架构师&AILab负责人目前负责基于自然语言的动态银行研究与落地,关注AI技术与金融,办公,生活场景的深度融入;开源软件UAVStack创始人,面向智能运维提供解决方案,AIOps

从0到1,马蜂窝大交通团队如何构建高效研发流程体系?

“旅游之前,先上马蜂窝”已经成为许多人习惯性的选择。2019年5月,马蜂窝完成了新一轮融资,金额达2.5亿美元。这也标志着通过集内容、社区、交易为一体的消费决策场景构建,从攻略社区起家的马蜂窝开始迈入

面向DevOps的企业自动化运维体系如何构建?

随着软件交付速度的加快,过去那种研发、测试、部署和运维各自为政的模式,已经无法满足用户需求。越来越多的企业希望通过更高效、更敏捷的方式,快速交付和部署相关应用。所以,DevOps顺势而生!那么,什么是

等保2.0全面实施 新华三支招如何构建新形势下的态势感知

近年来态势感知的热度非常高,不少安全厂商也纷纷推出了态势感知(平台)。在今年五月份,我国正式推出了等保2.0,并已于12月1日正式实施。在等保2.0的安全框架中也明确提出了要具备态势感知的能力,要

如何基于 Kafka 构建一个关系型数据库

在这篇文章里,我将分享如何通过扩展KCache(https://github.com/rayokota/kcache)来实现一个全功能的关系型数据库,我把这个数据库叫作KarelDB(https://

大神讲解微服务治理的技术演进和架构实践

摘要:随着业务的发展,规模扩大,服务越来越多,需要协调线上运行的各个服务,保障服务的SLA;基于服务调用的性能KPI数据进行容量管理,合理分配各服务的资源占用;对故障业务做服务降级、流量控制、流量迁移

清晰架构(Clean Architecture)的Go微服务: 日志管理

良好的日志记录可以提供丰富的日志数据,便于在调试时发现问题,从而大大提高编码效率。记录器提供的自动化信息越多越好,日志信息也需要以简洁的方式呈现,便于找到重要的数据。日志需求: 无需修改业务代码即可切

全球数据泄露报告:内部威胁成数据安全最大风险!

一份最新报告显示,由现任和离职员工引起的内部威胁使公司容易遭受破坏,并使公司数据面临风险。Code42发布的《2019年全球数据泄露报告》还质疑,是否需要资助和部署正确的数据安全解决方案来阻止内部威胁

用 Go 构建一个 SQL 解析器

在本文中,小编将向大家简单介绍如何在Go中构造LL(1)解析器,并应用于解析SQL查询。希望大家能用Go对简单的解析器算法有一个了解和简单应用。摘要本文旨在简单介绍如何在Go中构造LL(1)解析器,在

号称以客户为中心的保险行业如何做到真正的“按需”服务?

随着客户消费模式的改变和对服务要求的不断提高,当前保险行业正经历深刻变化。虽然保险行业已经积累了大量的客户数据,但由于其业务的复杂性及缺少系统的建设,大多数数据都是孤立的。而在数字化浪潮的推进下,许多

5G基站辐射致癌?一个源自19年前的某权威报告引发的谣言

大数据文摘出品编译:邢畅、曹培信在这篇文章的内容正式开始之前,文摘菌先带大家看几张图。你看这根孤独的柱子,其实它是一个通信基站;再看这个平平无奇的路灯,它也是一个通信基站;再来看这颗不悲不喜的树,它依

浪潮商用机器FP5466G2服务器评测报告

海量数据时代,传统的存储架构已经难以满足大规模高并发下系统稳定性,存储设备的弹性扩展和异构存储资源整合等诸多挑战。浪潮商用机器正是针对复杂而多样化的应用需求和大数据、人工智能等新兴应用场景,全新推出企

《Gartner 2019年数据中心网络魔力象限》报告解读

日前,Gartner发布了2019年数据中心网络魔力象限。此次报告从7个维度(产品或服务、总体生存能力、销售执行/定价、市场反应/记录、营销执行、客户体验和操作),来衡量12个入选企业,并基于前瞻性和

持续可用与CAP理论 – 一个数据库系统开发者的观点

本文作者为蚂蚁金服OceanBase研究员日照,发表于2015年。持续可用本文主要针对金融数据库,认为金融数据库的持续可用包含两点:一个是强一致性;另外一个是高可用性。数据库系统必须是强一致性的系统,

5G是一个数据通道,未来最大的产业是人工智能 | 任正非对话卡普兰

大数据文摘出品昨天下午,华为创始人任正非邀请两位人工智能领域的国际顶级专家参与“与任正非咖啡对话”。这已经不是任正非第一次举办这种与行业专家的对话,上一次是在6月17日在与《福布斯》著名撰稿人乔治·吉

万字详解Oracle架构、原理、进程,学会世间再无复杂架构

学习是一个循序渐进的过程,从面到点、从宏观到微观,逐步渗透,各个击破,对于Oracle, 怎么样从宏观上来理解呢?先来看一个图,这个图取自于教材,这个图对于从整体上理解ORACLE 的体系结构组件,非