• Stars
    star
    133
  • Rank 265,263 (Top 6 %)
  • Language
    Python
  • License
    MIT License
  • Created almost 3 years ago
  • Updated 23 days ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

A event-driven workflow engine for Python

bamboo-engine: A event-driven workflow engine for Python

license PRs Welcome Python 3.6 Python 3.7 codecov BK Pipelines Status

(English Documents Available)

bamboo-engine 是一个通用的流程引擎,他可以解析,执行,调度由用户创建的流程任务,并提供了如暂停,撤销,跳过,强制失败,重试和重入等等灵活的控制能力和并行、子流程等进阶特性,并可通过水平扩展来进一步提升任务的并发处理能力。

整体设计

bamboo-engine 是流程引擎核心模块、调度逻辑的定义和实现,并没有内置特定的引擎运行时,需要搭配实现了 bamboo_engine.eri.interfaces.EngineRuntimeInterface 接口的引擎运行时使用,目前提供了以下运行时可供使用:

engine 模块结构:

Quick start

1. 安装依赖

$ pip install bamboo-pipeline

2. 项目初始化

由于 bamboo-pipeline 运行时基于 Django 实现,所以需要新建一个 Django 项目:

$ django-admin startproject bamboo_engine_playground
$ cd bamboo_engine_playground

bamboo_engine_playground.settings.py 下添加如下配置:

from pipeline.eri.celery.queues import *
from celery import Celery

app = Celery("proj")

app.config_from_object("django.conf:settings")

INSTALLED_APPS = [
    ...
    "pipeline.component_framework",
    "pipeline.eri",
    ...
]

bamboo_engine_playground 目录下初始化数据库:

$ python manage.py migrate

3. 执行流程

首先在 bamboo_engine_playground 目录下启动 celery worker:

$ DJANGO_SETTINGS_MODULE=bamboo_engine_playground.settings celery worker -A bamboo_engine_playground.settings -Q er_execute,er_schedule -l info

创建并执行一个简单的流程:

import time

from bamboo_engine import api
from bamboo_engine.builder import *
from pipeline.eri.runtime import BambooDjangoRuntime

# 使用 builder 构造出流程描述结构
start = EmptyStartEvent()
# 这里先使用 bamboo-pipeline 自带的示例组件,我们会在后续的章节中学习如何自定义组件
act = ServiceActivity(component_code="example_component")
end = EmptyEndEvent()

start.extend(act).extend(end)

pipeline = builder.build_tree(start)

# 执行流程对象
runtime = BambooDjangoRuntime()

# 如果需要忽略流程中的环检查,可以指定为True cycle_tolerate
# api.run_pipeline(runtime=runtime, pipeline=pipeline, cycle_tolerate=True)
api.run_pipeline(runtime=runtime, pipeline=pipeline)

# 等待 1s 后获取流程执行结果
time.sleep(1)

result = api.get_pipeline_states(runtime=runtime, root_id=pipeline["id"])

print(result.data)

随后我们就能够看到流程的状态信息,如下所示,流程中的所有节点已经执行成功:

