现在的大数据应用都非常复杂,并不仅仅能够通过一个或者几个MapReduce任务来描述。更加复杂的描述大数据应用的是工作流 (workflow)。WorkflowSim (http://www.workflowsim.org/)是由南加州大学(University of Southern California)的Weiwei Chen开发的一套开源工作流仿真软件。WorkflowSim是拓展自CloudSim的工作流仿真开源软件,可以提供工作流基础上的仿真,增加了模拟不同层次延时和故障的支持,与真实分布式环境更加接近。支持了各种task scheduling, clustering, resource provisioning的算法。广泛应用在故障容错研究,成本导向调度研究,资源调度研究,能耗研究等领域。
其工作原理是在暨有的CloudSim仿真软件基础上,提供workflow层次的仿真。工作流可以用有向图来描述(Directed Acyclic Graph) DAG,图的任何一个节点都是一个由用户制定执行的任务(task),节点之间有通过数据输入输出形成的依赖关系(dependency)。工作流引擎会依据其依赖关系按顺序执行,同时执行也会调用用户所选择的调度算法,比如HEFT,MINMIN等等算法已经在WorkflowSim里边实现并且测试通过了。用户也可以添加自己的调度算法。
在实际运行过程中,因为很多工作流非常大,甚至到达几千上万个任务,而通常我们只有几十个计算节点。这个时候就需要使用task clustering这个技术来聚合相类似的任务从而形成任务群(clustered job),有时候也通用称之为job。每个job包含了多个task,然后提交给运行环境的时候是整体提交的,这样可以节省很多延迟(submission delay),等到了某一个计算节点的时候再打开任务群然后分别执行。如何形成job就需要各种算法,有包括了balanced task clustering可以综合考虑依赖关系的,也有fault tolerant clustering可以综合考虑规避failure的。这些也都已经在WorkflowSim里边实现。其行为最为接近Pegasus工作流管理系统。
WorkflowSim是一套开源软件,所有源代码和介绍都可以在http://www.github.com/WorkflowSim/找到,使用目前流行的Git做软件版本控制。使用非常简单,下载完源代码之后,只需要在任何一个WorkflowSim example里边选择所需要的dax 文档,并且修改里边的daxPath变量,即可运行。比如选择“WorkflowSim-1.0/examples/org/workflowsim/examples/WorkflowSimBasicExample1.java”这个例子,将里边的daxPath改成在你当前环境下的文件路径即可。比如如果你下载到了。WorkflowSim在config/dax文件夹下面已经提供了很多DAX文件可供仿真。这些工作流的介绍可以参考:http://pegasus.isi.edu/workflow_gallery/index.php 同时我们还提供WorkflowGenerator可以生成你所需要的任何工作流DAX文件 https://confluence.pegasus.isi.edu/display/pegasus/WorkflowGenerator
如果对WorkflowSim感兴趣并且想进一步开发功能,可建议(但不限于)研究以下方面
1. 基于价格的调度算法,CloudSim本身已经实现了每个task的cost,但是WorkflowSim还没有合适的调度算法。
2. 动态资源调度算法。WorkflowSim目前还是静态的把计算节点建立好然后运行工作流。
3. 多数据中心支持。目前只测试了单数据中心支持。
4. 数据日志支持,讲已有的工作流管理系统的log转换成为trace从而可以在WorkflowSim里边仿真。目前只测试过Pegasus。
5. 可靠调度算法,在仿真Failure的情况下调度算法应该如何变得更鲁棒?目前failure的生成已经开发完成,但是相应的算法还没有。
6. 自适应算法或者分布式算法。目前仅有一个中心调度算法,分布式算法也可以在WorkflowSim上面实现。
7. 基于duplication的算法。在计算节点有余的时候,可以自动复制一部分任务到空闲的计算节点上。
clouldsim的介绍和使用
clouldsim体系结构图
使用CloudSim仿真的一般步骤