# orderlines **Repository Path**: lucifer2008_admin/orderlines ## Basic Information - **Project Name**: orderlines - **Description**: 工作流框架 - **Primary Language**: Unknown - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 3 - **Created**: 2024-09-20 - **Last Updated**: 2024-09-20 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README

orderlines

使用python开发的一套工作流框架


### 一、设计思路 流程的使用链表进行串联 插件库就是我们具体要运行的任务,插件库中有基本的标准库,如start, end, process_control, parallel, group,common, 启动start, end作为内置BuiltIn模块。common是支持我们自主进行编写的任务插件库,process_control, parallel作为网关控制我们任务的运行顺序,group作为抽象任务其中可以包含多个任务。 当然我在设计的过程中有借鉴很多其他的优秀模块,比如python中很出名的airflow框架,以及著名的测试框架`robotframework`。我的表结构设计是借鉴airflow的,组件库的思路是借鉴`robotframework` 的。但是我在本质上还是和他们有很大的区别的。比如airflow是有向无环图,`orderlines`是链表,因为我需要做循环所以我要使用链表。当然我觉得很多好的项目都是站在别人的肩膀上。 为什么要做这个项目呢? - 第一:我发现python中没有一个模块可以全部支持,流程判断、任务组、并行这三个功能的工作流。 - 第二:我在之前的工作中都是有关于自动化的、所以我想有个属于自己理想的框架,来比较灵活的应对业务的复杂性。 - 第三:很多工作流都是代码生成图形,我想开发个低代码的平台,更加方便的使用。 ### 二、架构设计 #### 2.1、架构图 ![img.png](./docu/images/orderlines.png) - Web UI指的是相配套的前端页面,通过接口查看、创建、控制流程。gRPC用grpc接口控制流程。 - Web Server服务器。可以接受http请求,用于提供用户界面的操作窗口,主要负责操作,查看流程等。 - Schedule定时器。负责定时任务,周期任务,间隔任务,将流程交给Executor执行。 - Executor执行器。主要负责流程的运行,以及异常的处理。把每个流程中的任务解析运行。 - worker负责具体的流程运行,目前默认使用celery作为执行者。 - database数据库。存储流程信息,流程实例,任务信息,任务实例等相关数据。 #### 2.2、业务模型 ![img.png](docu/images/base_model.png) 关于`orderlines`中很重要的一些概念就是流程、流程实例、任务、任务实例、以及组件库和网关。 - 流程:如上图所示是一个流程。**流程是由一系列的任务组合而成的**。可以使用一个链表来表示。**每个任务代表一个节点。** - 流程实例:流程实例是流程运行之后所产生的一个流程运行信息。简单来说就是**流程是流程配置信息,流程实例是流程的运行信息**。 - 任务:任务是我们的业务。流程是有一系列有意义的任务所组成的,**任务也就是流程的最小单位**,当然任务中还分为很多种,比如流程网关、业务任务。 - 任务实例:也是比较好理解,是任务运行后所产生的任务运行信息。和**流程实例是一对一的关系**,每个任务实例只对应一个流程实例,一个任务可以对应多个任务实例。 - 组件库:是针对于业务类型创建的对应的类库,可以参考[自定义插件](./docu/后端文档/2-插件管理/自定义插件.md)了解组件库。 - 网关:是框架提供了三个特殊的方法,方便适配业务操作。可以参考[标准库](./docu/后端文档/2-插件管理/标准库.md)。 #### 2.3、设计亮点 - 有相对完整的前端页面,可以控制和创建流程。 - 实现了**任务组,流程控制,并行任务**三种任务网关,可以实现循环。 - 细分任务。针对业务设计了**有状态任务和独占任务**,应对不同的工作流场景。 - 组件库方式。可以针对**不同的业务对应开发不同的组件**,方便业务解耦。 - 提供了三种异常处理策略,**重试,报错,跳过**。 - 支持debug模式。 ### 三、功能特点 - 基本涵盖了工作流所需要的所有功能,串行,并行,流程控制,任务组 - 定时细分:**定时执行,间隔执行,周期执行**(`cron`表达式) - 任务细分: - 根据任务状态可以分为——有状态任务(任务本身有状态)无状态任务(任务本身没有状态) - 根据任务是否可以被同时运行——独占任务(不同流程只能同时运行一个),普通任务(不同流程可以同时运行多个任务) - 插件方式扩展功能,可以自定义插件适用于不同的业务功能,方便业务功能的解耦 - 灵活的流程构建和启动方式 - 构建方式 - 通过配套的前端进行配置 - 通过`yaml`文件和`json`文件 - 命令行配置 - 启动方式 - `http`接口启动 - `grpc`启动 - 命令行启动 - 流程告警,异常处理,异常通知更加灵活 - 异常处理方式分为**报错,忽略,跳过**(后续会增加忽略此类告警等功能) - 异常通知可以通过自定义组件灵活扩展适配到钉钉,企业微信,飞书,短信等方式 ### 四、相关文档 - [标准库](./docu/后端文档/2-插件管理/标准库.md) - [自定义插件](./docu/后端文档/2-插件管理/自定义插件.md) - [配置管理](./docu/后端文档/3-配置管理/配置管理.md) ### 五、功能介绍 - 基本功能 - 流程串行,基本功能 - 定时任务,定时执行,间隔执行,周期执行 - 流程版本,一个流程可以对应多个版本 - 变量解析 - 任务返回值,返回值进行**四则运算和变量拼接**。(返回值使用`mongodb`或者`redis`进行存储——开发中) - 运行时增加运行参数变量, 参数变量可以在流程中使用 - 任务网关 - 流程控制, 根据任务运行状态和上个节点的返回值运行 - 任务组,多个任务合成一个任务 - 流程并行(可选择使用**协程io密集型和进程cpu密集型**) - 自定义插件 - 支持自定义插件安装,方便业务功能扩展 - 任务处理 - 任务超时,给定超时时间(开发中) - 异常处理策略,**重试,忽略,抛错** - 任务回调,**特定任务状态(成功,失败,超时,忽略,重试)**可以指定回调函数 - 任务停止,支持有无状态任务和有状态任务的停止 - 使用模式 - 支持http接口操作 - 命令行模式,详情查看orderlines --help - 增加grpc方式操作 - 权限控制 - rbac权限,支持角色和群组两种模式 - 流程配置 - 前端配置界面 - 支持yaml文件,json文件创建 - 部署方式 - docker-compose一键式部署 ### 六、页面介绍 #### 6.1、首页 img.png #### 6.2、数据大屏 img.png #### 6.3、流程配置 img.png #### 6.4、流程运行 img.png #### 6.5、流程管理 img.png #### 6.6、流程告警 img.png #### 6.7、插件管理 img.png #### 6.8、权限管理 img.png #### 6.9、系统管理 img.png ### 七、状态介绍 #### 7.1、流程状态图 ```python import enum class ProcessStates(enum.Enum): green = 'SUCCESS' # 成功 red = 'FAILURE' # 失败 yellow = 'STOP' # 停止 grey = 'PENDING' # 排队 blue = "RUNNING" # 运行 purple = "PAUSED" # 暂停 orange = "TIMEOUT" # 超时 ``` img.png #### 7.2、任务状态图 ```python import enum class TaskStates(enum.Enum): grey = 'PENDING' blue = 'RUNNING' red = 'FAILURE' green = 'SUCCESS' yellow = 'STOP' orange = 'TIMEOUT' purple = "PAUSED" ``` img.png ### 八、启动方式 #### 8.1、docker启动, 直接部署 ```shell bash deploy.sh ``` #### 8.2、命令行启动 ```shell # 先进行打包 pip install --editable . # 查看命令行帮助 orderlines --help Commands: build-process-by-json build process by json file. build-process-by-yaml build process by yaml file. create-super-user create a super administrator. create-user create a super administrator. paused-process pause process by process instance id. recover-process recover process by process instance id. run-grpc run grpc server. runserver run orderlines server, default port 15900. schedule start schedule plan. start-process start process by process instance id. stop-process stop process by process instance id. # 启动命令 orderlines run-server # 启动flask服务 orderlines schedule # 启动定时器 orderlines run-grpc # 启动grpc celery -A celery_worker.celery worker --loglevel=info --pool=solo # 启动celery ``` #### 8.3、测试启动 ```shell # 启动celery cd src celery -A celery_worker.celery worker --loglevel=info --pool=solo # 启动flask python app.py # 启动flask ```