{'pc31c89e6b85a4e2c8c5db477978c1a57': {'id': 'pc31c89e6b85a4e2c8c5db477978c1a57',
  'state': 'FINISHED',
  'root_id:': 'pc31c89e6b85a4e2c8c5db477978c1a57',
  'parent_id': 'pc31c89e6b85a4e2c8c5db477978c1a57',
  'version': 'vaf47e56f2f31401e979c3c47b2a0c285',
  'loop': 1,
  'retry': 0,
  'skip': False,
  'created_time': datetime.datetime(2021, 3, 10, 3, 45, 54, 688664, tzinfo=<UTC>),
  'started_time': datetime.datetime(2021, 3, 10, 3, 45, 54, 688423, tzinfo=<UTC>),
  'archived_time': datetime.datetime(2021, 3, 10, 3, 45, 54, 775165, tzinfo=<UTC>),
  'children': {'e42035b3f98374062921a191115fc602e': {'id': 'e42035b3f98374062921a191115fc602e',
    'state': 'FINISHED',
    'root_id:': 'pc31c89e6b85a4e2c8c5db477978c1a57',
    'parent_id': 'pc31c89e6b85a4e2c8c5db477978c1a57',
    'version': 've2d0fa10d7d842a1bcac25984620232a',
    'loop': 1,
    'retry': 0,
    'skip': False,
    'created_time': datetime.datetime(2021, 3, 10, 3, 45, 54, 744490, tzinfo=<UTC>),
    'started_time': datetime.datetime(2021, 3, 10, 3, 45, 54, 744308, tzinfo=<UTC>),
    'archived_time': datetime.datetime(2021, 3, 10, 3, 45, 54, 746690, tzinfo=<UTC>)},
   'e327f83de42df4ebfab375c271bf63d29': {'id': 'e327f83de42df4ebfab375c271bf63d29',
    'state': 'FINISHED',
    'root_id:': 'pc31c89e6b85a4e2c8c5db477978c1a57',
    'parent_id': 'pc31c89e6b85a4e2c8c5db477978c1a57',
    'version': 'v893cdc14150d4df5b20f2db32ba142b3',
    'loop': 1,
    'retry': 0,
    'skip': False,
    'created_time': datetime.datetime(2021, 3, 10, 3, 45, 54, 753321, tzinfo=<UTC>),
    'started_time': datetime.datetime(2021, 3, 10, 3, 45, 54, 753122, tzinfo=<UTC>),
    'archived_time': datetime.datetime(2021, 3, 10, 3, 45, 54, 758697, tzinfo=<UTC>)},
   'e6c7d7a3721ca4b19a5a7f3b34d8387bf': {'id': 'e6c7d7a3721ca4b19a5a7f3b34d8387bf',
    'state': 'FINISHED',
    'root_id:': 'pc31c89e6b85a4e2c8c5db477978c1a57',
    'parent_id': 'pc31c89e6b85a4e2c8c5db477978c1a57',
    'version': 'v0c661ee6994d4eb4bdbfe5260f9a9f22',
    'loop': 1,
    'retry': 0,
    'skip': False,
    'created_time': datetime.datetime(2021, 3, 10, 3, 45, 54, 767563, tzinfo=<UTC>),
    'started_time': datetime.datetime(2021, 3, 10, 3, 45, 54, 767384, tzinfo=<UTC>),
    'archived_time': datetime.datetime(2021, 3, 10, 3, 45, 54, 773341, tzinfo=<UTC>)}}}}

恭喜你,你已经成功的创建了一个流程并把它运行起来了!

benchmark

测试环境:

  • MacBook Pro(16 英寸,2019)
  • 处理器:2.6 GHz 六核Intel Core i7
  • 内存:32 GB 2667 MHz DDR4
  • OS:macOS Big Sur 11.2.1
  • Broker:RabbitMQ 3.8.2
  • MySQL:5.7.22
  • worker 启动命令(单个 worker 进程 -c 参数不变,通过增加进程来提高并发处理能力)
    • python manage.py celery worker -c 100 -P gevent -l info -Q er_execute -n execute_%(process_num)02d
    • python manage.py celery worker -c 100 -P gevent -l info -Q er_schedule -n schedule_%(process_num)02d
测试场景 worker concurrency 流程执行耗时(s)
100个流程(单流程17个节点)并发执行 100 25.98
100个流程(单流程17个节点)并发执行 200 14.75
100个流程(单流程17个节点)并发执行 500 8.29
100个流程(单流程17个节点)并发执行 1000 6.78
1000节点大流程 100 19.33
1000节点大流程 200 12.5
1000节点大流程 500 11
1000节点大流程 1000 7.5

Roadmap

Support

BlueKing Community

  • BK-CI:蓝鲸持续集成平台是一个开源的持续集成和持续交付系统,可以轻松将你的研发流程呈现到你面前。
  • BK-BCS:蓝鲸容器管理平台是以容器技术为基础,为微服务业务提供编排管理的基础服务平台。
  • BK-PaaS:蓝鲸PaaS平台是一个开放式的开发平台,让开发者可以方便快捷地创建、开发、部署和管理SaaS应用。
  • BK-SOPS:标准运维(SOPS)是通过可视化的图形界面进行任务流程编排和执行的系统,是蓝鲸体系中一款轻量级的调度编排类SaaS产品。
  • BK-CMDB:蓝鲸配置平台是一个面向资产及应用的企业级配置管理平台。

Contributing

如果你有好的意见或建议,欢迎给我们提 Issues 或 Pull Requests,为蓝鲸开源社区贡献力量。

  1. 本项目使用 Poetry 进行开发、构建及发布,本地开发环境搭建请参考 Poetry 官方文档
  2. PR 需要通过 CI 中的所有代码风格检查,单元测试及集成测试才可被接受合并
  3. 新增加的模块请确保完备的单元测试覆盖

