微服务架构 (五): 获取微服务数据, 生成报表

2016.8.17, 深圳, Ken Fang

架构师在设计从多个微服务取数据, 而生成报表的架构设计方案时, 往往面临著需在边界上下文 (Bounded Context), 数据的时效性, 性能, 可靠性与开发的复杂度间作取舍。

从多个微服务取数据, 而生成报表的设计方案, 主要是参考: Enterprise Integration Patterns; Hohpe and Woolf。

A.      Database Pull Model (Shared DataIntegration Style): 直接至各微服务所拥有的数据库中获取数据, 并写至负责生成报表的服务所拥有的数据库或数据仓储中。此设计方案主要的问题是: 破坏了原微服务的边界上下文 (Bounded Context), 使得原微服务无法独立自主的修改自身所拥有的数据表结构; 原微服务若有任何数据表结构上的修改, 将会影响到生成报表的服务所拥有的数据库或数据仓储。

B.      Http Pull Model (RPC IntegrationStyle): 负责生成报表的服务, 经由各微服务所提供的 REST API, 取得所需的数据, 并写至自身所拥有的数据库或数据仓储。此设计方案, 藉由 REST API, 维持了各微服务的边界上下文 (Bounded Context), 但, 却存在著其他的问题:

         1.    性能上的问题: 当负责生成报表的服务需同时向许多个 (上百个) 微服务获取数据时, 则就表示将会有上百个远程调用会发生。所以, 有可能负责生成报表的服务的某一个数据请求, 已经达到了 Time Out, 但有的微服务所提供的数据, 还尚未送至负责生成报表的服务。

         2.    数据量的问题: 当负责生成报表的服务向微服务获取大量的数据时; 例如: 整个月的股票买卖。则大量的数据将造成大量流量, 所以, 也有可能对负责生成报表的服务的某一个数据请求, 造成 Time Out。

C.      Batch Pull Upload (Shared DataIntegration Style): 在夜间执行批处理至各微服务所拥有的数据库中获取数据, 并写至负责生成报表的服务所拥有的数据库或数据仓储中。

此设计方案因为同样是属于 Shared Data IntegrationStyle, 所以, 也存在著破坏了原微服务的边界上下文 (Bounded Context) 的问题; 使得原微服务无法独立自主的修改自身所拥有的数据表结构。原微服务若有任何数据表结构上的修改, 将会影响到生成报表的服务所拥有的数据库或数据仓储。

当然, 此设计方案的另一个问题便是: 数据的时效性; 生成报表的服务所拥有的数据库或数据仓储, 将无法获得实时的各微服务所拥有的数据库中的数据。

D.      Event-Based Push Model (MessageBased Integration Style): 当各微服务所拥有的数据库发生变更时, 便会产生一个事件。此事件便会使得生成报表的服务去处理此事件; 至发生数据库变更的微服务获取所变更的数据, 并写入其所拥有的数据库或数据仓储中。

此设计方案不仅维持了各微服务的边界上下文 (Bounded Context), 更使得生成报表的服务所拥有的数据库或数据仓储, 获得实时的各微服务所拥有的数据库中的数据; 拥有数据的时效性。

比较这四种设计方案在边界上下文 (Bounded Context) 、数据的时效性上的优、劣:

边界上下文

数据的时效性

Database Pull Model

Http Pull Model

Batch Pull Upload

Event-Based Push Model

当然, 天下没有白吃的午餐; Event-Based Push Model 虽然维持了边界上下文 (Bounded Context) 并提供了数据的时效性。但, 却增加了产品架构的复杂度。使得微服务与生成报表的服务间产生某种程度上的耦合。也就是说, 生成报表的服务必需知道: 针对每一个微服务所拥有的数据库发生变更时所产生的事件,要如何做出相对应的动作, 以维护其所拥有的数据库或数据仓储中的数据的时效性; 这确实不是件容易的事。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏大数据和云计算技术

并行数据库技术分析与展望

本文以我个人的理解简单分析下并行数据库的技术要点以及对未来并行数据库的发展做下展望,理解有偏差的地方,欢迎各位指正。 并行数据库的定义 在维基百...

3757
来自专栏IT大咖说

阿里巴巴:金融级别大数据平台的多租户隔离实践

内容来源:https://yq.aliyun.com/articles/466662

1040
来自专栏杨建荣的学习笔记

MySQL数据清理的需求分析和改进

昨天帮一个朋友看了MySQL数据清理的问题,感觉比较有意思,具体的实施这位朋友还在做,已经差不多了,我就发出来大家一起参考借鉴下。 为了保证信息的敏感,里面的...

2955
来自专栏斑斓

选择缓解风险的技术

三. 选择缓解风险的技术 一旦识别出迁移过程中可能存在的风险,我们就可以有的放矢地选择相关技术,制订降低风险的解决方案。 寻找丢失的知识 只有体验过去,才能谋...

3439
来自专栏python开发教学

Oracle与Sql server的区别 一直搞不明白Oracle数据库和sql server的区别,今天我特意查资料把他们的区别整理出来

Oracle数据库:Oracle Database,又名Oracle RDBMS,或简称Oracle。是甲骨文公司的一款关系数据库管理系统。

673
来自专栏云加头条

姚俊军:如何设计数据迁移方案

好的迁移方案设计不仅能够节省迁移成本,还能帮助用户拥有更加完备的异地部署和灾备能力。腾讯云技术专家姚俊军在现场讲解了如何设计数据迁移方案,还和大家分享了两个数据...

7969
来自专栏互扯程序

IaaS,PaaS和SaaS,QPS,RT和TPS,PV,UV和IP到底是什么意思?

今天我们来讲讲什么是云服务,云计算的三种服务模式有哪三种,我们经常评估服务的性能指标都有哪些,分别是什么意思,平时“那些人”说的QPS是什么,TP是什么,日活又...

633
来自专栏腾讯大讲堂的专栏

【大系统小做】——实战篇

昨天我们分享了【海量服务之道】中【大系统小做】的基本理论,今天我们将结合QQ相册系统设计实战,让大家由浅入深的感受这一理论如何指导互联网后台系统的建设。 QQ相...

23110
来自专栏方俊贤的专栏

微服务架构 : 获取微服务数据, 生成报表 (五)

针对每一个微服务所拥有的数据库发生变更时所产生的事件,要如何做出相对应的动作, 以维护其所拥有的数据库或数据仓储中的数据的时效性; 这确实不是件容易的事, 本文...

5230
来自专栏Python中文社区

五个亲测可用的Python论坛类网站开源框架

1、LBForum LBForum是用django开发的论坛系统,LBForum主要注重部署的方便性和易用性,功能方面目前还比较简单。 LBForum的开发尽量...

6989

扫码关注云+社区