dflow工作流使用1——架构和基本概念

        对于容器技术、工作流等概念完全不懂的情况下理解dflow的工作方式会很吃力,这里记录一下个人理解。

dflow涉及的基本概念

        工作流的概念很好理解,即某个项目可以分为多个步骤,每个步骤可以实现独立运行,只保留输入输出接口,把每个步骤按顺序串起来就形成了工作流。这样的框架的目的或作用是1、为用户提供一种标准的模板用于记录每个步骤要完成的事(工业上可以叫工序卡);2、负责管理工序执行顺序,收集记录和传递输入输出;3、向用户以友好的方式展示当前工作状态。

        dflow是一个基于argo工作流框架的框架,猜测是因为argo模板和执行顺序指令的制作缺乏标准化封装所以推出的。除了通常意义上的封装,dflow还实现了把带输入输出的python脚本打包成argo模板的功能,而原先要在argo里写python只能手写模板,这相当于实现了类似于自动代码生成的功能。

        如前面所述,工作流(workflow)是由一个个的步骤(step)组成的。因此要完成一个工作流的设计,用户需要定义每一个步骤(包括每个步骤接受的输入,执行的内容,以及输出),再将步骤按顺序串起来。要编写步骤,需要完成两件事:1、编写模板(template),模板中记载了输入输出的名称类型和数量,该模板要使用的工作环境,和具体的操作(比如将名为a.txt的文件内容读出,写入名为b.txt的文件中);2、编写步骤(step),即引用刚才编写好的模板,指定具体的输入输出文件。这个过程和函数调用很像,函数本身是模板,调用函数时的语句是步骤。

        下面的代码来自dflow-helloworld:

'''
这里开始定义名为Hello的模板对象。image是容器的镜像即工作环境,script是这个模板将要执行的linux shell脚本
'''
step1_templ = ShellOPTemplate(
                name="Hello",
                image="alpine:latest",
                script="echo {{inputs.parameters.msg}} > /tmp/msg.txt && echo {{inputs.parameters.number}} > /tmp/results.txt",
)

#这里仍然在定义模板,定义了模板的输入输出。这块内容也可以在上面一块写,只是编程习惯的问题
step1_templ.inputs.parameters = {
                            "msg": InputParameter(),
                            "number": InputParameter(),
}
step1_templ.outputs.parameters = {
                                "out_param": OutputParameter(value_from_path="/tmp/results.txt")
}
step1_templ.outputs.artifacts = {
                            "out_art": OutputArtifact(path="/tmp/msg.txt")
}


'''
这里引用了上面的模板,定义了一个步骤,并且赋予了具体的输入内容,即名为msg的字符串和名为number的数值
'''
step1 = Step (
            name="step1",
            template=step1_templ,
            parameters={"msg":"HelloWorld!", "number": 1},
)

        argo自身支持的模板有好几种,感觉dflow主要用的是HTTP template,即将整个工作流打包成一个json或yaml文件,通过http post到服务器端。dflow内部定义的shellOPtemplate,pythonOPtemplate等模板,写到最终这个json文件里其实本质结构都是一样的。在dflow的代码中,首先将dflow定义的对象转换为argo对象,再转为json。

工作流的架构

        对于上面提到的“工作环境”和“镜像”,则是容器技术领域的概念。argo是基于容器的,即使用容器技术,将各个step放到容器里去执行,可以理解为argo主程序开启了很多个虚拟机来执行这些step,并管理着这些虚拟机之间的输入输出。要使用容器,首先要安装容器引擎。kubernetes是大型服务集群上常用的平台,而对于小型任务可能过于麻烦,因此dflow使用的是docker+minikube,可以比较轻量化地实现kubernetes的功能。对于一个容器来说,他要具有执行代码的环境,比如是ubuntu还是centos,里面安装的是python还是gcc,python有哪些库等等。这些信息可以被打包成一个镜像来被容器使用。当在dflow中指定模板的镜像时,就指定了模板中代码的运行环境。虽说可以理解为虚拟机,但容器和镜像比虚拟机占用的资源要小得多,一个容器镜像大小在几百兆到1G左右,并且启动只需要数分钟。

        大致的架构是这样的:本地机器运行着docker+minikube,minikube中开启一个pod(最小调度单元,可以近似认为就是一个容器)运行着argo的几个主要进程。当通过dflow向argo提交工作流时,argo进程就会开启新的pod来执行工作流。这些pod可能在本地,也可以在远程服务器上。