License

基于 MIT 协议, 详细请参考LICENSE

More Repositories

1

bk-cmdb

蓝鲸智云配置平台(BlueKing CMDB)
Go
5,312
star
2

bk-ci

蓝鲸持续集成平台(蓝盾)
Kotlin
2,317
star
3

bk-sops

蓝鲸智云标准运维(SOPS)
Python
1,033
star
4

legacy-bk-paas

蓝鲸智云PaaS平台(BlueKing PaaS)
Python
860
star
5

bk-job

蓝鲸作业平台(Job)是一套运维基础操作管理系统,具备海量任务并发处理能力。除了支持脚本执行、文件分发、定时任务等一系列基础运维场景以外,还支持通过流程调度能力将零碎的单个任务组装成一个自动化作业流程;而每个作业都可做为一个原子节点,提供给上层或周边系统/平台使用,实现调度自动化。
Java
778
star
6

bk-bcs

蓝鲸智云容器管理平台(BlueKing Container Service)
Go
772
star
7

blueking-paas

蓝鲸智云PaaS平台是一个开放式的开发平台,让开发者可以方便快捷地创建、开发、部署和管理 SaaS 应用。它提供了完善的前后台开发框架、服务总线(ESB)、API Gateway、调度引擎、公共组件 等服务。旨在帮助用户快速、低成本的构建免运维运营系统与支撑工具。
Python
164
star
8

bk-itsm

ITSM-流程服务管理,通过可自定义设计的流程管理,同时关联蓝鲸智云的基础平台、公共组件,以满足IT服务的管理活动和场景需要。帮助用户规范内部管理流程,并提升管理效率。
Python
124
star
9

best-practices

腾讯蓝鲸团队 多年的编程最佳实践总结,包括 Python \ Golang 等多个语言及其相关领域
119
star
10

bk-log

蓝鲸日志平台是为了解决运维场景中查询日志难的问题而推出的一款SaaS,基于业界主流的全文检索引擎,通过蓝鲸智云的专属agent进行日志采集,无需登录各台机器,集中管理所有日志。
Python
116
star
11

BKDocs

蓝鲸文档中心
Python
93
star
12

bk-iam

BK-IAM is a centralized permission management service provided by The Tencent BlueKing; based on ABAC
Go
68
star
13

bk-user

蓝鲸用户管理是蓝鲸智云提供的企业组织架构和用户管理解决方案,为企业统一登录提供认证源服务。
Python
57
star
14

bk-repo

蓝鲸制品库平台(BlueKing REPO)
Kotlin
56
star
15

ci-codeccScan

codecc scan plugin(腾讯代码分析扫描工具集)
Java
51
star
16

bk-hcm

蓝鲸云管理平台(BK-HCM)
Go
47
star
17

bk-nodeman

蓝鲸节点管理,可以对蓝鲸体系中的GSE Agent进行管理,包括状态查询、版本更新、配置管理、健康检查、进程管理等。
Python
47
star
18

bk-lesscode

蓝鲸运维开发平台提供了前端页面在线可视化拖拽组装、配置编辑、源码生成、二次开发等能力。旨在帮助用户快速设计和开发 SaaS。
Vue
46
star
19

bk-chatbot

bk-chatbot 是一款可通过可视化的界面进行任务配置,通过聊天终端软件如企业微信应用机器人进行会话交互实现任务执行的蓝鲸 SaaS 产品。
Python
46
star
20

bkui-vue2

根据蓝鲸前端规范、设计规范并结合我们业务开发过程中的积累沉淀,提供一套基础组件,供开发人员使用
Vue
45
star
21

blueking-dbm

DBM,数据库管理
Python
43
star
22

bk-monitor

监控平台是蓝鲸智云官方推出的一款业务观测产品,具有丰富的数据采集能力,大数据处理能力,强大的平台扩展能力。依托于蓝鲸 PaaS,在整个蓝鲸生态中可以形成完整的观测的闭环能力,帮助业务真正建立覆盖CI-CD-CO的业务运营体系。
Python
34
star
23

blueking-apigateway

蓝鲸 API 网关(API Gateway),是一种高性能、高可用的 API 托管服务
Python
29
star
24

bk-iam-saas

