郑晟 昆明理工大学 云南省计算机技术应用重点实验室 VO中的科学工作流技术 郑晟 昆明理工大学 云南省计算机技术应用重点实验室
科学工作流的基本概念 科学工作流(Scientific Workflow)是指将一系列在科学研究中所遇到的数据管理、计算、分析、展现等工作变成一个个独立的服务,再把这些服务通过数据链接组合在一起,满足研究人员在科学实验和数据处理中的需要,从而实现相应的处理与科学计算。科学工作流针对科学研究工作的特点,专注于大规模科学处理(e-Science)的定制,对科学研究提供辅助科学发现的环境。
科学工作流的特征 科学工作流往往会表现出比较特别的特征,例如,它们可以是数据密集型、计算密集型、分析密集型和可视化密集型,因此在科学领域涵盖了非常广泛的应用范围,从低层次网格工程师感兴趣的"底层工作流" ,到高层次的"知识发现工作流"。因此,工作流步骤可以有完全不同的粒度,可以以多种不同的方式来实施,例如:Shell脚本, Web Service,本地应用程序调用,或复杂子工作流组合等[1]。
当前常见的SWF系统 Kepler(http://www.kepler-porject.org) Pegasus(http://pegasus.isi.edu) Vistrails(http://www.vistrails.org) Triana(http://www.trianacode.org)
VO中应用Kepler的优势和问题 Kepler介绍 Kepler的优点 应用Kepler的优势 在VO中应用Kepler的一些问题
Kepler的介绍 Kepler项目由美国科学基金NSF支持,UC Berkeley和San Diego超级计算中心联合,基于Java开发的,目的是打造一个通用的科学工作流集成平台,并且将整合多种已有的计算模型。
Kepler的优点 一个通用开放的平台,并不是针对某个特定学科 通过Web Service访问资源和服务 良好的人机交互界面 工作流的重用 良好的扩展性(定制Actor等) Data Provenance
在VO中应用Kepler的优势 Kepler是基于JAVA的,可以运行在多个平台上(Unix、Linux、Solaris、Windows等) Kepler是基于BSD协议的开源软件,可以为了满足VO的要求而进行源码扩展和修改 可以使用Kepler现有的大量通用Actor(Math、Statistic、IO、Web Service)
在VO中应用Kepler的问题 在Kepler中没有提供VO用到的Actor(数据、科学计算) 现有Kepler工作流的流程调度是否满足VO的要求 现有Kepler工作流的数据类型是否满足VO的要求
Kepler的Actor Customize Actor-oriented的API Sample:ScaleActor
基于Actor的工作流模型 工作流由一些独立的Actor组成 Actor通过Port进行通信 Actor有自己的Parameter 工作流的执行顺序由Director定义(调度)
基于Actor的好处 基于Actor的工作流模型带来行为和调度的分离,从而使Actor带来更大重用性 可以分别扩展Actor和Director
Actor-oriented的API execution - preinitialize, type-check, run*, wrapUp run – initialize, iteration* iteration - prefire, fire, postfire execution:表示Director执行调用一个工作流 run:调用Actor的initialize方法,并执行iteration步骤 iteration:对每个Actor的prefire, fire, postfire方法进行调用
Actor execution initialize() Iterations wrapUp() prefire fire() postfire()
Actor Methods initialize(): 初始化Actor的状态变量 prefire(): 返回一个布尔量来决定是否调用fire方法 比如调用web service,在这个方法验证远程服务是否可用,来决定是否调用fire方法 fire(): actor的主要执行方法 如获得actor本身参数,读取输入数据,进行科学运算,产生输出数据
Actor Methods(续) postfire(): 决定actor执行是否完成 wrapUp(): 释放资源或者展示最终结果
ScaleActor:Constructor ScaleActor:输入数据比例缩放 public class ScaleActor extends TypedAtomicActor { public TypedIOPort input; public TypedIOPort output; public Parameter factor; public ScaleActor(CompositeEntity container, String name) throws NameDuplicationException, IllegalActionException { super(container, name); input = new TypedIOPort(this, "input", true, false); output = new TypedIOPort(this, "output", false, true); factor = new Parameter(this, "factor", new IntToken(1)); output.setTypeAtLeast(input); } public void fire() throws IllegalActionException {…} private Token scale(Token input, Token factor) throws IllegalActionException {…}
ScaleActor:fire method public void fire() throws IllegalActionException { if (input.hasToken(0)) { Token in = input.get(0); //获得输入 Token factorToken = factor.getToken(); //比例因子 Token result; //输出结果 result = scale(in, factorToken); output.send(0, result); }
ScaleActor:scale method private Token scale(Token input, Token factor) throws IllegalActionException { if (input instanceof ArrayToken) { Token[] argArray = ( (ArrayToken) input).arrayValue(); Token[] result = new Token[argArray.length]; for (int i = 0; i < argArray.length; i++) { result[i] = scale(argArray[i], factor); } return new ArrayToken(result); else { return factor.multiply(input);
下一步工作 当前VO中提供的数据和科学计算来构建actor,以满足各个天文计算的需要 -Web Service -遗留系统 数据类型的需求 流程调度的需求
谢谢