Netflix Conductor 源码分析—— Metadata API & Service

本系列基于 Conductor release v3.5.2

1. 概述

本文主要分享Metadata API的实现,以Redis实现为例,分析 Metadata 的实现方法。
Metadata API 功能为定义工作流和任务

Conductor Server 的 API 层提供了两种实现基于 http 的 Restful 风格的接口以及 gRPC 接口。官方文档介绍中说到

The API and storage layers are pluggable and provide ability to work with different backends and queue service providers.

MetadataService 中调用的 MetadataDAO 支持4种持久化实现:

  • RedisMetadataDAO
  • PostgresMetadataDAO
  • MySQLMetadataDAO
  • CassandraMetadataDAO

2. RedisMetadataDAO

com.netflix.conductor.redis.dao.RedisMetadataDAO构造方法中参数com.netflix.conductor.redis.jedis.JedisProxy实例由Spring Bean创建。其中JedisProxy主要操作的类JedisCommands在《Netflix Conductor 源码分析—— 初始化》文中提到com.netflix.conductor.redis.config.InMemoryRedisConfiguration中初始化。

在构造方法里还启动了一个定时线程,定时刷新任务定义缓存(taskDefCache)。taskDefCache为一个在内存中的Map(Map)

RedisMetadataDAO 各方法实现

  • createTaskDef / updateTaskDef 创建或更新任务定义
    89行调用 HSET 方法保存到 redis。并刷新 taskDefCache 及记录日志
  • getTaskDef 根据任务名称获取任务定义
    110行 先从缓存中获取,如果缓存中没有则从redis里取
  • createWorkflowDef
    297行调用 HSET 方法把定义保存到 redis。
    302行调用 SADD 把名称保存到 redis。
    WorkflowDef 与 TaskDef 存储方式不一样,前者是一个名称+版本作为了一个 HASH 集合;后者所有Task放到同一个 HASH 集合

你可能感兴趣的:(Netflix Conductor 源码分析—— Metadata API & Service)