BK-IAM is a centralized permission management service provided by The Tencent BlueKing; based on ABAC
Vue
27
star
25

bkui-vue3

TypeScript
27
star
26

bkpaas-python-sdk

蓝鲸 PaaS 平台 Python 工具集
Python
26
star
27

bk-plugin-framework-python

Python
21
star
28

bkmonitor-datalink

数据链路为蓝鲸监控平台提供通用统一的数据采集、转换和存查能力。
Go
19
star
29

iam-python-sdk

python sdk for bk-iam
Python
18
star
30

bk-process-config-manager

进程配置管理是腾讯蓝鲸智云推出的一个专注于进程和配置文件管理的 SaaS 工具。
Python
17
star
31

bkunifylogbeat

蓝鲸日志采集器基于GSE采集框架 & Beats 进行开发,并为日志平台、计算平台、BCS等平台提供日志采集服务。
Go
17
star
32

bk-saas-edu

蓝鲸 SaaS 开发对外课程资料
CSS
16
star
33

bk-turbo

蓝鲸编译加速平台,提供底层编译加速解决方案
Go
16
star
34

bk-nocode

可视化开发平台(S-marker),是基于ITSM能力提供可视化建表,无代码搭建功能流程和页面,迅速开发部门级轻量应用, 实现需求快速响应的无代码开发平台。
Python
15
star
35

blueking-apigateway-apisix

蓝鲸 API 网关 - 数据面
Lua
15
star
36

blueking-apigateway-operator

蓝鲸 API 网关 - Operator
Go
15
star
37

gopkg

gopkg go公共模块
Go
14
star
38

bk-dop

DOP是一个基于蓝鲸智云开发的数据管理工具,旨在简化各类大数据组件的日常运维操作、降低使用门槛、提高运维效率,目前支持Elasticsearch、Kafka、Hadoop。
Python
14
star
39

ci-CodeCCCheckAtom

CodeCC插件(腾讯代码分析插件)
Kotlin
12
star
40

bkui-cli

蓝鲸前端脚手架(bkui-cli)
TypeScript
10
star
41

ci-checkout

pull git repo plugin 拉取git仓库插件
Kotlin
10
star
42

bk-resource

bk_resource 是基于 Blueapps & Django Rest Framework,快速生成符合 12-factor 规范的 WEB SaaS 的脚本架
Python
9
star
43

iam-go-sdk

Go sdk for bk-iam
Go
9
star
44

ci-base-images

bk ci all base image 流水线公共基础镜像
Dockerfile
8
star
45

ci-repoAnalysis

蓝鲸制品库制品分析工具集
Go
8
star
46

bk-goods-application

该项目是为蓝鲸高校学生创建的一个项目,希望通过三期的迭代让各位同学逐步掌握蓝鲸框架、django、vue和celery等技能。
Python
8
star
47

bk-monitor-report

蓝鲸监控自定义上报 Python SDK,支持获取当前系统配置的 prometheus metrics 上报到蓝鲸监控中
Python
8
star
48

django-versionlog

django-versionlog是为网站开发者提供版本日志快速接入的功能模块,支持django框架,兼容python2和python3。
CSS
7
star
49

bk-weweb

蓝鲸微前端
TypeScript
7
star
50

bkflow-feel

bkflow-feel 是一款基于 Python 的 FEEL (Friendly Enough Expression Language) 语法解析器,用于对 FEEL 语法表达式进行解析和运算,得到对应的 Python 对象作为计算结果。
Python
7
star
51

blueapps

"开发框架"是蓝鲸智云团队为开发者提供的示例代码,基于此框架,开发者可以快速上手,利用蓝鲸智云集成平台(PaaS)提供的调度引擎、公共组件等模块,构建低成本、免运维的支撑工具和运营系统。
Python
7
star
52

bk-operator-framework

bk-operator-framework 是一个轻量化的Kubernetes Operator开发的框架和库。 开发者只需要几行python代码就可以完成一个Kubernetes Operator的开发!!!
Python
7
star
53

bk-training-award-open

奖项申报系统
Python
6
star
54

ci-git-checkout

git拉取核心模块
Kotlin
6
star
55

bk-apigateway-sdks

蓝鲸 API 网关 SDK 及工具集,主要托管 Go 版本实现,以简化插件应用及蓝鲸应用的使用成本。
Go
6
star
56

bk-install

Shell
6
star
57

