工作流引擎Conductor

Conductor 是 Netflix 开源的分布式工作流编排引擎,用于协调微服务、API 和任务的执行顺序。它通过声明式工作流定义,实现复杂业务流程的自动化管理,特别适合电商订单处理、数据管道、CI/CD 等场景。

核心概念

1. 工作流(Workflow)
  • 由多个任务组成的有向无环图(DAG),定义业务流程逻辑。
  • 示例:电商订单流程(创建订单 → 支付验证 → 库存锁定 → 物流分配)。
2. 任务(Task)
  • 工作流的基本执行单元,分两类:
    • 系统任务:Conductor 内置任务(如决策、循环、并行分支)。
    • 工作任务:外部服务执行的任务(通过 REST/SQS 等调用)。
3. 工作流执行(Workflow Instance)
  • 工作流的一次运行实例,包含状态、参数和执行历史。
4. 任务执行(Task Instance)
  • 任务的一次运行实例,有状态(SCHEDULED、IN_PROGRESS、COMPLETED、FAILED)。
5. 工作流定义(Workflow Definition)
  • JSON/YAML 格式,描述工作流结构:
    {
      "name": "order_processing",
      "version": 1,
      "tasks": [
        {
          "name": "validate_payment",
          "taskReferenceName": "payment",
          "type": "SIMPLE"
        },
        {
          "name": "lock_inventory",
          "taskReferenceName": "inventory",
          "type": "SIMPLE",
          "startDelay": 5,
          "inputParameters": {
            "orderId": "${workflow.input.orderId}"
          }
        }
      ]
    }
    

架构组件

  1. Conductor Server

    • 核心服务,管理工作流和任务的生命周期。
    • 提供 REST API 和 UI(Workflow Studio)。
  2. Metadata Service

    • 存储工作流和任务定义。
  3. Execution Service

    • 协调工作流执行,维护状态。
  4. Queue Service

    • 任务调度队列(支持 SQS、Kafka、Redis 等)。
  5. Workflow Workers

    • 执行具体任务的微服务/进程。
  6. Persistence Layer

    • 存储工作流状态(支持 Cassandra、Elasticsearch、MySQL 等)。

工作流程

  1. 定义工作流:通过 JSON/YAML 定义工作流结构和任务关系。
  2. 注册工作流:将定义上传至 Conductor Server。
  3. 触发工作流:通过 API 传入输入参数启动实例。
  4. 任务调度:Conductor 将任务放入队列,Worker 拉取并执行。
  5. 结果反馈:Worker 完成任务后,通过 API 更新任务状态。
  6. 工作流推进:Conductor 根据任务结果推进流程,直至完成。

关键特性

1. 任务类型
  • 简单任务(SIMPLE):外部服务执行的任务。
  • 决策任务(DECISION):基于条件选择分支。
  • 循环任务(FOR_EACH):迭代处理集合。
  • 并行分支(FORK_JOIN):并行执行多个任务。
  • 子工作流(SUB_WORKFLOW):嵌套调用其他工作流。
2. 动态工作流
  • 支持运行时动态修改工作流定义。
  • 通过 Dynamic Fork Task 实现灵活分支。
3. 错误处理
  • 重试策略:自动重试失败任务(固定延迟、指数退避)。
  • 补偿机制:定义补偿任务(如支付失败后回滚库存)。
  • 警报机制:任务超时或失败时触发通知。
4. 监控与可视化
  • Workflow Studio:图形化界面查看工作流执行状态。
  • Metrics:集成 Prometheus、Grafana 监控关键指标。
5. 扩展性
  • 支持插件式扩展存储、队列、认证等组件。
  • 多语言 SDK(Java、Python、Go、Node.js)。

典型应用场景

  1. 电商订单处理

    创建订单 → 支付验证 → 库存检查 → 发货通知 → 更新账户积分
    
    • 支持并行处理(如同时发送短信和邮件通知)。
  2. 数据管道

    数据抽取 → 清洗转换 → 分区存储 → 触发计算任务 → 生成报表
    
    • 支持任务依赖和失败重试。
  3. CI/CD 流程

    代码提交 → 编译 → 单元测试 → 集成测试 → 部署 → 冒烟测试
    
    • 通过动态参数支持多环境部署。
  4. 批处理作业

    • 并行处理大量数据记录,汇总结果。

与其他工作流引擎对比

特性 Conductor Camunda Airflow Temporal
架构模型 微服务优先 BPMN 驱动 DAG 驱动 有状态服务
语言支持 多语言 Java 为主 Python 多语言
部署方式 分布式 单体/集群 分布式 分布式
可视化 中等 优秀 良好 中等
事务性 最终一致性 强一致性 弱一致性 强一致性
适用场景 微服务编排 企业流程 数据管道 长时间运行

快速上手示例

1. 启动 Conductor Server
# 使用 Docker 快速启动
docker-compose -f docker-compose.yml up -d
2. 定义工作流
{
  "name": "hello_world",
  "version": 1,
  "tasks": [
    {
      "name": "print_hello",
      "taskReferenceName": "hello",
      "type": "SIMPLE",
      "inputParameters": {
        "message": "Hello from Conductor"
      }
    }
  ]
}
3. 创建 Worker
// Java Worker 示例
public class HelloWorldWorker implements Worker {
    @Override
    public String getTaskDefName() {
        return "print_hello";
    }

    @Override
    public TaskResult execute(Task task) {
        TaskResult result = new TaskResult(task);
        result.setStatus(Status.COMPLETED);
        result.getOutputData().put("response", "Hello executed successfully");
        return result;
    }
}
4. 注册工作流并启动实例
# 注册工作流
curl -X POST -H "Content-Type: application/json" \
  -d @workflow_definition.json \
  http://localhost:8080/api/metadata/workflow

# 启动工作流实例
curl -X POST -H "Content-Type: application/json" \
  http://localhost:8080/api/workflow/hello_world

最佳实践

  1. 任务拆分原则

    • 保持任务原子性,避免长耗时任务。
    • 通过子工作流封装复杂子流程。
  2. 性能优化

    • 调整队列配置(如 SQS 批处理大小)。
    • 使用索引加速查询(如 Elasticsearch)。
  3. 监控与告警

    • 监控任务执行时间、队列积压情况。
    • 设置阈值触发告警(如任务超时、失败率升高)。
  4. 版本控制

    • 使用语义化版本管理工作流定义。
    • 通过 version 字段管理不同版本。

总结

Conductor 适合需要灵活编排微服务、支持动态流程和高并发的场景。其优势在于分布式架构多语言支持可视化管理,能显著提升复杂业务流程的开发和维护效率。如果你正在构建微服务架构或需要编排跨系统任务,Conductor 是值得考虑的选择。

你可能感兴趣的:(职业重启计划,工作心得,conductor,java)