Logo

Direktiv: 事件驱动的无服务器工作流引擎

Direktiv简介

Direktiv是一个事件驱动的无服务器工作流引擎,专为云原生环境下的编排、集成和自动化而设计。它由Go语言开发,采用Apache 2.0许可证开源。Direktiv的核心是一个状态机,使用容器作为工作流中的函数,并在状态之间传递JSON结构化数据。

Direktiv Logo

Direktiv提供了以下主要特性:

  • YAML定义: 使用简单的YAML语法定义工作流和子工作流,支持if/else条件判断、错误处理、重试、验证等功能。
  • 无服务器: 可以在工作流中调用多个无服务器函数,并将响应合并修改为单个可消费的函数调用。
  • 事件驱动: 可以捕获系统内部或来自AWS、Github等外部源的事件,并基于事件执行工作流。
  • JSON输入和状态: 使用JSON作为工作流的输入,并以JSON响应调用者。JSON数据会在工作流的各个状态之间保存。
  • API网关: 包含API网关,可将工作流作为服务暴露给第三方消费者,并支持身份验证。
  • CloudEvents支持: 原生支持CNCF的CloudEvents规范。
  • GitOps方法: 所有配置、服务和工作流都可以从Git同步,Git成为单一事实来源。
  • 可观察性: 集成了Prometheus(指标)、Fluent Bit(日志)和OpenTelemetry(检测和跟踪)。
  • 定期任务: 可以通过cron作业定期调用工作流执行重复任务。
  • 可扩展: Direktiv可以在多个层面进行扩展,支持Kubernetes和Knative的扩展特性。
  • 易于扩展: 可以使用简单的Docker容器添加自定义函数。

快速开始

Direktiv提供了一个包含所有必需组件的Docker容器(仅限Linux)。初次启动可能需要几分钟来下载所有必需的镜像。

docker run --privileged -p 8080:80 -ti direktiv/direktiv-kube

如果inotify实例的上限太低,pod可能会卡在"pending"状态。如有必要,可以使用以下命令增加该限制: sudo sysctl fs.inotify.max_user_instances=4096

如果你不使用Linux,请参考安装说明进行安装。

工作流编写

编写Direktiv工作流非常简单。本质上,工作流是通过不同的状态进行,在这些状态之间传递JSON负载。这些状态有不同的类型,提供条件分支、错误管理等功能。最重要的类型是action状态,它基本上是对容器的调用。

下面是一个简单的单步工作流示例:

direktiv_api: workflow/v1

functions:
- id: request
  image: gcr.io/direktiv/functions/http-request:1.0
  type: knative-workflow

states:
- id: joke 
  type: action
  action:
    function: request
    input: 
      method: GET
      url: https://api.chucknorris.io/jokes/random?category=jq(.category // "dev")
  transform:
    joke: jq(.return[0].result.value)

这个工作流使用http-request函数发送GET请求到Chuck Norris笑话API。它使用JQ语句jq(.category // "dev")在运行时评估类别。如果状态中定义了'category'值,就会在URL中使用;否则,默认使用'dev'。

Direktiv Workflow

自定义函数

虽然Direktiv可以使用任何标准容器,但如果需要,编写自定义函数也很容易。自定义函数的基本要求是一个监听8080端口并接受JSON负载的容器。以下是一个简单的Rust自定义函数示例:

use actix_web::{App, HttpResponse, HttpServer, Responder, post};
use actix_web::web::Json;
use serde::{Deserialize, Serialize};

#[derive(Deserialize)]
struct Input {
    name: String,
}

#[derive(Serialize)]
struct Output {
    greeting: String,
}

#[post("/")]
async fn index(info: Json<Input>) -> impl Responder {
    HttpResponse::Ok().json(Output { greeting: format!("Welcome to Direktiv, {}!", info.name) })
}

#[actix_rt::main]
async fn main() -> std::io::Result<()> {
    HttpServer::new(|| {
        App::new()
            .service(index)
    })
        .bind("0.0.0.0:8080")?
        .run()
        .await
}

社区和贡献

Direktiv是一个活跃的开源项目,欢迎社区贡献。项目采用了贡献者公约作为行为准则。如果你想参与贡献,可以阅读贡献指南了解详情。

你可以通过以下方式与Direktiv社区互动:

Direktiv是一个强大而灵活的工作流引擎,适用于各种云原生场景。无论你是想构建复杂的业务流程,还是简单的自动化任务,Direktiv都能提供所需的工具和功能。通过其简洁的YAML语法和容器化的函数approach,Direktiv使得创建和管理工作流变得前所未有的简单。

🚀 立即尝试Direktiv,体验云原生工作流的未来!

最新项目

Project Cover
豆包MarsCode
豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。
Project Cover
AI写歌
Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。
Project Cover
商汤小浣熊
小浣熊家族Raccoon,您的AI智能助手,致力于通过先进的人工智能技术,为用户提供高效、便捷的智能服务。无论是日常咨询还是专业问题解答,小浣熊都能以快速、准确的响应满足您的需求,让您的生活更加智能便捷。
Project Cover
有言AI
有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。
Project Cover
Kimi
Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。
Project Cover
吐司
探索Tensor.Art平台的独特AI模型,免费访问各种图像生成与AI训练工具,从Stable Diffusion等基础模型开始,轻松实现创新图像生成。体验前沿的AI技术,推动个人和企业的创新发展。
Project Cover
SubCat字幕猫
SubCat字幕猫APP是一款创新的视频播放器,它将改变您观看视频的方式!SubCat结合了先进的人工智能技术,为您提供即时视频字幕翻译,无论是本地视频还是网络流媒体,让您轻松享受各种语言的内容。
Project Cover
稿定AI
稿定设计 是一个多功能的在线设计和创意平台,提供广泛的设计工具和资源,以满足不同用户的需求。从专业的图形设计师到普通用户,无论是进行图片处理、智能抠图、H5页面制作还是视频剪辑,稿定设计都能提供简单、高效的解决方案。该平台以其用户友好的界面和强大的功能集合,帮助用户轻松实现创意设计。
Project Cover
AIWritePaper论文写作
AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。
投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号