Conductor 项目结构分析

Aeron是如何实现的?—— Conductor 接上文 《Aeron是什么?》 《Aeron中这么多空闲策略选哪个?》 0. 简介 最近我们用 Aeron 实现了 Mesh agent 与 sdk 之间的共享内存通信,但是在使用过程中越来越感觉到 Aeron 框架太重了,其中很大部分功能完全用不到,有些想要自定义的逻辑很难在现有框架中实现。所以我们计划深入到 Aeron 源码中,看看它是如何实现的,最终尝试实现一个轻量的 Mesh 共享内存通信类库。再回过头来看一下这张架构图: Media Driver 组件负责管理数据通过媒介(UDP 或 阅读详情

在这里插入图片描述

Conductor 是通过Gradle管理依赖的。很多童鞋,可能对Gradle不熟悉,在初步启动的时候就遭遇瓶颈。
在要学习和了解一个项目的时候:

  • 第一点是要看官方文档,熟悉项目架构;
  • 第二点就要启动项目,对项目的运行情况有个整体认知;

项目结构

前面文章已经熟悉了项目的内部应用架构(或者称为概念关系);接下来就要熟悉项目的部署架构,以及项目模块结构。

官方提供的项目结构如下:

ArtifactDescription描述
conductor-commonCommon models used by various conductor modules各种conductor模块使用的通用模块
conductor-coreCore Conductor moduleconductor 的核心模块
conductor-redis-persistencePersistence and queue using Redis/Dynomiteredis存储支持模块
conductor-cassandra-persistencePersistence using CassandraCassandra 存储模块
conductor-es6-persistenceIndexing using Elasticsearch 6.Xes 模块
conductor-restSpring MVC resources for the core services核心服务的spring mvc 暴露的资源
conductor-uinode.js based UI for Conductor基于node.js的ui页面
conductor-clientJava client for Conductor that includes helpers for running worker tasksConductor 的 Java 客户端,包括运行工作任务的工具
conductor-client-springClient starter kit for Spring客户端的starter的工具
conductor-java-sdkSDK for writing workflows in code通过代码写工作流的sdk
conductor-serverSpring Boot Web Applicationconductor 服务端
conductor-redis-lockWorkflow execution lock implementation using Redis分布式锁通过redis实现
conductor-awss3-storageExternal payload storage implementation using AWS S3s3存储的实现
conductor-awssqs-event-queueEvent queue implementation using AWS SQS基于AWS SQS 实现的事件队列
conductor-http-taskWorkflow system task implementation to send make requests工作流系统任务通过http发送请求的实现
conductor-json-jq-taskWorkflow system task implementation to evaluate JSON using jq利用工作流系统任务执行来评估 JSON
conductor-grpcProtobuf models used by the server and clientgrpc的客户端和服务端使用的Protobuf模块
conductor-grpc-clientgRPC client to interact with the gRPC server与 gRPC 服务器交互的 gRPC 客户端
conductor-grpc-servergRPC server Applicationgrpc服务端
conductor-test-harnessIntegration and regression tests集成和回归测试

通过官方项目模块看到基础组件需要依赖ES,Redis,Cassandra等组件。官方还提供了社区提供的扩展仓库介绍如下:

Parent FolderDescription描述
event-queueSupport for external eventing systems like AMQP and NATS事件队列,支持扩展AMQP和NATS
external-payload-storageStorage for large workflow payloads存储支持的扩展pg和azureblob
indexIndexing for searching workflows支持es7
metricsSupport for various metrics integrations including Datadog and Prometheus支持datadog和Prometheus
persistencePersistence for metadata, execution and queue implementation支持mysql和pg
taskVarious system tasks - Kafka Publish支持kakfa发布
lockWorkflow execution lock implementation支持zookeeper的实现
workflow-event-listenerWorkflow Status Listener and Binary compatibility with previously published conductor-contribs工作流程状态监听器和二进制与先前发布的指挥- conductor-contribs

通过社区的扩展,可以支撑Conductor的环境更加多样化,诸神也可以根据自己的需要进行扩展,比如对nacos的支持等。对于组件的依赖是必然的,想要启动的服务,需要部署相关的组件。想要运行起来,依赖的环境列表至少要包含必须的环境:

  1. 准备Java环境是必不可少的
  2. 准备Gradle环境
  3. MySQL
  4. 准备Redis环境
  5. 准备ES环境

下一节进行项目的编译和启动。

Android高可拓展框架Conductor源码解析(2) Conductor源码解析 阅读详情

相关推荐

conductor 3.13.2 community 版本连接mysql测试

conductor 从3.8开始将Netflix 外部共享的内容专业到community 下,github 连接为。community 由 https://orkes.io/ 维护。community下主要包括1、数据库,MYSQL及PG支持3、外部payload,pg及aws bolb5、es7 支持7、metric。

weixin_40455124的博客 1096

Conductor 项目结构优化及分析

Conductor 结构优化

FF-ZERO 428

conductor 的concurrentExecLimit及rateLimit 实现分析

conductor 的concurrentExecLimit及rateLimit 的核心逻辑在ExecutionService 的如下代码中: public List<Task> poll(String taskType, String workerId, String domain, int count, int timeoutInMilliSecond) { ... for (String taskId : taskIds) { try

weixin_40455124的博客 395

conductor client 代码快速分析

conductor client 比较简单,包括以下两个子项目 1、client 2、client-spring client-spring是spring boot实现。 从以下spring boot核心类可以看到做什么 public class ConductorClientAutoConfiguration { @Autowired(required = false) private EurekaClient eurekaClient; @Autowired(required

weixin_40455124的博客 553

conductor event 和wait 分析及测试记录

总结 conductor 的wait按官方说法可以通过消息队列及conductor api触发: 1、没有aws队列环境,没有测试队列触发模式 2、测试过程没有找到对应rest,/api/queue/update/{workflowId}/{taskRefName}/{status} 一直报告 { "status": 400, "message": "INVALID_INPUT - There is no queue for handling COMPLETED_WITH_ERRORS status

weixin_40455124的博客 588

Conductor 3.13.2 SystemTask执行过程初步分析

slot 数量配置在ConductorProperties 类(可用通过conductor.app前缀配置)注意kafka publish 已经转到community 里面了。默认是示意共享池,slot=cpu*2。

weixin_40455124的博客 574

conductor 3.13.2 的InProgressLimit及RateLimit实现分析

RateLimit只在redis模式下支持,以Redis为例分析InProgressLimit及RateLimit实现。 InProgressLimit 存放在TASKS_IN_PROGRESS_STATUS中,核心包括 修改task时候根据状态使用 jedisProxy.sadd(nsKey(TASKS_IN_PROGRESS_STATUS, task.getTaskDefName()), task.getTaskId()); 或者 jedisProxy.srem(nsKey(TASKS_IN_PR

weixin_40455124的博客 580

Conductor sweep 机制

先看核心代码 public void sweep(String workflowId) { try { WorkflowContext workflowContext = new WorkflowContext(properties.getAppId()); WorkflowContext.set(workflowContext); LOGGER.debug("Running sweeper for workflow

weixin_40455124的博客 341

conductor 3.13 fork 和dynamic fork 分析

然后要注意FORK_JOIN_DYNAMIC 的dynamicTasks及dynamicTasksInput。join task 无需定义 joinOn,默认会汇聚所有dynamic task的结果。fork -join 不复杂,在join的时候有些要注意。注意下join是有输出的,会自动汇聚joinOn的结果。Dynamic Fork 的tasks可以分为3个。以下为一个fork的workflow定义。执行如下内容输出join的output。可以在join后增加一个task。task 生成示意代码如下。

weixin_40455124的博客 463

conductor 3.7以上 jedisCommands ArrayIndexOutOfBoundsException 解决分析

在conductor 新版本(3.7和3.12)server 测试过程中都出现如下错误 这个问题出现下spring boot bean初始化过程中,没有明确的提示,只能使用debug进行一步步的跟踪首先判断是如下代码出现问题 经过漫长跟踪,最后发现是dyno的问题,在HostUtils.java 的calculateReplicationFactorForDC函数有如下代码 这段代码没有判断uniqueCounts 是否为空,结合前面的for 语句可以知道是datacenter设置有问题。server下的a

weixin_40455124的博客 429

conductor cluster server decision处理冲突解决方法

本文没有进行测试,只是根据文档进行分析记录:主要方式有 1、使用localOnly 2、 使用不同conductor.redis.queueNamespacePrefix 3、使用lock,注意3.8开始不支持zookeeper lock,即只能使用redis lock,redis lock支持sentinel 和single node两种模式。Considering a situation where a conductor instance goes down: * With local-only st

weixin_40455124的博客 459

conductor task queue pop及push

pop及push在conductor 可以理解为获取要执行的task、生产待执行的task。 核心类是QueueDAO的实现类,如MySQLQueueDAO extends MySQLBaseDAO implements QueueDAO。 POP分析 pop相对简单,dao的核心代码(以mysql为例) private List<Message> popMessages(Connection connection, String queueName, int count, int timeou

weixin_40455124的博客 582

conductor decide核心代码分析

核心执行类都在package com.netflix.conductor.core.execution下,decide的关键代码包括 public class WorkflowExecutor 的decide函数 public class DeciderService 的decide函数 WorkflowExecutor 的decide函数会调用DeciderService 的decide函数,代码如下 /** * @param workflowId ID of the workflow to ev

weixin_40455124的博客 552

Java_Conductor是一个事件驱动的编排平台.zip

Java_Conductor是一个事件驱动的编排平台

AI时代敏捷开发新范式——意图驱动开发IDD

具体的功能代码、单元测试、集成测试用例,以及最终可运行的、支持PlantUML的Markdown转Word工具新版本。:业务方(如技术文档团队)反馈,现有的Markdown转Word工具在处理包含PlantUML代码块的文档时,无法正确生成图表,导致技术方案、架构图等关键信息丢失,严重影响了文档交付质量和团队效率。这不仅带来了交付周期显著缩短、资源效能倍增的可观收益,更深远的意义在于,它描绘了未来软件工业化、智能化的新图景:一个由精准意图驱动、AI自主执行、人类智慧引领的敏捷、高效、高质的新世界。

LiuJunjiang的专栏 563

Docker Desktop 在 Windows 上的安装和使用

WSL 指 “”,这是一个在 Windows 10\11 上能够运行原生 Linux 二进制可执行文件(ELF格式)的兼容层。它是由微软与Canonical公司合作开发的,旨在使纯正的Ubuntu、Debian等映像能下载和解压到用户的本地计算机,并且映像内的工具和实用工具能在此子系统上原生运行。这极大地拓展了Windows系统的功能,使用户能够在Windows环境中享受到Linux的强大功能。//Linux容器。

swadian2008的博客 6万+

企业微信会话存档SDK集成与动态库加载实战

本文详细解析了企业微信会话存档SDK的集成与动态库加载实战,重点解决Windows与Linux环境下动态库加载的差异问题。通过实战案例和优化建议,帮助开发者高效完成企业微信API集成,确保合规存档功能稳定运行。

weixin_26934905的博客 465

【WorkBuddy专栏51】Codex与WorkBuddy的底层基因——两条完全不同的AI智能体路线(上)

【WorkBuddy专栏51】Codex与WorkBuddy的底层基因——两条完全不同的AI智能体路线(上)

AI人人懂 2193

air780e stm32标准库发送英文短信,如何实现?(附相关源码,仅供参考)

🏆 本文收录于《全栈Bug调优(实战版)》专栏,致力于分享我在项目实战过程中遇到的各类Bug及其原因,并提供切实有效的解决方案。无论你是初学者还是经验丰富的开发者,本文将为你指引出一条更高效的Bug修复之路,助你早日登顶,迈向财富自由的梦想🚀!同时,欢迎大家关注、收藏、订阅本专栏,更多精彩内容正在持续更新中。让我们一起进步,Up!Up!Up!    备注: 部分问题/难题源自互联网,经过精心筛选和整理,结合数位十多年大厂实战经验资深大佬经验总结所得,数条可行方案供所需之人参考。

**My Coding Family** 1240

华为OD面试手撕真题 【合并相邻且相等的元素】多语言题解

华为OD面试高频手撕真题【合并相邻且相等的元素】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解。

qq_45776114的博客 550

Python爬虫教程:抓取社交媒体内容(以Facebook和Instagram为例)

为什么抓取社交媒体内容?品牌分析与监测:通过抓取品牌、产品或服务相关的社交媒体数据,可以获得公众对其的评价,识别市场趋势,制定营销策略。情感分析:分析用户在社交平台上的情感倾向,如对某事件、产品、服务的正面或负面情绪。舆情监控:通过抓取大量社交媒体内容,监测公众对热点事件的反应,发现潜在的社会问题。用户行为分析社交媒体的数据类型:帖子和内容:包括用户发布的文本、图片、视频等。用户互动用户信息:包括用户名、粉丝数、关注数等社交信息。社交媒体的反爬虫机制:API限制。

2201_76125261的博客 1340

【漏洞复现】爱数云盘 Usrm_GetAllUsers 未授权访问漏洞

爱数 AnyShare存在未授权漏洞,未授权的攻击者可以通过该漏洞获取用户名信息。

qq_67810151的博客 3122

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

上一篇: Git 常用术语和命令
下一篇: Conductor 项目的编译启动
五之
博客等级 码龄15年 257粉丝 28原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

五之

真实案例以及商业项目技术

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值