`

微服务开发中的数据构架设计

 
阅读更多

前言

微服务是当前非常流行的技术框架,通过服务的小型化、原子化以及分布式架构的弹性伸缩和高可用性,可以实现业务之间的松耦合、业务的灵活调整组合以及系统的高可用性。为业务创新和业务持续提供了一个良好的基础平台。本文分享在这种技术架构下的数据架构的设计思想以及设计要点,本文包括下面若干内容。

  • 微服务技术框架中的多层数据架构设计
  • 数据架构设计中的要点
  • 要点1:数据易用性
  • 要点2:主、副数据及数据解耦
  • 要点3:分库分表
  • 要点4:多源数据适配
  • 要点5:多源数据缓存
  • 要点6:数据集市

为了容易理解,本文用一个简化的销售模型来阐述,如下图。图1显示了客户、卖家、商品、定价、订单的关系(这里省略支付、物流等其他元素)。

enter image description here

图1 销售模型

在这个销售模型中,卖家提供商品、制定价格,客户选择产品购买、形成销售订单。根据微服务的理念设计,可以划分为客户服务、卖家服务、商品服务、定价服务、订单服务,以及公共服务(比如认证、权限、通知等),如图2所示。

enter image description here

图2 微服务功能

微服务架构中的多层数据架构设计

分布式架构一般把系统分为 Saas(Software-as-a-Service)、Paas(Platform-as-a-Service)、Iaas(Infrastructure as a Service )三层。其中 Saas 层负责对外部提供业务服务,Paas 层提供基础应用平台,Iaas 层提供基础设施。微服务垂直嵌入这三层服务之中,相互独立。因此数据架构设计时需要考虑三层服务对数据的关注点,又要考虑微服务的独立性。

数据架构的分层设计

图三 分布式·微服务构架图3 微服务技术框架

如图3所示,Iaas 层提供程序运行的物理基础环境(这边涉及很多硬件·网络内容,在本文中省略)。Pass 层细分为三层,基础服务层,主要负责数据存储处理;事务框架层,主要负责微服务的注册·调度管理、分布式事务处理;应用服务层、主要实现各个微服务的 API,供其它微服务直接调用以及 Saas 层的服务调用。Saas 服务就是公开对外提供的业务服务。

数据架构自下向上相应的分为 Raw Data 层、Logic Data(inner)层和 Logic Data(outer)层(Iaas 中主要以基础硬件环境为主,在本文中省略)。Raw Data 层是基于数据库、文件或者其他形式数据内容。Logic Data(inner)层是微服务 API 使用的逻辑数据,比如客户数据、订单数据等等。Logic Data(outer)层是对外服务提供数据,比如客户订单数据。因此,我们的数据架构的分层结果如图4所示。

enter image description here

图4 数据分层架构

除此之外,很多情报会以画面或报表的形式展现出来。因此在 Logic Data(outer) 之上,可以构建 Information Block(常用的信息块)、通过 View type(显示模式)的设定后,最终 View 展现出来。

如图4所示,越靠近对外服务层,客户对设计者的影响度越大,越需要从使用性、易用性、适用性等考虑。反之,越远离对外服务层,设计上更关心数据的存储。

数据三层架构的好处是实现数据从系统实现到业务实现的逐层过渡,实现业务数据和系统数据间的松耦合。同时实现业务的灵活扩展和系统的灵活扩展。

数据架构设计中的要点

上面讲述了数据架构的分层设计,下面讲述数据架构设计中的要点。

要点1:数据易用性

数据无论用什么方式实现,其最终目的都是为业务(或者是客户)使用的。因此,在对外提供服务的时候,数据的易用性非常关键。

enter image description here

图5 数据易用性

如图5所示,客户信息在 Logic Data(inner) 层中为了数据的柔软性和非冗余,把人员信息拆成若干子表来存储。比如,人员地址表可以无限多的存储客户地址信息。这样的好处在于每次人员地址更新时,不用直接更新人员地址,而是生成一个新的地址数据,原有的地址信息作为历史数据得到保存,易于数据快速恢复和历史信息追踪。但在 Logic Data(outer)层提供外部数据的时候,首先考虑的是一次性能提供足够用的信息(毕竟查询的操作大大高于修改的操作),减少业务场景中不需要的信息。比如对一般客户只提供三个常用地址的时候,数据设计中地址1、地址2和地址3放在一张表中。

要点2:主、副数据及数据解耦

每个微服务 API 的数据完全独立是不太现实的,比如订单中需要有商品、客户(包括收货者)、卖家以及价格等数据。如果这些数据都在订单服务 API 中管理,那么客户情报的变更、价格调整等信息都要同步给订单 API 中数据,数据的耦合度就会变得非常高。在数据设计的时候,需要考虑降低数据间的相互依赖性。因此,首先需要确定每个微服务 API 的主数据和副数据。主数据指微服务 API 的核心数据,这种数据的增删改主要集中在某个微服务 API 中,比如订单服务 API 中的订单数据。副数据指参照或者映射其他微服务 API 的数据,比如订单服务 API 中的商品数据、价格数据等。其次,为了降低数据之间的耦合度,用数据关联表来表征数据间的关系。如果想去掉数据间的关联关系,直接去掉关联表即可,对数据本身的没有任何影响。具体如图6所示。

enter image description here

图6 主、副数据及数据解耦

要点3:分库分表

随着业务数据量不断增加,单一数据库或单一数据表中会积累大量的数据,比如订单数据,随着时间推移和客户数量的增加,产生的订单数据也会越来越多。当数据累积到一定程度后,数据操作的性能会大幅下降,也就是我们常说的数据库“带不动了”。所以,在数据架构设计阶段就应该考虑数据的分库分表。

如图7所示,分库,即我们把订单数据分为当前数据应用库、历史数据库、历史归档数据库。当前数据应用库用来支持新订单的生成以及执行中订单的增删改查。历史数据库(这里举例分为最近3个月和最近1年)当客户想看过往订单的时候才使用。历史归档数据(按年间归档)原则上不直接对客户公开,用于备查、统计分析。对于当前数据应用库,可以继续再分库,按客户号范围来分库。这样每个数据库的大小都能得到有效控制。分表,即把一条信息分别存储在两张或多张表中。比如把订单信息按基本信息和详细信息分表,就可以适用于订单的基本信息查询和订单详细信息查询。总之,分库分表的核心就是控制单一数据库的负荷(数据量和数据信息量),通过多表多库来应对业务数据量的增长。

enter image description here图7 分表分库

要点4:多源数据适配

传统的关系型数据库之外,有多种多样的数据源,比如图像、声音、视频等多媒体数据文件或数据流,CSV、TXT、Doc、Excle、PDF、XML 等各种异构数。这些数据都需要做相应的处理,转换成可管理的数据信息。因此在数据架构设计的时候,需要给不同性质的数据源配置相对应的读写适配器,同时也需要有统一调度的地方,如图8所示。

enter image description here

图8 多源数据适配

要点5:多源数据缓存

数据处理的性能除了处理逻辑的复杂度以外,还有很大一部分是目标数据的操作时长(含对硬件磁盘设备的读写以及网络的传输)。网络速度特别是光纤的使用后已经大幅度提高,但机器磁盘的读写效率并没有显著提高,因此减少磁盘读写是提高效率的一个重要途径。数据缓存就是把常用的数据(不会经常更改的数据)、最近使用数据放到内存中。这样就可以大幅降低系统对硬件磁盘设备的操作开销,提高整个数据系统的性能,如图9所示。

enter image description here

图9 数据缓存

要点6:数据集市

数据集市是一个很大的话题。当现有的数据不能简单地通过几个表数据关联以及简单加工后就可以供业务使用的时候,就需要考虑构建数据集市。数据集市以数据运用的观点来分析加工数据,通过多源数据的导入、清洗、加工、视图做成等一系列的数据操作后,为业务提供可用的、稳定的数据源。例如,对销售分析中、什么样的客户喜欢什么样的商品、价格对销售金额的影响、销售金额跟地区日期的关联关系等多维度分析,就要用数据集市的概念,如图10所示。

enter image description here

图10 数据集市

数据承载着信息,好的数据架构设计会使业务系统变得更加流畅、更加容易理解和维护。本文只是总结一些在实际工程中的体会,供大家分享。如果有不足之处、也请大家补充、赐教。

 

原文地址: http://gitbook.cn/books/5a812745e2f8ea02e77412a4/index.html

分享到:
评论

相关推荐

    系统构架设计应考虑的因素

    4. **非功能性需求**:列出系统的性能、安全、可靠性等非功能需求,并解释如何在构架中实现。 5. **扩展性与演化策略**:说明系统如何适应未来的扩展和变更,可能包括微服务、插件化等设计。 6. **决策记录**:...

    大数据处理平台构架设计说明书.docx

    大数据处理平台构架设计说明书旨在详细阐述如何构建一个高效、可扩展的大数据处理系统,以及与其配套的可视化平台。这份文档的目的是为项目团队、开发人员、管理者提供清晰的设计指南,确保系统的功能、性能和稳定性...

    构架设计 高端实现 系列

    在IT行业中,构架设计是软件开发过程中的关键环节,它涉及到系统整体的组织结构、模块划分、组件间的关系以及通信机制。"构架设计 高端实现 系列"着重探讨了如何进行高效且可扩展的软件架构设计,旨在帮助开发者提升...

    系统构架设计师教程

    《系统构架设计师教程》是一本深度探讨系统架构设计的...通过学习《系统构架设计师教程》,读者可以掌握系统架构设计的核心理念和实践方法,提升自己在软件开发领域的专业素养,为构建高质量的大型系统奠定坚实基础。

    跟我学J2EE系统构架和设计模式-层架构及MVC架构模式的应用实例.docx

    例如,在一个在线购物网站的开发中,可以将商品信息、订单信息等业务数据处理逻辑放在Model层;将展示商品列表、订单详情等界面显示逻辑放在View层;将处理用户请求、调用模型逻辑、选择视图显示结果等逻辑放在...

    构架之美 软件设计之美

    《构架之美:软件设计之美》是一本深入探讨软件架构艺术的书籍,它强调了架构在软件开发中的核心地位和动态性。在这个信息化时代,软件架构不再仅仅被视为一种技术成果,而是演变成一个持续演进的过程,是软件开发...

    软件架构设计师考试大纲_软件架构设计师_

    在准备这个考试的过程中,考生需要深入学习并熟悉软件架构设计的基本原理,以及在实际项目中的应用。 一、软件架构概述 软件架构是软件开发过程中的核心部分,它定义了系统的组织结构和组件,以及这些组件之间的...

    构架模式PPT

    5. 系统构架中的关键元素:如数据管理、服务发现、容错机制、监控和日志等,以及如何合理设计这些元素以构建稳定可靠的系统。 通过这份PPT的学习,开发者不仅可以提升自身的架构设计能力,还能学会如何在实际项目中...

    Software Architecture in Practice,2nd Edition--软件构架实践(第2版)

    《软件构架实践》第二版是信息技术领域内一本极具价值的著作,主要关注软件开发中的架构设计和实践。这本书深入探讨了如何在实际项目中构建高效、可维护和可扩展的软件系统。作为一本英文原版的CHM电子书,它提供了...

    多源空间数据综合管理平台总体设计20130329

    ### 多源空间数据综合管理平台总体设计20130329 #### 1. 引言 ##### 1.1 编写目的 本文档旨在详细阐述多源空间数据综合管理平台的设计理念、架构特点以及核心功能模块。通过对平台的整体规划和技术细节的深入解析...

    系统构架师 电子书1

    系统构架中不可或缺的一部分是技术选型。书里可能会分析各种编程语言、数据库系统、中间件、框架等的选择依据,以及它们如何影响整体架构。例如,微服务架构可能会推荐使用轻量级通信协议如RESTful API,而分布式...

    企业级构架

    安全是企业级构架中的重要组成部分。包括用户认证、授权、加密、防止SQL注入和XSS攻击等,这些都需要精心设计和实施。同时,架构要考虑灾难恢复和高可用性,例如采用负载均衡、冗余备份和故障切换机制。 此外,企业...

    精通.NET核心技术 原理与构架

    总之,《精通.NET核心技术:原理与构架》这本书将引导读者深入了解.NET平台的各个方面,包括核心语言C#、运行时环境、Web开发框架、数据访问以及软件设计和架构原则,帮助开发者成为.NET领域的专家。通过深入学习,...

    大数据平台项目业务蓝图

    在这个项目中,可能重点讨论了如何设计一个支持大数据处理的分布式架构,以及如何通过微服务实现系统的模块化和解耦。 5. **方案设计**:方案设计通常包括需求分析、技术选型、系统架构、实施步骤等内容。"大数据...

    dw2.0下一代数据仓库的架构.rar

    10. **敏捷开发与部署**:采用微服务架构和DevOps实践,DW2.0可以更快地迭代和发布新的功能,以适应快速变化的业务需求。 总的来说,DW2.0不仅仅是数据仓库的技术升级,更是对企业数据分析能力和决策效率的一次飞跃...

    腾讯智能制造云平台-概要设计文档v1.01

    系统设计还涉及安全性、性能优化、异常处理等多个方面,以确保平台在复杂工业环境中的稳定运行。例如,采用HTTPS加密通信,防止数据泄露;通过负载均衡技术保证服务可用性;并使用缓存策略减少不必要的服务器请求,...

    影院售票管理系统,三层构架实现

    【标题】:“影院售票管理系统,三层构架实现”这一项目是针对电影院售票场景设计的一款管理软件,采用经典的三层架构模式进行开发。三层架构是一种将应用软件分为表现层(UI)、业务逻辑层(BLL)和数据访问层(DAL...

    铁路信息系统构架.zip

    《铁路信息系统构架》是一份深入探讨铁路信息系统建设与设计的综合资料,主要涵盖了软件系统、架构设计以及建模技术等多个关键领域。这份资源由学习《铁路信息系统构建》课程的作者整理而成,作为复习和深化理解的...

Global site tag (gtag.js) - Google Analytics