bscp-go

bscp-go 是蓝鲸基础配置平台(BK-BSCP)提供的用于快速接入KV SDK,配置热更新,执行前后置脚本的官方命令行工具
Go
6
star
58

bkflow-dmn

bkflow-dmn 是一款基于 Python 的 DMN(Decision Model Notation) 库,使用 FEEL(Friendly Enough Expression Language) 作为描述语言,可以作为决策引擎,用于解决实际业务场景中的决策问题。
Python
6
star
59

crypto-python-sdk

️🔧 BlueKing crypto-python-sdk 是一个基于 pyCryptodome / tongsuopy 等加密库的轻量级密码学工具包,为 Python 应用统一的加解密实现, 便于项目在不同的加密方式之间进行无侵入切换
Python
6
star
60

django-test-toolkit

基于Django提供的一款测试工具箱。
Python
5
star
61

bk-audit-python-sdk

bk-audit-python-sdk 是蓝鲸审计中心 (BK-AUDIT) 提供的用于快速接入审计体系的 Python SDK
Python
5
star
62

bk-audit

蓝鲸审计中心旨在基于蓝鲸生态打造行业标杆性审计产品,通过蓝鲸底层能力,提供人员操作审计、业务资产审计、业务合规审计等丰富的审计服务
Python
5
star
63

bscp-cpp-sdk

bscp-cpp-sdk 是蓝鲸 BSCP 项目的 C++ SDK,它能帮助你轻松访问项目保存在 BSCP 上的配置内容。
C++
5
star
64

crypto-golang-sdk

️🔧 BlueKing crypto-golang-sdk 是一个基于铜锁的轻量级密码学工具包,为 Golang 应用提供 SM4 等算法的加解密实现
Go
4
star
65

bk-audit-java-sdk

蓝鲸审计中心 Java SDK
Java
4
star
66

crypto-java-sdk

蓝鲸加解密算法Java SDK
Java
4
star
67

bscp-python-sdk

bscp-python-sdk 是蓝鲸 BSCP 项目的 Python SDK,它能帮助你轻松访问项目保存在 BSCP 上的配置内容。
Python
4
star
68

bk-training-open

联合开发项目
Python
4
star
69

blueking-console

HTML
3
star
70

bk-monitor-grafana-plugins

蓝鲸监控平台的grafana数据源
TypeScript
3
star
71

ci-AcrossProjectDistribution

推送至其他项目自定义仓库插件
Kotlin
3
star
72

beego-runtime

Go
3
star
73

bscp-java-sdk

bscp-java-sdk 是蓝鲸 BSCP 项目的 java SDK,它能帮助你轻松访问项目保存在 BSCP 上的配置内容。
Java
3
star
74

blueking-auth

蓝鲸 auth 服务
Go
3
star
75

ci-uploadArtifact

归档构件插件
Kotlin
2
star
76

ci-turbo

编译加速插件
Kotlin
2
star
77

ci-dockerBuildPush

构建并推送镜像插件
Kotlin
2
star
78

bk-iam-cli

蓝鲸权限中心CLI(bk-iam-cli) 用于权限中心调试及分析, 可以获取前后台模型/策略/表达式/缓存等数据。
Go
2
star
79

bk-plugin-framework-go

Go
2
star
80

bk-iam-search-engine

A search engine for bk-iam
Go
2
star
81

bk-plugin-client-go

Go
2
star
82

ci-ios-sign-local

iOS重签名
Kotlin
1
star
83

ci-sendEmail

Blueking email plugin 蓝鲸平台邮件通知插件
Java
1
star
84

ci-downloadPipelineArtifact

拉取构件-流水线仓库
Kotlin
1
star
85

ci-pushJobFile

蓝鲸作业平台-文件分发插件
Kotlin
1
star
86

bk-notice-java-sdk

bk-notice-java-sdk是蓝鲸Java系产品用于对接蓝鲸消息通知中心的一套开发工具包。
Java
1
star
87

blueking-honor

旨在企业内部提供一套通用的员工荣誉激励解决方案
Python
1
star
88

bk-codecc

腾讯代码分析
1
star
89

ci-executeJobScript

Execute BKJob Script Plugin 蓝鲸作业平台脚本执行插件
Kotlin
1
star
90

lesscode-custom-components

蓝鲸智云可视化开发平台(LessCode),自定义组件框架
TypeScript
1
star