ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

数据网格与数据虚拟化:从架构原理到工程落地的完整实践

数据网格与数据虚拟化:从架构原理到工程落地的完整实践 这两年聊数据架构十个有八个在提“数据网格(Data Mesh)”可一问怎么落地又都卡住了。另一边“数据虚拟化”也一直不温不火被当成早年间数据联邦的旧概念压箱底。直到我前前后后参与过几套数据中台建设又经历了从集中式平台向分布式数据产品演进的过程才慢慢想明白一件事这两个东西搁在一起互相咬合的效果远比单独讨论要实用得多。数据网格解决的是组织分工和数据所有权的问题数据虚拟化解决的是物理数据不动、逻辑口径统一的问题一个管“谁负责”一个管“怎么取”恰恰能补上彼此的短板。这篇文章我打算把我在实际项目里摸索出来的结合思路、实施路径和踩坑记录整理出来重点讲清楚为什么数据网格不能只停留在PPT上的四个原则以及虚拟化层在其中到底扮演什么角色。内容偏工程实践适合那些正在做数据平台转型、被数据重复建设和口径冲突折磨得够呛的团队参考。1. 先撕开一个口子中心化数据平台的真实瓶颈在哪里好多团队一开始听到“数据网格”四个字本能反应是这不就是把数据平台拆散吗听起来像开倒车。我一开始也这么觉得直到我把过去几年的数据中台建设经历捋了一遍才发现问题不在平台本身而在平台和业务之间的协作方式。1.1 管道膨胀、重复建设与“数据贴皮”早期做数据仓库、数据中台大家普遍会定一套标准流程业务系统的数据先同步到贴源层然后清洗加工成汇聚层、主题层最后做成指标层给报表用。这套流程听上去没毛病实际跑起来却会走到一个很尴尬的状态——业务A要一个订单指标业务B也要一个订单指标最后都来找中台团队排期而中台团队又离业务足够远光对齐口径就要开好几轮会。等到数据真正交到业务手里他们的第一反应往往是这数据我可不敢信。于是业务C自己拉了一份订单表按自己的逻辑加工最后全公司出现了三个版本的“成交额”。这种情况不是工具不行也不是数据工程师不努力而是集中式数据平台的权责模式到了天花板。一个中心团队负责所有数据的接入、加工、建模注定没有办法对每一块业务数据深入理解。数据被抽成了一张张物理表可表的业务含义、口径来源、质量责任全都淹没在处理链路里了。说白了平台把数据从业务手里拿走了却没能还回同等程度的信任。1.2 “所有权下沉”才是数据网格的真正起点数据网格的提出者在谈架构之前先谈的是一个组织问题数据的责任应该回到最了解它的领域团队那里去。领域团队自己定义指标、自己维护数据模型、自己发布数据产品。平台团队从“包工头”变成“物业公司”提供跑水电气的基础设施但每家住户怎么装修住户自己说了算。但这里有个很现实的门槛领域团队数据能力参差不齐让他们像专业数据团队一样去建设一套“数据产品”既不现实也没必要。这时候就需要一个技术层来把门槛砍掉一半以上——让领域团队只需要在本域数据库里定义好模型、注册好接口剩下的事情比如跨域访问、统一鉴权、口径映射、查询加速交给一个公共的逻辑层去处理。这个逻辑层的核心形态就是数据虚拟化。所以我的判断是数据网格真正从PPT走向落地缺的从来不是理念而是一个能把“分散的数据产品”再织回一张网的技术纽带。数据虚拟化恰好是这个纽带最有性价比的实现方式。2. 数据网格和数据虚拟化各自的解题思路是什么要理解两者为什么能结合得先把各自的边界说清楚。数据网格不是技术架构它更接近一种运作模式数据虚拟化则恰恰相反它是纯粹的技术落地手段。两者一个偏软一个偏硬结合点就是想清楚“谁在什么位置上做什么事”。2.1 数据网格的四个原则本质是一套责权分配方案数据网格框架里著名的四项原则——领域所有权、数据即产品、自助式数据基础设施、联邦式计算治理——经常被拿来当口号念。我拆成大白话转述一下领域所有权数据不归平台中心团队所有归产生并理解它的业务领域所有。比如支付域的数据归支付团队负责库存域的数据归库存团队负责。数据即产品每个领域需要把数据当作对外输出的产品来运营有明确的所有者、使用说明、版本、质量指标而不是把“一张宽表扔出去”就算完事。自助式数据基础设施平台团队要提供一套让领域团队能自助接入、发布、监控数据的环境而不是所有操作都要提工单等排期。联邦式计算治理治理规则由全局标准和领域自治共同组成。全局只定底线比如安全分级、敏感数据规则领域再定自己的具体产品策略。这四条原则单独看每一条都不算颠覆但它们放在一起等于把数据平台的权力结构从“中心集权”改成了“联邦自治”。难点正在于联邦制需要一套共用的基础设施和标准协议否则每个领域自说自话数据网立刻变成数据孤岛。2.2 数据虚拟化的本质逻辑集中、物理分散数据虚拟化的思路更纯粹不复制数据而是在现有数据源之上建立一层逻辑数据访问层。应用或者数据产品在访问数据时不需要关心数据到底存了在MySQL、Oracle、Hadoop还是某个SaaS接口里统一通过虚拟化层去查。这一层会上翻出统一的数据模型、字段口径、访问接口下探则把查询拆解、下推到各数据源引擎去执行。我用一个生活化的类比来解释过去每个系统之间要对接数据等于每个房间各自拉电线谁和谁对不上还要自己接个转接头。数据虚拟化是在整栋楼里装了一个标准的插座面板和布线系统各个房间的电器只需要按统一规格插进去就能通电至于背后的电是从哪个电厂来的、走了哪条线路用电器的人不用管。从技术特征上看数据虚拟化的核心优势在于几件事实时性高因为没有ETL复制产生的延迟数据不搬家规避了数据拷贝带来的合规和一致性问题统一语义层可以把散落在不同系统中的同名不同义字段在逻辑层完成对齐查询下推能力强能利用原有引擎的性能而不是把所有数据重新拉到一个大池子里算。2.3 两套思路放在一起互补点在哪数据网格最大的落地阻力是需要每个领域团队都有能力去开发和维护“数据产品”。可现实里大部分业务团队既没有专职数据工程师也没有精力去理解复杂的技术栈。数据虚拟化在这里扮演的角色相当于给每个领域团队发了一套“傻瓜式产品发布工具”底层数据不用搬本地模型定义好后注册到虚拟化层再配置好口径、权限和接口描述一个数据产品就上线了。平台团队维护虚拟化层和底层基础设施领域团队维护自己的逻辑模型与数据质量权责边界一下就清晰了。反过来数据虚拟化过去被人诟病最多的问题是“管不住元数据”即逻辑层可以帮你查但没人对数据质量和口径负最终责任。引入数据网格的领域归属机制后每个虚拟逻辑模型背后都有一个明确的owner和SLO虚拟化层从“数据联邦工具”升级成“数据产品运营平台”。两者合在一起才真正补全了技术上和组织上的双重闭环。3. 两者结合的总体架构与设计思路接下来聊我实际在项目里用的设计方式。这个方案不是从零发明的东西而是一套把数据网格的分工思想落到数据虚拟化平台上的具体做法。整体布局大体可以分成四层存储层、虚拟化层、数据产品层、消费层。3.1 存储层数据可以留在原处不必统一搬家存储层就是企业里现有的各种数据源包括业务库、数仓、数据湖、NoSQL、消息队列甚至外部接口。这一层的重点原则是不强制做物理归集。以往建设数据中台一上来先要求“数据先入湖”导致同步链路又多又长成本高不说数据延迟和一致性也跟着出问题。在结合方案里存储层保持相对稳定该在MySQL里的业务库继续留在MySQL该在数仓里的历史数据继续留在数仓。当然这不等于完全反对物理汇聚。对于需要跑复杂大规模离线分析的场景该入湖的还是要入湖。只是思路变了先看能不能逻辑访问再决定要不要物理搬运。数据虚拟化层的存在让这个“先逻辑后物理”的判断变成了可能而不至于一到跨域查询就直接拉数据。3.2 虚拟化层跨源查询、语义建模、统一接口虚拟化层是整个架构的中间枢纽同时承担三个职责。第一是连接适配把各类数据源接入虚拟化平台做好方言转换和查询下推优化。第二是语义建模在虚拟化层之上定义逻辑实体、指标口径、维度关系构建一套企业级的统一语义层。第三是接口服务对外提供标准化的查询接口通常支持SQL、REST API或者直接兼容JDBC/ODBC协议让数据消费者像访问普通数据库一样使用虚拟化层。这个层实际做的工作量超过一半在语义建模上。技术平台怎么搭只要选型定了相对好办但“订单金额到底含不含税”“用户活跃怎么定义”这类口径问题才是真正烧脑的部分。好在这里有数据网格帮忙口径问题被拆回到各领域团队去定义虚拟化层只负责把这些定义注册成可复用的逻辑模型。全局团队审核的只是模型之间有没有冲突不用亲自去抠每个指标的业务细节。3.3 数据产品层按领域发布可观测、可订阅的数据资产在虚拟化层之上数据模型会被进一步封装成“数据产品”。一个数据产品在结构上基本包括四项内容逻辑模型集合即虚拟化层里定义好的实体和指标、接口规格提供哪些查询能力、参数怎么传、服务等级协议SLO比如可用性99.9%、最大查询延迟多少秒、质量与血缘信息谁生产的、多少时间更新一次、数据质量评分是多少。数据产品的发布流程也要尽量轻。领域团队负责人在虚拟化平台里勾选模型、补充描述、设置权限提交审核后即可发布。一旦发布所有数据消费者都可以在数据目录中检索、申请权限、查看样例并接入。整个过程不需要数据团队介入做副本地清洗加工也不会有“这个接口只有某某同事知道”的暗知识问题。3.4 消费层报表、应用和临时取数各取所需消费层是使用数据的业务方包括BI报表、数据应用、算法管道还有临时取数分析的数据分析师。这一层通过统一入口访问数据产品不需要直连底层数据库也不需要了解底表存储的位置。权限和用量审计也都收口到虚拟化层谁访问了什么数据产品、查了什么内容、返回了多少行全部有记录。在这个架构下消费侧的体验和传统“数仓表”模式差别不大甚至更简单因为不需要单独申请一堆表权限。但对平台侧来说工作模式的差别是巨大的——数据需求的交付从“排期开发”变成了“注册发布”原来以月为单位的取数需求现在可能一天就能完成接入。4. 落地实操我们在项目里是怎么一步步推的架构说完讲讲执行。任何概念架构落地的过程都是从一个具体项目慢慢长出来的。我们当时挑了一个业务相对独立、数据口径争吵最厉害的部门试点整个推进过程大致可以拆成六个阶段每个阶段都有值得注意的细节。4.1 第一步盘点数据资产梳理领域边界在动任何技术方案之前先做资产盘点。这一步的关键不是画出一张大全景的架构图而是要回答三个问题公司内部有哪些数据域每个域目前的物理数据分布在哪里域和域之间主要有哪些数据依赖关系我们当时的做法是这样的拉上各业务线的技术负责人用两天时间过了一遍各自的库表清单和核心数据流把它们按业务域归类并标出跨域的数据关系。这一步产出的不只是一份表格更重要的是它逼着团队把“数据该归谁负责”这个问题摆上了台面。注意这个环节一定会吵起来尤其是同一个客户信息分别存在订单系统、CRM、客服系统等不同位置时归属界定会非常纠结。我的建议是第一版边界划分先不追求最优按“数据产生在哪谁最理解业务含义”来定之后再迭代修正。4.2 第二步选一个高频需求做首支数据产品数据网格化改造范围很大不能贪多求快。我们的做法是选了一个跨域高频的指标场景来做第一个数据产品比如“全渠道销售订单实时汇总”。这个场景牵涉订单系统、支付系统、履约系统三个域的数据而且是周报月报里天天被盯的指标痛点足够明显让参与的团队有明确动力。确定场景后各域团队在虚拟化平台里接入自己域的数据源建立各自的逻辑模型并为共享指标在虚拟化层制定统一口径。整个过程中数据虚拟化展现出第一波优势因为不需要把三个系统的数据物理抽到一个地方所以从调研到联调完成只花了一周半速度远超传统ETL开发的排期。4.3 第三步搭建自助式虚拟化平台并制定最小规范这一步是平台侧的重点。我们提前部署了一套数据虚拟化平台做完了基础数据源连接和权限集成。但真正花时间的是定义“最小但够用”的规范包括数据产品命名的统一格式比如{领域}.{产品名}.{版本}逻辑模型里字段的备注要求哪些字段必须带业务定义数据产品发布时必须填写的元信息责任人、更新频率、质量等级权限申请和审批的默认流程谁拥有数据谁就有审批权。规范的度要把握好。太粗后面维护会乱太细领域团队会觉得麻烦不愿配合。我们的思路是先定住最底线的规则其余细节允许各域自己定义把更多自治空间留给领域团队。4.4 第四步制定SLO并对数据产品做质量评估数据产品发布前需要和领域团队约定SLO。SLO不是只写“我们要保证数据准确”而是要落到可测量的数字上比如“每日更新延迟不超过30分钟”“可用性不低于99.5%”“关键字段非空率不低于99%”。虚拟化平台负责周期性检测这些指标并生成数据产品健康度评分。质量评估上线后最有意思的变化是过去数据出问题业务方到处找人是常态现在每个数据产品页面上直接挂着责任人、健康分和最近更新状态谁的问题一目了然。这种透明感带来的改进比任何考核机制都管用。4.5 第五步推广消费入口替换原有报表取数链路产品发布后最怕没人用。我们做的事情很朴素把原来挂在业务群里的十几张临时报表和数据需求统一迁移到虚拟化平台的统一入口上来。BI工具直接对接虚拟化层业务分析师要临时取数也直接在这里写SQL。这个迁移过程会遇到一个阻碍一些人习惯了直接连原来的库表和手工Excel加工对新增的虚拟化层心存疑虑。解决方式也不复杂——挑两个典型报表改出效果让他们直观看到“以前等半天才能刷出的数现在秒出”以及“口径不再三天两头变”用事实打动比解释架构有效得多。4.6 第六步沉淀联邦治理机制定期审查和迭代试点运行一段时间后就该搭治理机制了。我们当时建了一个“数据产品治理小组”由平台团队、各领域数据负责人和数据架构师组成每两周开一次会重点审查三类问题是否有重复指标定义、是否有数据产品长期低使用率、是否有新的跨域依赖没有被记录清楚。治理小组不开“追责会”只解决边界和冲突问题。这种氛围很重要如果变成了谁的数据产品出了错就点名批评那以后大家都不愿意发布新数据了。治理的目标是让数据资产持续运转而不是制造紧张感。5. 工具选型与性能优化数据虚拟化平台的选型思路方案设计好了落到工具层面时选择空间其实比想象中要小。市面上的数据虚拟化产品整体分成商业版和开源版两大阵营。商业产品功能全、性能优化好、企业支持到位开源方案更具灵活性适合愿意投入研发精力的团队。5.1 主流产品的核心差异对比对比维度商业数据虚拟化产品开源数据虚拟化方案典型代表Denodo、Informatica等Dremio、Apache Calcite、Teiid等数据源适配连接器丰富且维护及时依赖社区长尾源可能要自研查询优化内置大量优化器规则性能成熟需要自己调优能力参差不齐安全与权限企业级安全策略集成好一般支持标准权限深度集成需开发运维成本相对低支持服务体系完善较高需要团队自行掌控许可证成本高低如果你问我怎么选我的建议是先看团队的“平台研发容忍度”。如果团队有多少余力愿意去维护一个开源虚拟化层比如改进连接器、调优查询计划那开源方案的综合成本会低很多。如果团队主要做业务方向希望快速上线、出问题有人支持那商业产品大概率更值。但无论选哪个前期的POC概念验证都省不得一定要用自己最复杂的真实查询场景做一轮压测。5.2 选型前一定要跑通的6个POC场景选型不能用Demo糊弄自己POC务必覆盖我下面总结的六类场景否则很容易掉进“演示都很快真实业务全卡死”的坑多源表Join的查询延迟特别是跨异构系统的关联查询这是虚拟化层最容易翻车的地方百万级到千万级基础表的明细查询响应时间查询并发能力和资源隔离情况多个部门同时访问会不会互相拖垮权限和元数据同步的集成便利度能否自动抓取源端元数据并和公司SSO打通对复杂SQL方言的兼容程度业务方现有的SQL能不能直接跑还是需要大量改写运维可观测性比如慢查询日志、查询血缘、执行计划可视化是否够用。我在实际验证中遇到过最典型的情况是某一个产品在演示环境跑什么都快但一旦接入生产环境因为生产库的数据分布和索引结构跟测试环境不太一样查询下推策略立刻失效响应时间从毫秒级掉到分钟级。所以POC务必用生产数据的脱敏副本务必模拟真实的并发和查询特征。5.3 性能调优的几个方向性经验虚拟化层性能调优和传统数据库调优有相通之处但更依赖“下推”。很多新手拿到虚拟化层后习惯性地把所有查询都拉到虚拟化层再运算这种思路几乎必然性能翻车。正确的姿势是尽量把过滤、聚合、投影这类操作下推到源库执行。比如你查“昨天各渠道订单量”就让虚拟化层把WHERE create_time 昨天和GROUP BY channel这类计算推到数仓或业务库里先算完虚拟化层只做结果的再汇总。另一个经验是善用物化缓存。不是所有查询都能下推比如跨三个异构数据源的深层次关联查询即便下推了一部分仍可能需要虚拟化层做中间计算。对这种高频且计算开销较大的查询把结果集按一定策略物化成缓存可以显著提升体验。物化缓存要设计好失效策略和更新频率核心指标数据建议用事件驱动或定时刷新不可无限堆。6. 常见问题与排查技巧实录这个章节我随手记几条我们在项目中真实撞过的问题和排查经验内容可能不系统但都非常具体。6.1 查询慢得离谱问题在统计信息陈旧有一次上线后业务反馈某张虚拟表的查询从几秒退化到几分钟。排查链路很长最后定位在虚拟化层的优化器决策上。它默认选择了直接拉取源库全量数据再做本地Join而不是把Join下推到源库。原因不是优化器太笨而是它掌握的统计信息太旧误判了源表的数据量级。解决方法是定期刷新虚拟化层对源表的统计信息并对关键源表开启统计信息收集。另外可以通过查询计划分析工具看看执行计划到底把哪些算子下推了、哪些没有。这类问题在虚拟化平台运维中非常高频建议从一开始就建立统计信息和执行计划监控。6.2 权限链路太长导致数据产品变成了“僵尸资产”数据产品发布很顺利但如果没人申请权限那也没有意义。我们遇到过某个产品上线两个月访问量为零的情况。排查后发现问题出在权限申请链路申请者要先在数据目录里找到产品然后填写申请表单再等对应领域负责人审批而领域负责人有两个根本没看审批消息。整个流程设计出来是防御性的但结果是使用率被压塌了。后来把审批触发改为即时消息通知并对超过三个工作日未处理的申请自动向上级升级。同时把申请流程从“填写长表单”简化成“点选权限级别勾选同意条款”权限开通时间从两天缩短到十几分钟。数据产品的使用率一下子就有了起色。6.3 跨域口径“看似统一实现打架”这是数据网格落地最典型的坑。比如全局定义“有效订单”时各域在虚拟化层里的实现逻辑却各自不同订单域按“支付成功”过滤履约域按“发货成功”过滤结果同一个指标在不同数据产品里数值对不上。问题根源是全局和领域之间的标准没有真正被校验。我们的应对方式是增加一个“指标定义校验”环节在每个数据产品发布前治理小组把指标定义文档和虚拟层模型实现拉通检查一次重点看过滤条件、时间维度和维度取值是否一致。发布后每隔一段时间再抽样核对。这个动作不能省也不能全自动化——机器能检查规则是否一致但“业务口径是否合理”仍需人来判断。6.4 虚拟化层成了新的单点风险数据虚拟化平台本身是整个架构的核心入口如果它挂了基于它发布的所有数据产品都会不可用。这个风险在方案设计中容易被低估。我们后来做了两件事一是对核心虚拟化组件做高可用部署包括多活节点和自动故障切换二是设计降级策略把最核心的少数几个数据产品配置了直接连源库的逃生通道仅供紧急情况使用。7. 这条路还值得走多远数据网格和数据虚拟化的结合应用说到底是一个务实的选择数据网格提供组织演进的路线图数据虚拟化提供技术落地的手脚。没有虚拟化层的支撑数据网格很容易停留在理想化的分工模型里没有数据网格的治理思路虚拟化平台也容易退化成一张权限更复杂的“联邦查询外壳”。我在实际项目里还有一点体会这类架构转型最难的从来不是技术而是改变团队对“数据责任”的潜意识。很多数据团队习惯了什么都管把数据握在自己手里才有安全感很多业务团队则习惯了一有问题就找数据团队自己从不关心数据长什么样。数据网格和虚拟化结合的方案实际上是强迫两边都往前走一步业务团队得学会定义和运营自己的数据产品数据团队得学会构建基础设施和制定规则而不是替所有业务写SQL。如果你所在的团队也正在被重复取数、口径扯皮、数据链路冗长这些问题困扰不妨先找一个小场景配一套轻量的数据虚拟化环境用一两周时间做出第一个由虚拟化层支撑的数据产品。先跑通再谈规模。等你真把第一个产品发布出去并且看到业务方开始直接订阅、直接使用、直接反馈问题的时候你会意识到这条路虽然过程不太轻松但确实值得继续走下去。
返回列表