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

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

架构师在设计从多个微服务取数据, 而生成报表的架构设计方案时, 往往面临著需在边界上下文 (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) 并提供了数据的时效性。但, 却增加了产品架构的复杂度。使得微服务与生成报表的服务间产生某种程度上的耦合。也就是说, 生成报表的服务必需知道:针对每一个微服务所拥有的数据库发生变更时所产生的事件,要如何做出相对应的动作, 以维护其所拥有的数据库或数据仓储中的数据的时效性; 这确实不是件容易的事。


本文作者:

方俊贤 (Ken Fang), 曾任职于 IJI, Rational, Telelogic, Borland◦ 有将近二十年在半导体, 电信产业与军事研究单位, 从事软件工程与精益敏捷开发相关咨询服务的经验。 主要专长是精益敏捷开发, 有价值的产品需求挖掘, 使用者行为场景分析, 动态注入框架设计, ROA, 既有软件架构优化, 探索式测试, 敏捷测试与持续集成。


本文转载自 方俊贤_Ken 的 CSDN 博客

原文链接:http://blog.csdn.net/featuresoft/article/details/52226297

目录
相关文章
|
7月前
|
存储 BI Shell
Doris基础-架构、数据模型、数据划分
Apache Doris 是一款高性能、实时分析型数据库,基于MPP架构,支持高并发查询与复杂分析。其前身是百度的Palo项目,现为Apache顶级项目。Doris适用于报表分析、数据仓库构建、日志检索等场景,具备存算一体与存算分离两种架构,灵活适应不同业务需求。它提供主键、明细和聚合三种数据模型,便于高效处理更新、存储与统计汇总操作,广泛应用于大数据分析领域。
752 2
|
4月前
|
Cloud Native Serverless API
微服务架构实战指南:从单体应用到云原生的蜕变之路
🌟蒋星熠Jaxonic,代码为舟的星际旅人。深耕微服务架构,擅以DDD拆分服务、构建高可用通信与治理体系。分享从单体到云原生的实战经验,探索技术演进的无限可能。
微服务架构实战指南:从单体应用到云原生的蜕变之路
|
6月前
|
数据采集 缓存 前端开发
如何开发门店业绩上报管理系统中的商品数据板块?(附架构图+流程图+代码参考)
本文深入讲解门店业绩上报系统中商品数据板块的设计与实现,涵盖商品类别、信息、档案等内容,详细阐述技术架构、业务流程、数据库设计及开发技巧,并提供完整代码示例,助力企业构建稳定、可扩展的商品数据系统。
|
5月前
|
数据采集 机器学习/深度学习 搜索推荐
MIT新论文:数据即上限,扩散模型的关键能力来自图像统计规律,而非复杂架构
MIT与丰田研究院研究发现,扩散模型的“局部性”并非源于网络架构的精巧设计,而是自然图像统计规律的产物。通过线性模型仅学习像素相关性,即可复现U-Net般的局部敏感模式,揭示数据本身蕴含生成“魔法”。
252 3
MIT新论文:数据即上限,扩散模型的关键能力来自图像统计规律,而非复杂架构
|
5月前
|
JSON 供应链 监控
1688商品详情API技术深度解析:从接口架构到数据融合实战
1688商品详情API(item_get接口)可通过商品ID获取标题、价格、库存、SKU等核心数据,适用于价格监控、供应链管理等场景。支持JSON格式返回,需企业认证。Python示例展示如何调用接口获取商品信息。
|
6月前
|
数据采集 监控 数据可视化
数据量暴涨时,抓取架构该如何应对?——豆瓣电影案例调研
本案例讲述了在豆瓣电影数据采集过程中,面对数据量激增和限制机制带来的挑战,如何通过引入爬虫代理、分布式架构与异步IO等技术手段,实现采集系统的优化与扩展,最终支撑起百万级请求的稳定抓取。
373 0
数据量暴涨时,抓取架构该如何应对?——豆瓣电影案例调研
|
6月前
|
SQL 数据采集 数据处理
终于有人把数据架构讲清楚了!
本文深入浅出地解析了数据架构的核心逻辑,涵盖其定义、作用、设计方法及常见误区,助力读者构建贴合业务的数据架构。
|
7月前
|
数据采集 存储 分布式计算
一文读懂数据中台架构,高效构建企业数据价值
在数字化时代,企业面临数据分散、难以统一管理的问题。数据中台架构通过整合、清洗和管理数据,打破信息孤岛,提升决策效率。本文详解其核心组成、搭建步骤及常见挑战,助力企业高效用数。
2247 24
|
6月前
|
缓存 前端开发 BI
如何开发门店业绩上报管理系统中的门店数据板块?(附架构图+流程图+代码参考)
门店业绩上报管理是将门店营业、动销、人效等数据按标准化流程上报至企业中台或BI系统,用于考核、分析和决策。其核心在于构建“数据底座”,涵盖门店信息管理、数据采集、校验、汇总与对接。实现时需解决数据脏、上报慢、分析无据等问题。本文详解了实现路径,包括系统架构、数据模型、业务流程、开发要点、三大代码块(数据库、后端、前端)及FAQ,助你构建高效门店数据管理体系。
|
7月前
|
缓存 Cloud Native Java
Java 面试微服务架构与云原生技术实操内容及核心考点梳理 Java 面试
本内容涵盖Java面试核心技术实操,包括微服务架构(Spring Cloud Alibaba)、响应式编程(WebFlux)、容器化(Docker+K8s)、函数式编程、多级缓存、分库分表、链路追踪(Skywalking)等大厂高频考点,助你系统提升面试能力。
600 0