数据分层(应用分层)技术简介
近几年虚拟化市场实现了非常大的发展,桌面虚拟化在企业中应用越来越广泛,其拥有的如下优点得到大量企业的青睐:
- 数据安全不落地。在虚拟化环境下面数据保存在中心服务器上面,只要保障中心服务器的安全,那么就能保障数据的绝对安全。
- 高扩展性。与普通的硬件PC相比,桌面虚拟化具有高扩展性,可以随时将虚拟化资源归还给虚拟化主机以及分配给其他虚拟化主机使用。
- 容易部署。桌面虚拟化一般可以通过模板话部署,将应用(数据)一键部署到新的虚拟机上。
- 统一化资产管理。资产管理一直是企业管理的难点,市面上有许多公司的管理软件都包括了资产管理这一环;在桌面虚拟化下面,资产管理得到了很好的解决。
通常情况下的虚拟化架构如下:
在上述架构中,我们可以安装层级来划分:
- 硬件层:主要是我们的实体硬件,包括内存,CPU,存储。
- 主机层:主要是我们的Host主机操作系统,一般来说以Linux居多。
- 客户机层:主要是我们的虚拟机操作系统,在这一层上面实现我们的具体应用(办公,开发,娱乐等)。
那么能否对客户机(Guest)这一层继续进行细化分层呢?例如我们实现:
- 我们将个人数据存放在一个单独层级。
- 无论我们使用虚拟机的还原系统,还是登录一台全新的虚拟机,我们将数据层进行合并,让我们个人数据和应用不会丢失。
本文来介绍一种在虚拟机中数据分层的技术,下面我们详细看一下其技术原理和实现。
1. 简介
数据分层是针对虚拟机来说的,以Windows系统为例,从下到上,我们可以将其分为三层:
- 系统OS层,该层表示Windows系统镜像安装的原始OS层,代表这一个可正常运行的OS。
- 应用层,该层表示各种应用程序组成的层,例如Chrome浏览器,微信,QQ等各种应用程序。
- 数据层,该层表示应用程序运行时候生成的各种文件数据,例如浏览器的记录,收藏夹;QQ微信的聊天数据。
其示意图大致如下:
一般来说,每个层都是一个独立的磁盘,将每个磁盘通过分层技术合并成一个整体可以正常使用运行的磁盘,如下:
对于各层来说,一般有如下特征:
- 操作系统层,只有一个数据磁盘表示该层,表示运行的系统。
- 应用程序层,该层是一个集合层,多个应用程序层元素组成该层,表示通常情况下我们需要的应用程序。
- 个人数据层,该层可以由一个或者多个磁盘组成,不过大部分情况下,我们只需要一个磁盘层即可。
对于上面这种情况,在实际的使用场景下可以进一步简化,将操作系统层和引用程序层合并成一个层,大致如下:
对于通常场景,我们可以将操作系统层和应用程序层合并成一个层到操作系统层;也就是说,我们在安装操作系统的时候,就将我们需要的应用软件安装好;后面使用过程中我们只需要弹性使用个人数据层即可。
我们的数据分层主要是针对这种简化的分层,对于应用分层可以参考我们的文章Windows内核沙盒原理详解。
对于数据分层我们的应用有:
- 还原系统下面,我们可以将自己程序的各种数据存放到自己的磁盘(或者云盘上面),这样我们虚拟主机是还原系统,但是数据是个人的数据,可以达到虚拟机重复利用的目的;例如我们10台主机可以分时间段给100个人(甚至更多人)使用,只要拥有个人数据磁盘就行。
- 数据上云,比如我们可以将个人数据层同步到自己的云盘;无论我们使用哪个电脑(虚拟机或者物理主机),可以将数据层进行合并,使得每台电脑使用的数据完全一致。
针对数据分层,我们主要的技术在于分层数据的合并,对于这个合并,有两个点:
- 注册表数据的合并。
- 文件数据的合并。
2. 注册表数据分层
注册表数据的分层需要对注册表的各种查询进行HOOK,然后将数据查询进行合并,将数据写入进行分发;注册表的HOOK技术有两种:
- 基于用户层API HOOK技术。
- 基于内核回调函数的HOOK技术。
这里我们使用内核回调函数的实现方式,使用CmRegisterCallbackEx
来注册注册表的各种回调函数:
NTSTAT