可扩展模型索引 Towards Scalable Model Indexing1
1. 介绍
在今天这开节奏的竞争性的世界中,软件工程师们每天都在不断地创建更大更复杂的分布式系统,并且往往是会很快地市场化。这就引入了一个需求,即对正在不断研发的原型系统进行快速迭代。因此,这就需要更加高效的工具和技术来系统地开发、测试和部署这样的系统。为了实现这个目标,模型驱动工程(Model-Driven Engineering,MDE)将模型(models)视为首要的研究对象,它通过自动化或半自动化的执行关注度更高的步骤的或者易出错的步骤,来提高工程代码的开发效率。
1.1. 模型驱动工程(Model-Driven Engineering)概述
模型驱动工程(MED)通过使用模型(models)实现了软件系统快速的创建与管理,其中,这些模型被用来生成更低级必要的人工组件(lower level necessary artefacts),例如代码和文档。而随着这类系统和模型规模的不断增长,出现了对模型可扩展性和协作开发问题的担忧。许多广泛使用的建模工具和技术在一些条件下会因为耗尽资源而迅速达到极限,比如,当他们尝试管理非常大量的模型时,或者当他们花费大量的时间执行最基本的任务时,甚至其中的一些任务根本无法执行。此外,因为很多个开人员需要去协作创建和使用模型,因此,可靠的分发形式和模型的版本控制需要被实现和集成到开发过程中。本论文的重点一在识别这些限制,二在给出处理这类大模型问题的解决方案。2.1节将对这个领域的工作进行初步介绍。
1.2. 版本控制系统(Versioning Systems)概述
在软件工程中,维护过去版本的记录(record)是最常见的做法,因为这有助于在任意组件(artefacts)上进行协作开发,这还提供可靠的恢复和变更管理的模式。在进行版本控制的时候,有两个主要的方法可以采用:
第一个方法是基于文本文件的版本控制(通常用在包含程序源代码的项目中),这也是最受欢迎的版本控制方法之一。仅通过存储版本间修改(deltas增量),此类系统便提供了有效存储大量快速演变的文件的能力,这对由多个开发人员管理的大量文本文件的协作开发颇有帮助。一方面,这种方法适用于基于文本的模型持久性格式(model persistence formats),例如XML,因为他们自身就适用这种范例(paradigm)。另一方面,许多其他的模型持久性格式并不这样,例如一些基于二进制文件的格式。当使用二进制文件,版本控制系统将需要存储每个文件的全部内容,即使是很小的修改。
第二个方法是使用特定的基于模型的版本管理系统。这种方法的好处是,它是在对MDE语义理解的基础上构建的(即清楚元模型(metamodel)和模型(models)的概念,而不是文本或者语句),这还能强化对基于模型的增量(deltas)的存储,并且这些增量通常比基于文本文件的增量有更好的细粒度(more fine-grained),因为它允许保存适当模型级的琐碎内容。缺点是这样的系统需要在它们自身和所使用的建模技术之间进行高度耦合集成(以便提供必要的语义),这与更加关注正交性(orthogonal)的基于文本的案例形成了对比。第2.2.2节在MDE的叙述中将回顾此类系统。
1.3. 动机与假设
在可协作的MED上下文中处理可扩展性是这个领域研究所需要的。从理论角度讲,不但需要一种不会陷入资源匮乏的处理非常大模型的方法(关于MDE中通常需要各种模型管理操作),还需要能支持来自多个开发人员的协同工作。从实际的角度讲,MONDI项目的多个工业合作方(Ikerlan,Softeam,SoftMaintain(Sodifrance的子公司),Uninova)曾表示需要在各自的领域中以更具扩展性的方式处理他们的模型。
如今,如果使用经典的基于文本的版本控制方法,则它们要么必须存储为单个文件(大文件的内存加载是个问题),要么存储为彼此关联性很小的模型片段的集合文件。每个开发者通常只会存储和操作它们自己的模型片段子集(subset of the model fragments),之后,为了检索全文信息,需要获取其他全部的模型片段(如果它们未在本地存储),然后又将全部的片段加载到内存中,以确保返回了完整的结果。这由回到了一开始加载大模型的问题上了,或者,当仅加载部分片段会存在全局丢失的风险(因为无法获得有关其他模型片段的全局信息)。另一方面,如果这用在特定领域的版本控制中,为了与特定的版本控制工具使用过程的步骤和技术保持一致,又需要必须改变开发的过程(因为它必须与建模紧密集成才能起作用)。
本工作的重点在于提供一种解决方法,它并不尝试去从根本上改变在MDE中管理大模型所使用的技术,而是试图在当前使用的最先进的技术和可能需要的新技术之间提供一种媒介,这避免了考虑特定领域的一些规范。所提出的方法引入了模型索引的概念(model indexing),由此引出了一个独立的系统,模型索引系统,该系统包含存储在基于文件的版本控制系统中的只读表示。模型索引能在大量模型中高效的索引,且不会产生在本地加载或者仅加载部分模型的成本,因此,这项研究的假设如下:使用一个正交于特定VCS或模型格式的非入侵式的模型索引系统,显著降低对存储在基于文本的VCS模型元素级查询的开销。(The overhead of computing model-element-level queries over large (collections of) models stored in a file-based VCS can be significantly reduced using a non-invasive model-indexing system orthogonal to the specific VCS or model representation format.)
1.4. 研究结果
这项研究提出了一种新型的方法,解决MDE中的可扩展性问题,还提出了一个模型索引框架和原型,它们提供了一种可扩展的方式来管理多人开发的大模型。这项工作通过广泛的实验评估得到了验证,研究的结果支持假设,模型管理着数百万个元素,在某些查询的执行时间上缩减95.1%,提供增量以保持索引最新的日期(与非增量的方法相比,执行时间平均缩减70.7%),并且表明这种模型检索方法能被推广到其他建模技术和其他类型的持久性支持端(persistence back-ends)和版本控制系统。最后,这项工作对MDE中使用的当前最先进的工具和技术进行了全面的审查和分类,展示了它们的主要优势和局限性,因为所提出的解决方案并不试图取代这类技术,而是在一些特定的查核提供了一种合适的替代方法(在第3.4节中会介绍)。
1.5. 论文结构
第2章对MDE进行了概述,2.1节介绍了该学科和可扩展性问题;2.2节回顾了当今可用的最先进的工具和技术与对应的特点。
第3章阐述了当前的问题,叙述了本研究的假设、研究目标和工作范围,确定了研究领域。
第4章详细介绍了作为管理MDE中的可扩展性的概念验证而开发的原型工具的结构、设计和实现。第4.1节介绍了此类系统的预期功能;第4.2节介绍了各个组件的架构;第4.3节介绍了设计的细节,包括该工具提供的各种API,并深入研究了每个组件各自的细节,以及系统使用的各种关键步骤和算法;第4.4节简短地表达了一些执行细节和一个用户指南。
第5章分析了评估上述原型所收集的实验数据,并讨论了对系统各功能和非功能特性方面的重要性。第5.1节给出了评估系统的方法;第5.2节给出了所用的基准(benchmarks);第5.3节细化了结果并说明了意义;第5.4节讨论了各种集成工作,为使系统能够与该领域其他广泛使用的工具一起作用;第5.5节提到了提到了各种可替代的驱动,他们作为一种评估系统架构的方式,能被用来替代(或者关联)作为这项工作一部分而开发的主要的主要的部分。
原文链接:https://etheses.whiterose.ac.uk/14376/7/Konstantinos%20Barmpis%20-%20EngD%20Thesis.pdf
官网链接:https://www.eclipse.org/hawk/
Barmpis K. Towards Scalable Model Indexing[D]. University of York, 2016. ↩︎