华泰证券:敏捷开发中数据快速恢复方案及实现
在敏捷开发过程中,代码管理、测试用例执行、版本发布等都基本实现自动化并趋于成熟,而对于测试数据的使用,存在数据难以复用、准备数据成本高等问题,导致数据恢复周期长,已经影响了测试效率,业内尚未有较好的解决方案。本文介绍的方案属于业内首创的技术应用,可快速恢复数据供开发测试使用,灵活管理并使用任意版本的数据;同时,通过重构封装REST API,让开发人员在无需了解底层技术原理的前提下,与CI/CD方便的集成。
随着公司业务的快速发展以及敏捷开发的推行,应用版本迭代速度明显加快,开发测试使用不同版本数据进行测试的频率也越来越高。在敏捷开发中,代码管理、测试用例执行、版本发布等都基本实现自动化并趋于成熟。但是根据测试人员反映,在使用多个数据版本进行测试过程中,存在数据难以复用、准备数据成本高等问题,导致测试效率大大降低,亟需一个数据快速恢复方案。
2019年,我们引入了具备CDM(数据副本管理)技术特性的产品用于解决公司超大数据库备份恢复难的问题,但是在实践的过程中我们发现,该技术特性还可应用于更广泛的场景。因此,我们基于所采购的产品进行了二次开发,创新性地解决了敏捷开发场景中数据的快速恢复问题。
本方案基于CDM技术,Gartner给出的定义是:它从生产环境通过快照技术获取有应用一致性保证的数据,在非生产存储上生成“黄金副本”;其数据格式是原始的磁盘格式,可再虚拟化成多个副本直接挂载给服务器使用。
CDM是一种节约存储资源,有效管理数据生命周期的方法,包括消除不必要的重复生产数据。传统备份软件和企业应用程序独立运行,经常会创建多个相同数据的副本。然而,相同数据的冗余副本不但浪费存储空间,还降低网络性能,使数据访问或恢复关键数据任务更加困难。CDM软件可以通过减少使用数据虚拟化的完整副本的数量来帮助消除这些问题。
随着大数据时代的到来,企业之间的竞争愈发激烈,如何充分挖掘海量数据蕴含的有效信息,提高数据使用价值,已成为提升企业核心竞争力的关键。而企业的生产数据已不仅仅用于业务生产,很多测试开发环境也需要使用生产数据支持,因此CDM产品在这种背景下诞生了。
CDM软件产品可以快速给数据打快照,每一次快照就是一个数据版本;可以利用虚拟卷技术快速挂载指定快照到目标机器给开发测试使用,无需进行数据拷贝分发,大大节约数据恢复所需要的时间,有助于提升开发测试的效率。CDM软件产品支持给快照打标签和设置自动过期时间,所有快照数据都集中存储在CDM存储节点,而不是分散在测试环境各个角落,可以大大提升测试数据的管理水平。
1)生产环境到测试环境的数据流转。拷贝生产数据到研发、测试环境中用于开发或测试,实现数据即时复用。
2)超大数据库备。采用“初始全量+永久增量”的备份方式,大大缩短超大数据库备份时间窗口。
在使用中我们发现,CDM产品的“快照+虚拟化”功能具备快速恢复数据副本的能力。因此,针对公司敏捷开发中数据使用存在的问题,结合CDM的技术优势,我们自研了数据快速恢复系统,将其用于CI/CD中数据的快速恢复场景。实现了以下成果:
1)通过图形化页面可实现数据版本一键备份、一键恢复使用,并自动启停数据库以及展示多个版本数据之间的拓扑关系等。
2)重构封装REST API,将复杂的业务逻辑和数据库管理操作封装为6个极其简单友好的接口:登录、打快照、挂载快照、卸载快照、删除快照、查看快照版本。开发人员无需了解底层技术原理,仅需简单的调用,即可在CI/CD中实现数据的快速备份与恢复,大大降低了使用门槛。
系统页面分为三部分:主机信息、快照信息、任务信息,具体效果见图1。
主机信息模块列出用户可以操作的主机,主要包含主机IP、主机名、当前挂载的快照、快照操作(查看拓扑/挂载/打快照/卸载)等。快照信息模块列出所有生成的快照,主要包括快照名、快照类型、标签、挂载点、应用类型、快照大小、挂载主机、一致性时间、过期时间、状态、操作(删除)等。
任务信息模块列出用户执行过的所有任务,主要包括任务名、任务类型、主机、应用名、镜像名、开始时间、结束时间、进度、状态等。
快照拓扑结构图展示主机生成的所有快照以及快照之间的关系。用户可以通过该结构图清晰的发现各个快照状态及父子关系。
如图2所示,第一列为主机名,第二列为该主机的持久快照(已备份的数据版本),第三列为临时快照(其父快照可通过连线确认)。
可视化页面在一定程度上提高了用户操作的便捷性,但始终需要人工干预,无法将其集成进CI/CD中。
以测试为例,假如执行完某个测试用例后需要备份当前数据或者更换数据版本重新测,如果可以通过自动调用接口实现,无需人工干预, 测试效率则会大大提升。因此,本方案还提供了十分简单的Rest API供开发测试人员调用。
下面列出五个主要的API供参考,可以看出接口的参数信息非常简单,用户在不需要了解CDM技术原理的前提下,也能够快速使用。
1)打快照接口
2)卸载接口
3)挂载接口
4)检出快照接口
5)删除快照接口
数据快速恢复方案总结为三个核心功能:打快照、挂载快照、卸载快照。下面具体介绍三个功能具体实现细节供大家参考。
该功能用于备份当前数据,供数据版本回退。为了确保数据一致性,打快照前会自动停止正在运行的数据库,打快照成功之后会自动启动数据库。其简要流程如下:
2)挂载快照
该功能用于挂载任意版本数据至任意主机。数据挂载成功后,会自动拉起数据库。其简要流程如下:
3)卸载快照
该功能用于卸载主机当前挂载的数据。数据卸载前,会自动识别当前主机挂载的数据快照,并停止数据库。其简要流程如下:
解决了测试过程中数据难以复用问题。如果把生产导出的数据作为基础数据,那么在经历若干次测试后,将无法还原到基础数据状态。使用本系统后,后续更改不会影响基础数据,可随时回退到任意历史数据版本,间接节省了再次从生产环境导出数据的时间。
解决了测试开发过程中,不同项目多分支并行开发测试时,带来的库结构不一致和数据冲突问题。使用本系统后,可以将同一份数据挂载为多份供不同项目分支使用,相互隔离。
结合具体使用方式,本文列举两个典型应用场景供大家参考(不限于以下场景)。
如图6所示,假设在4月份的一个迭代中,数据累计发生了5次变更,其中涉及两次大的数据版本变更。若12日对3.0版本数据测试结束之后,临时新增一个需求,该需求使用到了1日的测试数据版本。
在以往的开发测试中,除非在每次变更数据前都进行了备份,否则很难将数据回退到1日的版本,即使数据有备份,也需要花费大量时间对数据导入导出,而且每次备份基本都是全量备份,间接造成了存储资源的浪费。
而使用本文的数据快速恢复方案,仅需一键卸载当前3.0数据版本,然后挂载1.0数据版本即可满足新增的测试需求。待新的测试需求结束后,可以恢复为3.0数据版本,继续支撑原计划的测试。
如图7所示,假设在8日,测试人员临时接到通知需要对6日的数据进行不同场景的测试,并且测试结束后对数据进行还原,继续用于10日的测试。在以往的开发中需手动备份还原数据。而使用本文方案,可将2.0版本数据同时挂载到多个服务器并行测试,结束后即可删除版本2.1/2.2,不影响版本2.0。
本文基于CDM技术,实现了敏捷开发中数据的快速恢复,大大提高了敏捷开发效率,在业内属于首创的技术应用。本方案解决了测试过程中数据难以复用问题;解决了测试开发过程中,不同项目多分支并行开发测试时,带来的库结构不一致和数据冲突问题。通过对本方案的阐述,希望为敏捷开发中存在同样问题的数据快速恢复场景提供有价值的参考。
(来自:上交所技术服务)
标签: