001 概念篇
一、什么是数据虚拟化呢?数据虚拟化是一种逻辑数据层,用于集成孤立存在于不同系统中的所有企业数据,管理统一后的数据以实现集中化安全和治理,并将这些数据实时交付给业务用户。
国际数据管理协会(DAMA)数据管理知识体系(DMBOK)对数据虚拟化的定义如下:“数据虚拟化使分布式数据库以及多个异构数据存储可以作为单个数据库进行访问和查看。数据虚拟化服务器不是使用转换引擎对数据执行物理 ETL(数据仓库技术),而是虚拟地执行数据提取、转换和集成。”
二、打个比方,你借助微信视频通话和朋友聊天时,朋友的眼睛,眉毛,嘴,身边的影像都能在你自己手机屏幕上看到,好像就在你面前一样,而实际上你两可能物理距离相距十万八千里。这个场景就是朋友及他/她身边的事物都以图片的方式虚拟到了你的面前。你们不需要乘坐飞机高铁就能低成本实现面对面交流。
再譬如共享单车,你只需要一个手机 App,就能在路边快速的拥有一辆自行车,就好像这辆自行车就是你自己的一样,你不需要花费 1000 块而是只需要花费几块钱,就能临时拥有一辆自行车,带你到目的地。
数据虚拟化也是一样,你不需要把数据从它原来的地方搬到你的数据库或者数据仓库,完全物理上拥有它,就能低成本的使用它。
三、日常生活中,还有哪些类似数据虚拟化这样的场景呢?
(1)计算虚拟化。计算虚拟化根据操作系统所组成的设备类型包含 GPU 虚拟化、CPU 虚拟化、内存虚拟化和 IO 虚拟化。
1.GPU 虚拟化。GPU 虚拟化可以让一块 NVIDIA A100 显卡同时供多个算法工程师使用,就像每个算法工程师都有一块 GPU 卡一样。GPU 虚拟化可以在多层实现。如用户层:API 拦截和 API forwarding;内核层:GPU 驱动拦截;内核层:GPU 驱动半虚拟化:Para Virtualization;硬件层:硬件虚拟化:Virtualization;硬件层:SRIOV:Single Root I/O Virtualization;硬件层:Nvidia MIG:Multi-Instance GPU。
2.CPU 虚拟化。CPU 虚拟化可以让多个应用程序共用一块 CPU ,譬如 10 个应用程序每个分到 0.1 个 CPU ,典型的虚拟化场景如 K8S,可以极大提升资源利用效率。相关的技术包括Intel Virtualization Technology(Intel VT)虚拟化技术和 AMD Virtualization Technology(AMD VT) 虚拟化技术。
3.内存虚拟化。就是把物理机的真实物理内存统一管理,包装成多份虚拟的内存给若干虚拟机使用。内存虚拟化技术的核心在于引入一层新的地址空间——客户机物理地址空间,客户机(Guest)以为自己运行在真实的物理地址空间中,实际上它是通过 VMM 访问真实的物理地址的,在 VMM 中保存客户机地址空间和物理机地址空间之间的映射表,如下图所示。
内存虚拟化的内存地址转换涉及到三种内存地址,即虚拟机内存地址(Virtual Memory Address,即 VA)、物理内存地址(Physical Memory Address,即 PA)和机器内存地址(Machine Memory Address,即 MA)。为了在物理主机上能够运行多个虚拟机,需要实现 VA(虚拟内存)→PA(物理内存)→MA(机器内存)直接的地址转换。虚拟机 Guest OS 控制虚拟地址到客户内存物理地址的映射 (VA→PA),但是虚拟机 Guest OS 不能直接访问实际机器内存,因此 Hypervisor 需要负责映射客户物理内存到实际机器内存(PA→MA)。
4.IO 虚拟化。I/O 外设只有一套,需要被多个 guest VMs 共享。VMM/hypervisor 提供了两种机制来实现对 I/O 设备的访问,一种是透传(passthrough),一种是模拟(emulation)。
(1)操作系统虚拟化。只要一台电脑,电脑上安装 VMware,基于 VMware 就可以安装多台操作系统,就好像你自己买了很多台电脑一样。典型技术如虚拟机和 Docker 容器化。
(2)网络虚拟化。你本来没有出国,通过网络虚拟化,可以表现得你拥有了国外网络的 IP 地址,出国了一样。将物理网络虚拟出多个相互隔离的虚拟网络,从而使得不同用户之间使用独立的网络资源,从而提高网络资源利用率,实现弹性的网络 VLAN 就是一种网络虚拟化,在原有网络基础上通过 VLAN Tag 划分出多个广播域。网络虚拟化保障我们创建出来的虚拟机可以正常通信,访问网络。
(3)存储虚拟化。存储设备的能力、接口协议等差异性很大,存储虚拟化技术可以将不同存储设备进行格式化,将各种存储资源转化为统一管理的数据存储资源,可以用来存储虚拟机磁盘、虚拟机配置信息、快照等信息。用户对存储的管理更加同质化。
虚拟机磁盘、快照等内存均以文件的形式存放在数据存储上,所有业务操作均可以转化成对文件的操作,操作更加直观、便捷。
存储虚拟化可以解决传统 DAS、NAS 存储架构中单点故障的问题,可以保证存储的可用性和连续性。实现存储虚拟化,最核心问题就是如何实现从逻辑地址到物理地址的转换。
四、数据虚拟化 VS 数据联邦
(1)数据虚拟化是一组广泛的功能,包括数据联邦。因此,所有联邦化的数据也是虚拟化的数据。但由于数据虚拟化包括数据联邦以外的功能,因此并非所有虚拟化数据都是联邦的。
(2)数据联邦意味着多个数据存储;数据虚拟化没有。
(3)联邦数据始终是虚拟化的;虚拟化数据并不总是联邦的。
(4)数据联邦是数据虚拟化的一个子集;数据虚拟化的特性包括联邦。
(5)数据虚拟化包括抽象特定数据源的特性;数据联邦正在将自治数据存储虚拟化为一个大型数据存储。
(6)数据联邦工具通常仅限于集成关系数据存储。数据虚拟化可以在任何风格的 RDBMS、数据设备、NoSQL、Web 服务、SaaS 和企业应用程序之间连接数据。
002 原理篇
五、下面,我们进一步分析数据虚拟化实现的原理。
第一步:导入原始表
源表导入的过程,意味着数据虚拟化识别的过程。在导入的过程中,一部分元数据会被提取并存储在数据虚拟化服务器自己的字典中。其结果会生成一个名为封装表的对象。对于封装表来说,可以被查询,并且如果底层数据库服务器允许的话,可以对数据进行插入、更新和删除。封装表与源表是多对一的关系。对于一个源表可以定义一个或多个封装表,一个封装表至多可隶属于一个源表。
第二步:映射虚拟表
封装表与源表具有相同的结构。如果用户需要看到部分列、汇聚后的结果或关联结果集,就需要在封装表上定义虚拟表。所谓映射的过程,就是定义了一个虚拟表的结构以及如何将一个源表(或一组源表)中的数据转换为虚拟表的内容。该映射成为虚拟表的定义。映射通常由一些操作组成,如行选择、列选择、列连接和转换、列名和表名变动、分组等。对于虚拟表来说,其是基于封装表或其他虚拟表定义的,虚拟表需要封装表;而封装表是基于源表定义的,它不需要虚拟表。
第三步:发布虚拟表
发布定义好的虚拟表,这意味着虚拟表可通过一个或多个语言和编程接口成为可用的数据使用者。常见的 SQL 就是一种访问接口。
六、数据虚拟化相关模型
(1)关系模型。关系模型中,每个实例中只存储一次。其目的是避免存储重复的数据使得被存储的数据变得不一致。因为关系模型的表格不包含重复的数据,它们与数据插入、更新和删除的事务高度适应。
(2)星形模型。在星形模式中,表分为维度表和事实表。其名称的由来是因为其构图特征,事实表在中间,维度表像射线那样从中间发射出来,共同构成星形的图案。其中每一个维度表都有一个主键和一系列特征属性来描述这个维度。事实表则是星形模式的中心表,每个事实表都有一个主键包含着它引用的所有维度表中的主键。事实表中的一行往往代表一个业务事件。以星形模式安排表的主要目标是限制做连接查询的时候必须参与的表的数目。经常提及的改善查询性能方式是避免表之间的连接查询。另一个优点是书写查询和为最终用户提供一套能从工具中生产查询的选型变得更容易。
(3)雪花模型。雪花模式中的事实表只和维度表有关,这一点和星形模式一样。而另一方面,维度表可以和其他的表存在一对多的关系。其优点在于,与等价的星形模式相比减少冗余数据存储。除此之外,雪花模式还支持维度表中更低级别的查询。
003 应用篇
七、对于数据虚拟化,有几个方面的错误观念。
(1)过多地进行虚拟化。数据虚拟化与存储、服务器和应用程序虚拟化类似,提供了极好的利润收益。例如,一家能源公司使用数据虚拟化把实时的油田数据与每天晚上的综合仓储信息结合起来把每天的原油产量提高了数千桶。一家金融公司把新的应用的开发时间减少了 50%。同时,另一家金融服务公司每年节省了 200 万美元的商务智能和报告成本。
然而,数据虚拟化不是每一个数据整合问题的解决方案。例如,当消费应用程序需要从多个角度进行分析的时候,或者当数据在消费之前需要进行重大转变的时候,物理的数据整合是更好的方法。
为了避免对任何具体开发项目过多地进行虚拟化,首先要更好地理解这个业务、数据资源和数据消费者的特点。
(2)虚拟化不够。第一个错误的反面是虚拟化不够。按常规办事,而不是寻求最佳的方法,是每一个人都做的事情。在 90 年代,物理数据整合的发展出现了单独的、整合的存储和特殊的 ETL(提取、转换和装载)中间件软件。到 2000 年之后,ETL 成为了默认的数据整合范例。
虚拟化不足会增加大量的成本,因为物理的数据整合需要时间更长的解决方案、更昂贵的开发和操作成本和更低的业务和 IT 灵活性(由于包含额外的开销)。幸运的是,避免这个错误的做法是在数据整合决策过程中认真分析和定义要求,以保证最佳的解决方案满足这些要求,而不是让传统的做法推动这个决策。
什么才是正确的数据虚拟化方案呢?正确的使用数据虚拟化的方法应该是根据业务场景进行分析。
八、数据虚拟化有什么特点呢?
采用数据虚拟化架构,能实现敏捷设计和开发,确保查询能高性能的运行,提供易于查找的数据目录。
九、接下来我们一起看看使用数据虚拟化的优劣势。
数据虚拟化的优点:
(1)加速业务价值:分析应用程序可以更快地应用,并且随着变化的发生,可以更快地获得更大的价值。
(2)改进业务洞悉:更完整、最新、易于存取和理解数据,所需的工作量比 ETL 更少。
(3)降低开发成本:可重复使用的数据服务以及交互式开发和验证可提高质量并避免重做新项目。
(4)降低数据管理基础架构成本:降低基础架构成本,减少购买和折旧软件许可证,从而降低了支持和维护成本。
(5)与源数据相比,虚拟克隆使用更少的存储空间。
(6)快照源数据是一个非常快速的过程,可以在几秒钟内完成。
(7)数据虚拟化可以连接各种类型的数据源。数据虚拟化可用于关系数据库管理系统等结构化数据源、Web 服务等半结构化数据源以及文件文档等非结构化数据源。
(8)通过创建虚拟克隆简化数据管理并减少系统工作量。
(9)通常只需要单次通过数据清理操作。还可以使用 API 支持集成外部数据清理和数据质量解决方案。
(10)数据虚拟化非常擅长读取和转换非结构化或半结构化数据。
(11)根据数据的来源和类型,数据虚拟化解决方案具有用于访问数据的内置机制。这为从这些数据源生成分析或报告的用户提供了透明度。
(12)由于用户只能访问虚拟克隆,因此源数据是安全的,不会对其进行无意的更改。
(13)数据虚拟化允许用户访问近乎实时的数据,这意味着对数据进行的任何下游分析都能够在生成时准确地说明信息。
缺点:查询的执行过程中会对数据源系统有侵入,需要和源系统改动联动,并且响应的延迟高,无法对查询响应实现延迟承诺。
十、数据虚拟化的使用案例
(1)逻辑数据仓库
(2)虚拟运营数据存储(ODS)
(3)注册表风格的主数据管理
(4)旧系统的迁移
(5)物联网集成的边缘数据存取,数据和内容的集成
(6)移动数据的监管和限制。
(7)实时分析和报告
(8)项目的虚拟副本
(9)识别业务或生产问题
(10)掩盖数据源中的波动性
(11)使用数据虚拟化进行测试数据管理
004 理论研究篇
十一、跟数据虚拟化相关研究还有哪些呢?
(1)数据中心。
(2)大数据与虚拟化超融合。
(3)流数据虚拟化。
(4)虚拟化数据科学模型输出。
(5)数据即服务。
(6)虚拟化元数据收集。
(7)将数据虚拟化作为一项团队运动。
(8)综合数据质量。
(9)虚拟空间数据库。
十二、再看看数据虚拟化相关的论文。
(1)1974 年,Gerald J. Popek(杰拉尔德·J·波佩克)和 Robert P. Goldberg(罗伯特·P·戈德堡)在合作论文《可虚拟第三代架构的规范化条件》(“Formal Requirements for Virtualizable Third Generation Architectures”)中提出了一组称为虚拟化准则的充分条件,又称波佩克与戈德堡虚拟化需求(Popek and Goldberg virtualization requirements),即:虚拟化系统结构的三个基本条件。满足这些条件的控制程序才可以被称为虚拟机监控器(Virtual Machine Monitor,简称 VMM)。
(2)空间数据虚拟化的实现技术研究。
(3)基于群晖 NAS 的虚拟化技术及应用分析。
(4)实验室桌面云平台虚拟化技术研究
(5)基于数据虚拟化的司法数据交换共享技术研究与实现
十三、数据虚拟化的相关书籍。
(1)《数据虚拟化(商务智能系统的数据架构与管理)》
(2)《数据虚拟化:多源异构数据集成之道》
(3)《系统虚拟化》
(4)《处理器虚拟化技术》
(5)《数据虚拟化:超越传统数据集成,实现业务灵活性》
(6)《Data Virtualization: Going Beyond Traditional Data Integration to Achieve Business Agility》
(7)《Data Virtualization for Business Intelligence Systems: Revolutionizing Data Integration for Data Warehouses (Morgan Kaufmann Series on Business Intelligence)1st Edition
》
(8)《Data Integration Blueprint and Modeling: Techniques for a Scalable and Sustainable Architecture
》
(9)《大型高速计算机中的时间共享》
十四、数据虚拟化相关文章
005 过去与未来
十五、下面我们再看看数据虚拟化这个概念的起源和发展历程。
数据虚拟化一词最早出现于埃里克·布劳顿(Eric Broughton)在 2005 年发表的论文中。数据虚拟化的历史与数据处理技术密切相关。在数据处理技术的历史中,前后经历了三个主要的发展阶段:1.0 阶段,即“计算机时代”,业务发展逐渐形成大量需求各异的数据处理场景,出现了基于不同组织形式的多种“数据库”技术;2.0 阶段,即“网络时代”,数据体量及复杂度呈现爆发式增长,传统的数据库技术捉襟见肘,随之发展了数据库集群等大规模分布式处理技术,同时针对不同类型的业务需求,出现了更多专项高效的数据处理技术,如 MPP、Hadoop、数据湖等;在当下的 3.0 阶段,即“数据时代”,随着业务数据体系的极度膨胀,数据变得越来越复杂(多源、异构、跨域),每个应用有效使用所有数据变得越来越困难。如何能够高效可靠地处理多环节、多体系间高动态、强关联海量数据,形成有效的技术解决方案,已成为企业成功转型的关键。
1959 年 6 月 15 日,牛津大学的计算机教授,克里斯托弗·斯特雷奇(Christopher Strachey)在国际信息处理大会(International Conference on Information Processing)上发表了一篇名为《大型高速计算机中的时间共享》(“Time sharing in large fast computers”)的学术报告,他在文中首次提出了 “虚拟化” 的基本概念,还论述了什么是虚拟化技术。这篇文章被认为是最早的虚拟化技术论述,从此拉开了虚拟化发展的帷幕。
十六、核心数据虚拟化企业。
从企业来看,全球范围内,数据虚拟化解决方案核心厂商主要包括 Denodo、CData、SAP、Informatica 和 VMware 等。
十七、数据虚拟化发展趋势。
(1)数据编织。
(2)数据运营。
(3)虚拟数据中心。
以上,我们系统性的学习了数据虚拟化,了解了如何让数据不动,价值动的方法。
(1)虚拟化的发展:纵观虚拟化技术的发展历史,可以看到它始终如一的目标就是实现对 IT 资源的充分利用。
(2)虚拟化与云计算:虚拟化是 IT 资源的抽象,云计算则是基于虚拟化实现的更上层的对企业业务能力的抽象。
(3)云计算与开源:开源是引诱开发者的苹果,而开发者则是企业的核心资产。云的世界,得开发者,得天下。
(4)数据虚拟化与数据联邦:数据联邦是数据虚拟化的特殊情况,数据虚拟化是数据联邦的一般化。
如何构建您的组织的数据堆栈呢?使用数据平台?数据仓库?数据湖?湖仓?数据网格?数据联邦?数据虚拟化?在 Denodo 的报告中,数据虚拟化可带来 408% 的投资回报率。具体使用哪种数据栈,还是需要具体问题具体分析。