安装过程阐释

        下面简单解释一下dflow的安装过程都在做些什么。以下内容来自

        https://github.com/kianpu34593/dflow_helloworld/blob/master/dflow-helloworld.ipynb

        1、安装docker+minikube,作为argo运行的基础。

        

        2、本地python安装dflow库,里面包含了dflow使用的库函数,作用是将定义的模板、步骤等转换为argo能接受的格式化文件,同时有些与argo服务器端通信的函数。(理论上dflow开启debug模式后也可以纯本地运行,不依赖argo)

        

        3、本地启动minikube,它会默认下载并使用一个1G多的镜像运行,在国内可以加个参数让下载更快些。这里注意如果步骤设计多进程并行任务,要指定好minikube的核数,否则工作流所面对的cpu数量不足,容器无法运行。

        

        4、在minikube中安装argo框架。先创建命名空间,之后的操作指定该命名空间后就可以实现操作上的隔离。安装框架时使用不同的源可能会安上不同版本的argo,版本不同会导致某些地方有问题。。。

        

        5、监测一下argo的几个pod运行状况,都running的话说明argo完全启动了

        

         6、将argo容器的端口转到本地上,2746是用于监测的界面,9000是一个叫minio的存储控制软件,负责管理各个pod产生的文件

        

        至此就可以运行dflow脚本提交工作流了。

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/59566.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

WebGL Shader着色器GLSL语言

在2D绘图中的坐标系统,默认情况下是与窗口坐标系统相同,它以canvas的左上角为坐标原点,沿X轴向右为正值,沿Y轴向下为正值。其中canvas坐标的单位都是’px’。 WebGL使用的是正交右手坐标系,且每个方向都有可使用的值的…

c语言野指针int*p、空指针int*p = NULL、万能指针void* p

1、野指针&#xff0c;既没有初始化的指针&#xff0c;//如果没有给指针初始化&#xff0c;则指针p的内容为随机地址&#xff0c;会随机指向&#xff0c;故成为野指针&#xff0c;不可以操作野指针 #include "stdio.h" #include <stdlib.h>int main() {//1、野…

ORACLE常用基础

. 1.oracle开机启动流程 su - oracle lsnrctl start lsnrctl status sqlplus / as sysdba startup 2、如何查看数据库版本 select * from v$version; 3.如何查看用户从那个设备连接的数据库 SELECT DISTINCT machine , terminal FROM V$SESSION; 4.如何查看表结构 selec…

FANUC机器人SRVO-300机械手断裂故障报警原因分析及处理办法

FANUC机器人SRVO-300机械手断裂故障报警原因分析及处理办法 首先,我们查看报警说明书上的介绍: 总结:即在机械手断裂设置为无效时,机器人检测出了机械手断裂信号(不该有的信号,现在检测到了,所以报警) 使机械手断裂设定为无效/有效的具体方法:  按下示教器的MENU菜单…

Vue前端框架入门

文章目录 Vue快速入门Vue指令生命周期 Vue 经过一小段时间学习 我认为vue就是在原js上进行的一个加强 简化JS中的DOM操作 vue是分两个层的 一个叫做视图层(View)&#xff0c;你可以理解为展现出来的前端页面 一个叫数据模型层(Model),包含数据和一些数据的处理方法 MVVM就是实…

数据结构10 -查找_树表查找

创建二叉搜索树 二叉搜索树 二叉搜索树是有数值的了&#xff0c;二叉搜索树是一个有序树。 若它的左子树不空&#xff0c;则左子树上所有结点的值均小于它的根结点的值&#xff1b; 若它的右子树不空&#xff0c;则右子树上所有结点的值均大于它的根结点的值&#xff1b; 它…

从0到1开发go-tcp框架【2-实现Message模块、解决TCP粘包问题、实现多路由机制】

从0到1开发go-tcp框架【2-实现Message模块、解决TCP粘包问题、实现多路由机制】 1 实现\封装Message模块 zinx/ziface/imessage.go package zifacetype IMessage interface {GetMsdId() uint32GetMsgLen() uint32GetMsgData() []byteSetMsgId(uint32)SetData([]byte)SetData…

组合总和——力扣39

文章目录 题目描述回溯 题目描述 回溯 class Solution { public:vector<vector<int>> res;vector<int> seq; void dfs(vector<int>& nums, int pos, int target){if(target0){res.emplace_back(seq);return;}if(posnums.size()){return;}//直接跳过…

2023上半年手机及数码行业分析报告(京东销售数据分析)

2023年上半年&#xff0c;手机市场迎来复苏&#xff0c;同环比来看&#xff0c;销量销额纷纷上涨。 而数码市场中&#xff0c;各个热门品类表现不一。微单相机及智能手表同比去年呈现增长态势&#xff0c;而笔记本电脑市场则出现下滑。 基于此现状&#xff0c;鲸参谋发布了20…

Ubuntu 虚拟机和主机无法互相复制文字和文件

1.在虚拟机列表中&#xff0c;右键查看是否有安装VMware Tools&#xff0c;如果没有安装点击安装&#xff0c;如果已经安装了&#xff0c;上面显示重现安装VMware Tools&#xff0c;并且为灰色&#xff0c;如图&#xff1a; 2.如果没有安装点击安装&#xff0c;如果已经安装&am…

【知识产权】专利的弊端

接上篇【知识产权】著作权的作用_qilei2010的博客-CSDN博客。 ​ 1 专利的分类 首先,专利分为:发明专利、实用新型专利、外观设计专利。这里要说明的是专利的不同种类在不同的国家都是有不同规定的,并不是所有国家和地区都是分成这三类。 >国家法律法规数据库 >中华…

untiy代码打压缩包,可设置密码

1、简单介绍&#xff1a; 用的是一个插件SharpZipLib&#xff0c;在vs的Nuget下载&#xff0c;也可以去github下载https://github.com/icsharpcode/SharpZipLib 用这个最主要的是因为&#xff0c;这个不用请求windows的文件读写权限&#xff0c;关于这个权限我搞了好久&#…

51单片机(普中HC6800-EM3 V3.0)实验例程软件分析 实验四 蜂鸣器

目录 前言 一、原理图及知识点介绍 1.1、蜂鸣器原理图&#xff1a; 二、代码分析 前言 第一个实验:51单片机&#xff08;普中HC6800-EM3 V3.0&#xff09;实验例程软件分析 实验一 点亮第一个LED_ManGo CHEN的博客-CSDN博客 第二个实验:51单片机&#xff08;普中HC6800-EM…

快速文件传输常见问题

我们所处的世界充斥着各种信息&#xff0c;能够迅速获得正确的数据往往是企业成功的关键因素。将文件从A点移动到B点需要考虑很多问题&#xff0c;但是当涉及需要在最短时间内送达全球各地收件人的大型关键任务文件时&#xff0c;就不能再使用Dropbox和 Google Drive 等方案了。…

安全学习DAY13_WEB应用源码获取

信息打点-WEB应用-源码获取 文章目录 信息打点-WEB应用-源码获取小节概述-思维导图资产架构-源码获取&#xff08;后端&#xff09;后端-开源后端-闭源-源码泄露源码泄露原因源码泄露方式集合网站备份压缩包git&#xff0c;svn源码泄露DS_Store文件泄露composer.json 泄露资源搜…

C语言预备知识

安装Visual studio 官方网址 https://visualstudio.microsoft.com/zh-hans/ 选择第一个社区版本&#xff08;免费&#xff09; 下载完成后打开安装包 安装完成后会自动打开程序选择c项目然后安装即可&#xff08;c兼容c&#xff09; 安装完成后启动程序注意这里需要注册也可…

设备管理系统与物联网的融合:实现智能化设备监控和维护

在数字化时代&#xff0c;设备管理系统和物联网技术的融合为工业企业带来了巨大的变革和创新。本文将探讨设备管理系统与物联网的融合&#xff0c;重点介绍设备健康管理平台在实现智能化设备监控和维护方面的关键作用和优势。 一、设备管理系统与物联网的融合 随着物联网技术的…

OJ:C++ | [vector] — 力扣

文章目录 118. 杨辉三角 - 力扣思路解&#xff1a; 17. 电话号码的字母组合 - 力扣思路&#xff1a;递归解&#xff1a; 137. 只出现一次的数字 II- 力扣思路&#xff1a;解&#xff1a; 118. 杨辉三角 - 力扣 题目链接&#xff1a;118. 杨辉三角 - 力扣&#xff08;LeetCode&…

算法与数据结构(二十一)二叉树(纲领篇)

备注&#xff1a;本文旨在通过 labuladong 的二叉树&#xff08;纲领篇&#xff09;理解框架思维&#xff0c;用于个人笔记及交流学习&#xff0c;版权归原作者 labuladong 所有&#xff1b; 我刷了这么多年题&#xff0c;浓缩出二叉树算法的一个总纲放在这里&#xff0c;也许…

使用可视化docker浏览器,轻松实现分布式web自动化

01、前言 顺着docker的发展&#xff0c;很多测试的同学也已经在测试工作上使用docker作为环境基础去进行一些自动化测试&#xff0c;这篇文章主要讲述我们在docker中使用浏览器进行自动化测试如果可以实现可视化&#xff0c;同时可以对浏览器进行相关的操作。 02、开篇 首先…